一. 练习

1.1 如何知道一个用户是否在linux系统里存在?

1
2
3
1、如何知道一个用户是否在linux系统里存在?
cat /etc/passwd
或者 id命令

1.2 如何禁用一个用户登陆linux系统

1
2
3
2、如何禁用一个用户登陆linux系统
使用usermod -L 锁定用户
usermod -s /sbin/nologin root

1.3 如何知道一个用户属于哪些组

1
2
3
4
3、如何知道一个用户属于哪些组
使用id命令查看
使用groups命令查看
查看/etc/group里用户所属的组

1.4 如何知道哪些用户现在已经登录在linux里? 哪些用户曾经登陆过linux系统?

1
2
3
4
5
6
7
8
9
10
11
12
13
4、如何知道哪些用户现在已经登录在linux里? 哪些用户曾经登陆过linux系统?
使用w命令查看用户登录情况
使用last命令查看曾经登录过的用户
示例:w who 看当前登录的用户
#注:w看的更详细些
[root@localhost ~]# w
09:37:40 up 8:32, 5 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 四09 6:28 0.09s 0.09s -bash
root pts/3 192.168.136.1 09:29 4.00s 0.05s 0.03s w
[root@localhost ~]# who
root tty1 2020-11-05 09:31
root pts/3 2020-11-06 09:29 (192.168.136.1)

1.5 如何给用户重新设置密码

1
2
5、如何给用户重新设置密码
passwd

1.6 linux的root密码忘记了怎么办

1
2
3
4
5
6
7
6、linux的root密码忘记了怎么办
进入单用户模式
1、开机,按任意键停住启动界面,然后选择对应的内核,按 e 进行编辑
2、找到linux16这一行,在最后输入 rd.break
3、按 Ctrl-x 启动,然后按照以下操作破解 root 密码
示例:忘记root用户密码怎么办?
答:进入单用户模式

https://blog.csdn.net/qq_37960324/article/details/84589565
https://www.cnblogs.com/jsjrj01/p/10301603.htm

1.7 如何将已经登录在系统里的用户踢出去?并且防止它再次登陆?

1
2
3
4
7、如何将已经登录在系统里的用户踢出去?并且防止它再次登陆?
1.踢出可疑的root登录用户,马上修改密码
2.sshd---》/etc/hosts.deny hosts.allow -->ip
3./etc/ssh/sshd_config -->DenyUsers -->用户

1.8 怎么把普通用户变成root用户

1
2
3
8、怎么把普通用户变成root用户
1.(不推荐)修改 /etc/passwd 文件,找到要修改的普通用户,把用户ID修改为 0
2.sudo 权限

1.9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
·  创建目录/tech/cali和/tech/sanle,分别用于保存个项目组中用户帐号的宿主目录;
· 为两个项目组添加组帐号cali、sanle,GID号分别为1001、1002;为技术部添加组帐号tech,GID号为200;
· 添加2个用户,分别为b1、b2,要求他们的基本组是cali,附加组是tech,宿主目录均使用/tech/cali目录中与帐号同名的文件夹(例如b1用户的宿主目录/tech/cali/b1);其中b2用户帐号设置2012-12-31日后失效;
· 添加2个用户,分别为a1、a2,要求他们的基本组是sanle,附加组是tech;宿主目录均使用/tech/sanle目录中与帐号同名的文件夹(例如a1用户的宿主目录/tech/cali/a1) ;其中a2用户帐号登录的shell为/bin/ksh
所有新建用户密码都是123456;

1、mkdir -p /tech/cali /tech/sanle
2、groupadd -g 1001 cali
groupadd -g 1002 sanle
groupadd -g 200 tech
3、useradd -g cali -G tech -d /tech/cali/b1 b1
useradd -g cali -G tech -d /tech/cali/b2 -e 2020-11-6 b2
4、useradd -g sanle -G tech -d /tech/sanle/a100 a1
useradd -g sable -G tech -d /tech/sanle/a200 -s /bin/ksh a2
5、echo 123456|passwd a1 --stdin
echo 123456|passwd a2 --stdin
----------------------------------------------------------------
示例:过期账户不能登录
-----------------------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# useradd -e "2012-11-22" sanle3 # 注:过期账户不能登录
[root@sanchuang-linux ~]# su - sanle3 # 注:可以切换,不能登录
[sanle3@sanchuang-linux ~]$

二. /etc/group文件

/etc/group文件

#注:/etc 存放配置文件的地方

/etc/group文件 # 注:可以查看哪些账户的次要组是

组帐号:

  • 主要组(私有组)

  • 次要组(附属组)

GID:(Group Identify,组标识号)

Linux组帐号

  • 主要组(私有组)

与用户相关的默认组,在/etc/passwd文件的第四个字段定义

  • 次要组(附属组)

用户可以同时属于其他的组,在/etc/group文件的第四个字段定义

用户的主要组的名称和GID相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
示例
---------------------------------------------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# useradd -g sanchuang4 -G sanchuang5 sanchuang10
[root@sanchuang-linux ~]# useradd -g sanchuang4 -G sanchuang5 sanchuang12
[root@sanchuang-linux ~]# useradd -g sanchuang5 -G sanchuang4 sanchuang13
[root@sanchuang-linux ~]# cat /etc/group
sanchuang4:x:1100:sanchuang13 # 注:只显示次要组的组成员列表
sanchuang5:x:1200:sanchuang10,sanchuang12 # 注:只显示次要组的组成员列表
#注:组账号名:sanchuang5;GID:1200;组成员列表sanchuang10,sanchuang12
#注:只显示次要组的组成员列表
===========================================================================================================
示例:怎样查看一个组里有哪些用户
---------------------------------------------------------------------------------------------------------------------------------
#注:联系2个文件 /etc/passwd /etc/group
[root@sanchuang-linux ~]# awk -F: '/sanchuang5/{print $3,$4}' /etc/group
1200 sanchuang10,sanchuang12 # 注:模糊匹配,匹配包含sanchuang5的行
[root@sanchuang-linux ~]# awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group # 注:加引号
1200 sanchuang10,sanchuang12 # 注:精确匹配
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# vim group_member.sh
#!/bin/bash
group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
echo $group_msg #注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
[root@sanchuang-linux ~]# sh group_member.sh sanchuang5
1200 sanchuang10,sanchuang12
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a='1200 sanchuang10,sanchuang12'
[root@sanchuang-linux ~]# s1=(a b c d e)
[root@sanchuang-linux ~]# s2=($a) # 注:转化为数组
[root@sanchuang-linux ~]# echo $s2
1200
[root@sanchuang-linux ~]# echo $s2[@]
1200[@]
[root@sanchuang-linux ~]# echo ${s2[@]} # 注:获取数组里全部元素
1200 sanchuang10,sanchuang12
[root@sanchuang-linux ~]# echo ${#s2[@]} # 注:获取数组长度
2
[root@sanchuang-linux ~]# echo ${#s2} # 注:获取第一个元素 字符的长度
4
[root@sanchuang-linux ~]# echo ${s2[0]} # 注:获取数组里第一个元素
1200
[root@sanchuang-linux ~]# echo ${s2[1]} # 注:获取数组里第二个元素
sanchuang10,sanchuang12
-----------------------------------------
group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
#注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
#注:获取数组里第一个元素
group_lst=($group_msg) #注:转变成数组
group_id=${group_lst[0]} # 注:gid
group_user_1=${group_lst[1]} # 注:该组(次要组)成员
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# vim group_member.sh
#!/bin/bash

group_name=$1 #注:组名作为参数
#/etc/group获取它的GID和成员列表
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
#注:-v选项 向awk传递shell变量 指定外部$group_name赋给awk内部变量 运行的时候用自定义的变量
#注:获取数组里第一个元素
group_lst=($group_msg) #注:转变成数组
group_id=${group_lst[0]}
group_user_1=${group_lst[1]}
#注:获取/etc/passwd 主要组 成员;tr "\n" "," 指定分隔符为,;过滤出 $4==group_id 的行
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd|tr "\n" ","`
echo $group_user_2$group_user_1 # 注:直接拼接 不需要加“+”号
[root@sanchuang-linux ~]# sh group_member.sh sanchuang5
sanchuang13,sanchuang10,sanchuang12
--------------------------------------------------------
[root@sanchuang-linux ~]# cat /etc/passwd
sanchuang13:x:1034:1200::/home/sanchuang13:/bin/bash # 注:gid 位置 $4
===========================================================================================================
总结:查看组中有哪些成员
#shell与awk参数传递:
https://blog.csdn.net/imzoer/article/details/8738581
[root@sanchuang-linux ~]# cat group_member2.sh
#!/bin/bash

group_name=$1
group_msg=`awk -F: -v group_awk=$group_name '$1==group_awk{print $3,$4}' /etc/group`
group_lst=($group_msg) # 注:awk -v 选项 定义参数,把变量传递给awk
group_id=${group_lst[0]} # 注:()括起来 把字符变成一个数组,默认以空格分割,获取1,2元素
group_user_1=${group_lst[1]}
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd| tr "\n" ","`
echo $group_user_2$group_user_1 # 注:把换行符换成逗号
[root@sanchuang-linux ~]# sh group_member2.sh sanchuang5
sanchuang13,sanchuang10,sanchuang12

--------------------------------------------------------------------------------------------
命令行
[root@sanchuang-linux ~]# less /etc/group
sanchuang5:x:1200:sanchuang10,sanchuang12
[root@sanchuang-linux ~]# awk -F: '$1=="sanchuang5"{print $3}' /etc/group
1200 # 注:加引号,表示一个字符串
[root@sanchuang-linux ~]# awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group
1200 sanchuang10,sanchuang12 # 注:组id 附属组的成员
[root@sanchuang-linux ~]# awk -F: '$4==1200{print $1}' /etc/passwd
sanchuang13 # 注:获取的是 为主要组时 成员的用户名(默认换行分割)
group_user_2=`awk -F: -v group_id=$group_id '$4==group_id{print $1}' /etc/passwd| tr "\n" ","`
#注:把换行符换成逗号
--------------------------------------------------------------------------------------------
字符串截取 # 注:不准确,gid可能5位
[root@sanchuang-linux ~]# result=`awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group`
[root@sanchuang-linux ~]# echo ${result:0:4}
1200
[root@sanchuang-linux ~]# echo ${result#* }
sanchuang10,sanchuang12
[root@sanchuang-linux ~]# echo ${result:5}
sanchuang10,sanchuang12
[root@sanchuang-linux ~]# echo ${result%% *}
1200
---------------------------
字符串截取:
#字符串操作
line=`head -n1 /etc/passwd`
echo "字符串为:$line"
echo '字符串为:$line'
echo "截取前4个字符:"
echo ${line:0:4}
echo "截取后9个字符:"
echo ${line:0-9}
echo "从倒数第九个字符开始截取4个字符"
echo ${line:0-9:4}
echo "从左向右截取最后一个:后的字符"
echo ${line##*:}
echo "从左向右截取第一个:后的字符"
echo ${line#*:}
echo "从右向左截取最后一个:后的字符"
echo ${line%%:*}
echo "从右向左截取第一个:后的字符"
echo ${line%:*}
echo "字符串长度"
echo ${#line}
--------------------------------------------------------------------------------------------
for循环获取
[root@sanchuang-linux lianxi]# vim user.sh
result=`awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group`
for i in $result
do
echo $i
done
[root@sanchuang-linux lianxi]# bash user.sh
1200
sanchuang10,sanchuang12
[root@sanchuang-linux ~]# result=`awk -F: '$1=="sanchuang5"{print $3,$4}' /etc/group`
------------------------------------------------------------
[root@sanchuang-linux ~]# for i in $result; do echo $i; done
1200
sanchuang10,sanchuang12

三. group操作

3.1 groupadd groupdel

groupadd命令

格式:groupadd [-g GID] 组帐号名

groupdel命令

格式:groupdel 组帐号名

1
2
3
4
5
6
7
示例:groupadd  groupdel
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# groupadd -g 5000 sanle # 注:创建gid为5000的sanle组
[root@sanchuang-linux ~]# less /etc/group #↑注:添加组账号sanle
sanle:x:5000:
[root@sanchuang-linux ~]# groupdel sanle # 注:删除组账号sanle
[root@sanchuang-linux ~]# less /etc/group # 注:没有了

3.2 groupmod newgrp

groupmod命令

  • 用途:设置组名和组id

  • 格式:groupmod [选项]... 组帐号名

常用命令选项

  • -n:修改组名

  • -g:修改组id

newgrp改变有效组

  • 用户必须是要改变组的成员

有效组:(用的很少)
新建文件或者文件夹的时候,使用的gid
gid使用哪个组,哪个就是有效组

当前用户新建文件或者文件夹的时候,默认使用的gid对应的组 就是有效组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
示例:newgrp改变有效组
--------------------------------------------------------------------------------------------
[root@sanchuang-linux lianxi]# ll # 注:ll查看目录详细信息
-rw-r--r--. 1 root root 86 9月 25 14:23 abcd.txt
-rw-r--r--. 1 root root 158 9月 25 09:47 backup_log.sh
#注:第一个root是文件的 属主
#注:第二个root是文件的 属组
---------------------------------------------------
[root@sanchuang-linux lianxi]# newgrp sanchuang4
[root@sanchuang-linux lianxi]# touch aa
[root@sanchuang-linux lianxi]# ll
-rw-r--r-- 1 root sanchuang4 0 11月 6 11:25 bb # 注:属组发生改变
---------------------------------------------------
[root@sanchuang-linux lianxi]# su - sanchuang10
[root@sanchuang-linux lianxi]# touch cc
[sanchuang10@sanchuang-linux ~]$ ll
总用量 0
-rw-r--r-- 1 sanchuang10 sanchuang4 0 11月 6 11:27 cc
[sanchuang10@sanchuang-linux ~]$ newgrp sanchuang # 注:普通用户想切换有效组,有效组里面必须有这个普通用户
密码:
newgrp: failed to crypt password with previous salt: 无效的参数
#注:普通用户想切换有效组,有效组里面必须有这个普通用户

3.3 Linux组帐号

Linux组帐号

  • 主要组(私有组)

与用户相关的默认组,在/etc/passwd文件的第四个字段定义

  • 次要组(附属组)

用户可以同时属于其他的组,在/etc/group文件的第四个字段定义

用户的主要组的名称和GID相关


四. gpasswd命令

gpasswd命令

  • 用途:设置组帐号密码(极少用)、添加/删除组成员

  • 格式:gpasswd [选项]... 组帐号名

1
2
3
4
5
6
7
8
9
10
11
12
示例:删除组成员root
--------------------------------------------------------------------------------------------
[root@localhost ~]# gpasswd -d root market
正在将用户“root”从“market”组中删除

示例:设置组账号密码
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# gpasswd sanchuang
正在修改 sanchuang 组的密码
新密码:
请重新输入新密码:
[root@sanchuang-linux ~]#

五. linux加密

Linux加密

默认采用sha512算法

采用哈希算法–》散列值求取

​ 把任意长度的输入,映射成固定长度的输出,该输出就是散列值

​ 是一种单向加密技术

hash算法:md5 sha1 sha2 sha256 sha512

如何判定密码正确?

# 注:把输入的密码用同样的方式进行加密,再判定输入的密文和文件里的密文是否一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
示例:md5sum
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# echo "123456"|md5sum # 注:md5sum也是一种哈希算法
f447b20a7fcbf53a5d5be013ea0b15af - # 注:无论给的是 都会返回特点长度的输出
[root@sanchuang-linux ~]# echo "123456xyzzzzz"|md5sum # 注:单向加密的算法
bcdd6694d1ece311bd7bd668da54b9b9 -
[root@sanchuang-linux ~]# echo "xxxxxxxxxxxxxxxxxxxxxxxx"|md5sum
7373d8394616d74ba2c42402266ae3aa -

[root@sanchuang-linux tmp]# md5sum douban # 注:对文件进行加密
816ba8dd29e68f3450d8748096227d42 douban # 注:对任意文件的输入,都会有对应长度的输出
[root@sanchuang-linux tmp]# md5sum sucai8
9a44802fc09e1b84dc94740c40aa6450 sucai8

示例:撞库 加盐
--------------------------------------------------------------------------------------------
#注:撞库
[root@sanchuang-linux ~]# echo "123456"|md5sum # 注:加密字符串相同,输出的散列值相同
f447b20a7fcbf53a5d5be013ea0b15af -
[root@sanchuang-linux ~]# echo "123456"|md5sum
f447b20a7fcbf53a5d5be013ea0b15af -
#注:加盐 # 注:提高密码安全性
[root@sanchuang-linux ~]# echo "123456xndfoaei242"|md5sum # 注:xndfoaei242 盐值
15465f7aa2929cca95ed7efb97ffeba0 -

示例
--------------------------------------------------------------------------------------------
root:$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0::0:99999:7:::

密码字段:$加密算法id$盐值$真正的密文
加密底层使用内核的crypt函数实现

python实现(sha512)
>>> import crypt
>>> crypt.crypt('123456','$6$i4J5vzOUIMpchLRj') # 注:$加密算法id$盐值,密文和上面相同
'$6$i4J5vzOUIMpchLRj$nTCbYWgA5cpv34Set6R2ZmC1AYYHGHnQafNbA9fkFsTR0E9GG1BJP5o3OTMuC4kGUqsomCI/G8FdEVELI/aeq0' # 注:与上面的密文一样
-----------------------------------------
$6 代表sha512算法
$i4J5vzOUIMpchLRj 盐值
$nTCbYWgA5cpv……aeq0 真正的密文

哈希算法用途:用来判定文件md5值是否改变

六. /etc/login.defs文件

/etc/login.defs文件

  • 对账户初始的属性设置

  • 设置普通用户的UID和GID范围等

1
2
3
4
5
6
7
8
示例
[root@sanchuang-linux ~]# vim /etc/login.defs
MAIL_DIR /var/spool/mail # 注:设置默认地址
PASS_MAX_DAYS 99999 # 注:密码的过期天数
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000

七. useradd命令在后台到底做了哪些工作?

useradd命令在后台到底做了哪些工作?


八. /etc/skel/*文件

*/etc/skel/文件

  • 新建用户帐号时,复制到用户宿主目录中

主要控制用户初始配置文件

  • bash_profile: 用户每次登录时执行

  • bashrc: 每次进入新的Bash环境时执行

  • bash_logout: 用户每次退出登录时执行

  • bash_history : 记录存放上次注销前使用的历史命令

登陆的时候:
.bash_profile
~/.bash_profile --> ~/.bashrc --> /etc/bashrc

进入新bash环境
~/.bashrc --> /etc/bashrc

--------------------------------------------------------------------------------------------

#注:登录的时候都会执行 .bash_profile

#注:登录的时候都会执行 .bashrc # 注:.bash_profile里面调用了.bashrc

#注:登录的时候 先执行.bash_profile,.bash_profile里面调用了.bashrc

#注:进入了一个新的bash环境,执行.bashrc

#注:到新bash环境下,执行了.bashrc,不执行.bash_profile。登录时执行.bash_profile

用户环境设置

#注:/etc/bashrc 系统用户的环境设置,别名设置,其他的函数

/etc/bashrc 相当于全局配置,此文件只能root用户修改 # 注:/etc/bashrc 只有root用户才能修改

~/.bashrc 个人配置,个性化配置,自己家目录下有权限修改 # 注:家目录下的.bashrc文件

/etc/profile 系统全局用户环境配置

~/.bash_profile 个人配置

原因:

全局配置,影响所有用户。

家目录下配置,影响当前用户。

/etc/目录下的环境配置修改,属于全局配置,家目录下属于个人用户配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
示例:家目录下配置
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# less .bash_profile
# .bash_profile
if [ -f /etc/bashrc ]; then # 注:判断有没有 /etc/bashrc,有就在当前执行/etc/bashrc
. /etc/bashrc # 注:/etc/bashrc 执行初始化的用户环境设置
fi # 注:用. 去执行,. 代表当前bash
PATH=$PATH:$HOME/bin

export PATH

[root@localhost ~]# less .bashrc
# .bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
if [ -f /etc/bashrc ]; then
. /etc/bashrc # 注:最终执行的是这个文件
fi
[root@sanchuang-linux ~]# which ls # 注:ls执行的是/usr/bin/ls,通过PATH环境变量从前往后找
alias ls='ls --color=auto'
/usr/bin/ls

============================================================================================
示例:/etc/skel/*文件
#注:新建用户帐号时,复制到用户宿主目录中
[root@sanchuang-linux ~]# cd /etc/skel/
[root@sanchuang-linux skel]# ls -al
总用量 24
drwxr-xr-x. 2 root root 62 9月 16 13:23 .
drwxr-xr-x. 90 root root 8192 11月 6 15:15 ..
-rw-r--r--. 1 root root 18 11月 9 2019 .bash_logout
-rw-r--r--. 1 root root 141 11月 9 2019 .bash_profile
-rw-r--r--. 1 root root 312 11月 9 2019 .bashrc

============================================================================================
示例:.bash_history 记录存放上次注销前使用的历史命令
.bash_history 存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件
第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里

[root@sanchuang-linux ~]# history #注:history只是查看当前用户的命令历史

#注:用户退出时,命令历史才会写入.bash_history
#注:新建用户时,不会生成.bash_history文件,只有退出后 再次登录 才会生成.bash_history文件
#注:不是所有的命令都写入history,不是很准确

[root@sanchuang-linux ~]# cat .bash_history # 注:在当前用户的家目录下查看.bash_history文件

九. 每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log

每次登录或退出sanchuang的时候,打印日志到/tmp/sanchuang_log

1
2
3
4
5
6
7
8
9
步骤
1.在sanchuang用户下,修改.bash_profile文件,添加 # 注:因为每次登陆都会先执行这个文件
now_date=`date`
echo $now_date"login..." >> /tmp/sanchuang_log
2.在sanchuang用户下,修改.bash_logout文件,添加 # 注:因为每次退出时都会执行这个文件
now_date=`date`
echo $now_date"logout..." >> /tmp/sanchuang_log
3.监控文件变化,新增末尾行 # 注:经常用 tail -f 监控文件
$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化(新增的末尾行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
示例
--------------------------------------------------------------------------------------------
[root@sanchuang-linux log]# su - sanchuang # 注:普通用户 在自己的家目录下操作
上一次登录:五 11月 6 14:59:23 CST 2020pts/1 上
[sanchuang@sanchuang-linux ~]$ vim ~/.bash_profile # 注:家目录下的.bash_profile操作
now_date=`date`
echo $now_date"login..." >> /tmp/sanchuang_log
[sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化
2020年 11月 06日 星期五 15:05:26 CSTlogin...
[sanchuang@sanchuang-linux ~]$ vim ~/.bash_logout
now_date=`date`
echo $now_date"logout..." >> /tmp/sanchuang_log
[sanchuang@sanchuang-linux ~]$ tail -f /tmp/sanchuang_log # 注:tail -f监控文件末尾的变化
2020年 11月 06日 星期五 15:05:26 CSTlogin...
2020年 11月 06日 星期五 15:07:33 CSTlogout...

十. Shell启动配置文件的区别

Shell启动配置文件的区别

  • /etc/profile: 配置全局环境变量,影响所有用户

  • ~/.bash_profile : 配置个人环境,影响一个用户

  • /etc/bashrc : 配置全局的别名或者shell选项,影响所有用户

  • **~/.bashrc **: 配置个人别名或者shell选项,影响一个用户


十一. .bash_history

.bash_history

存放当前用户的命令历史,第一次登录用户,操作命令的时候,不会生成此文件

第一次登陆退出后会自动将内存里的历史记录写到.bash_history文件里


十二. bash的启动脚本初始化

bash的启动脚本初始化


十三. 用户和组账户查询

用户和组账户查询

id命令

  • 用途:查询用户身份标识

  • 格式:id [用户名]

who、w、users命令

  • 用途:查询已登录到主机的用户信息

groups命令

  • 用途:查询用户所属的组 # 注:返回用户所属的 基本组和附加组

last、lastlog命令使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
示例:w  who
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# w # 注:看的是你以哪个用户登录进来,而不是当前你切换到的用户
15:26:24 up 6:11, 6 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 四15 58:07 0.07s 0.07s -bash # 注:tty真实终端
root pts/0 192.168.0.42 14:28 0.00s 0.18s 0.01s w # 注:远程登录pts虚拟终端
root pts/1 192.168.0.42 14:28 12:24 0.07s 0.01s -bash
#注:真实终端FORM为空
#注:虚拟终端显示的是物理机的ip地址
#注:WHAT当前环境做的事情
#注:15:26:24 当前时间
#注:6:11 开机总时间
#注:6 users 登录用户数量
#注:load average cpu平均负载,数值越大,机器越繁忙
--------------------------------------------------------------
[root@sanchuang-linux ~]# who # 注:看的没有w详细
root tty1 2020-11-05 15:13
root pts/0 2020-11-06 14:28 (192.168.0.42)
root pts/1 2020-11-06 14:28 (192.168.0.42)
------------------------------------------------------------------
[root@sanchuang-linux ~]# users # 注:查看当前有哪些用户登录
root root root root root root
---------------------------------------------------------------------------------
[root@sanchuang-linux ~]# groups sanchuang10 # 注:显示用户所属的基本组和附加组
sanchuang10 : sanchuang4 sanchuang5
[root@sanchuang-linux ~]# id sanchuang10
uid=1032(sanchuang10) gid=1100(sanchuang4) 组=1100(sanchuang4),1200(sanchuang5)
--------------------------------------------------------------------------------
[root@sanchuang-linux ~]# last # 注:查看之前有哪些用户登录过
root tty1 Wed Sep 16 13:41 - 13:41 (00:00)
root pts/0 192.168.136.1 Wed Sep 16 13:29 - 13:40 (00:11)
reboot system boot 4.18.0-193.el8.x Wed Sep 16 13:26 - 13:42 (00:15)
[root@sanchuang-linux ~]# lastlog # 注:查看每一个用户的最近登录状态
用户名 端口 来自 最后登陆时间
root pts/0 五 11月 6 15:18:46 +0800 2020
bin **从未登录过**
shutdown **从未登录过**

十四. 终端设备名称

终端设备名称

​ 名称 设备

ttyn 虚拟控制台

pts/n 伪终端

:0 X服务器