一,字符处理命令
1, sort 排序
[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
[root@localhost ~]# sort passwd (默认以第一列字母进行排序)
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
-t 指定分隔符
-k 指定第几列进行排序
# 以:为分隔符的第五列进行拍序,默认字母进行排序
[root@localhost ~]# sort -t ":" -k 5 passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
zou:x:1000:1000::/home/zou:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
-n 以数值大小排序
# 以:为分隔符的第三列进行数字排序
[root@localhost ~]# sort -t ":" -nk3 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 注意nk的顺序不能是kn
[root@localhost ~]# sort -t ":" -kn3 passwd sort: invalid number at field start: invalid count at start of ‘n3’
-r 倒叙排序
# 以:为分隔符的第三列进行数字倒序(默认从小到大,倒序就是从大到小)
[root@localhost ~]# sort -t ":" -nrk3 passwd
zou:x:1000:1000::/home/zou:/bin/bash
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bas
2, uniq 去重
相邻的去重
-c 统计
[root@localhost ~]# cat file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
.
# 只把相邻的去重了,f 10 一样的两行没有去重
[root@localhost ~]# uniq file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
#进行排序再去重,文件中便没有重复的了
[root@localhost ~]# sort file1|uniq
A 3
b 6
d 10
d 6
f 1
f 10
h 0
z 8
# 取出重复的数量,如下代表A 3 出现一次,b 6出现一次, d 10 出现一次, d 6出现两次等
[root@localhost ~]# sort file1|uniq -c
1 A 3
1 b 6
1 d 10
2 d 6
1 f 1
2 f 10
1 h 0
1 z 8
#对统计去重的数进行排序,这样会更一目了然,第一列代表统计数,第二三列是文件字符内容
[root@localhost ~]# sort file1|uniq -c|sort
1 A 3
1 b 6
1 d 10
1 f 1
1 h 0
1 z 8
2 d 6
2 f 10
3, cut 截取字段 取列 默认分隔符为tab键
-d 符号分隔符
-f 取列
[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 以:为分隔符,取出第一列字符
[root@localhost ~]# cut -d ":" -f1 passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
zou
[root@localhost ~]# cat file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
# 以空格为分隔符取出第二列
[root@localhost ~]# cut -d " " -f 2 file1
3
6
10
0
8
10
6
1
6
-c 取出数字段字符
[root@localhost ~]# echo $RANDOM|md5sum
ac2e084d679d6de0a60f75fca6e63589 -
# 取出第1-5个字符
[root@localhost ~]# echo $RANDOM|md5sum|cut -c 1-5
2f092
4, tr 替换 单对单一个字符一个字符的替换
[root@localhost ~]# cat file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
# 把文件中的A替换为a,注意要 配合 < 使用
[root@localhost ~]# tr 'A' 'a'
a 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
-d 删除
[root@localhost ~]# tr -d '10'
A 3
b 6
f
h
z 8
d
d 6
f
d 6
f
# tr只能临时替换文件,以上设置完再次查看文件没有变化
[root@localhost ~]# cat file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
#
#tr临时改变文件保存到新文件
[root@babysnow ~]# cat file3123/abc/456766666jskdskhdbbbbbb
[root@babysnow ~]# cat file3|tr '123' '333'>file5
5, wc 统计
直接使用统计行数、列数、字符
[root@localhost ~]# wc file1
10 20 43 file1
-l 统计行数
-w 统计列数
-c 统计字符
[root@localhost ~]# wc -l file1
10 file1
[root@localhost ~]# wc -w file1
20 file1
[root@localhost ~]# wc -c file1
43 file1
二 , 三剑客命令
1, grep
过滤 给过滤出来的内容加颜色 按照行进行处理
不加选项
[root@localhost ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-n 给过滤出来的内容加上所在文件的行号
[root@localhost ~]# grep -n 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
-v 排除,取反
[root@localhost ~]# grep -v 'root' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
-i 忽略大小写
[root@localhost ~]# grep -i 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -i 'a' file1
A 3
-c 统计过滤出来的内容的行号
[root@localhost ~]# grep -c 'root' passwd
2
-w 精确查找
# 过滤出的内容也有sbin
[root@localhost ~]# grep 'bin' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 只想过滤出bin,加个选项-w
[root@localhost ~]# grep -w 'bin' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
zou:x:1000:1000::/home/zou:/bin/bash
-r 递归过滤 针对整个目录操作
# 过滤出当前目录下的18
[root@localhost ~]# grep -r '81' ./
./passwd:dbus:x:81:81:System message bus:/:/sbin/nologin
-A 过滤的内容向下多少行
[root@localhost ~]# grep -A3 'A' file1
A 3
b 6
f 10
h 0
-B 过滤的内容向上多少行
[root@localhost ~]# grep -B2 'z' file1
f 10
h 0
z 8
-C 过滤的内容向上下多少行
[root@localhost ~]# grep -C2 'h' file1
b 6
f 10
h 0
z 8
-E 相当于 egrep 支持扩展正则
| 或者 扩展正则
[root@localhost ~]# grep -E 'root|sbin' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
^ 以..为开头
[root@localhost ~]# grep '^adm' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
$ 以...为结尾
[root@localhost ~]# grep 'shutdown$' passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
^$ 空行
2, sed 替换 流编辑器
-n 取消默认输出
p 打印 (内部命令)
[root@localhost ~]# sed '2p' file1
A 3
b 6
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
[root@localhost ~]# sed -n '2p' file1
b 6
[root@localhost ~]# sed -n '/b/p' file1
b 6
-i 真正修改文件内容
a 在某行后面加入 (内部命令)
i 在某行前面加入 (内部命令)
[root@localhost ~]# cat file1
A 3
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
[root@localhost ~]# sed -i '1a2 2' file1
A 3
2 2
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
[root@localhost ~]# sed -i '3i5 5' file1
A 3
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
-r 支持扩展正则
s 替换
g 全局
# 这里不加i只能暂时保存
[root@localhost ~]# cat file1
A 3
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
# 源文件下操作
[root@localhost ~]# sed -r 's#A 3#22#g' file1
22
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
# 源文件下操作
[root@localhost ~]# sed -r '4s#f#9#g' file1
A 3
b 6
5 5
9 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
-d 删除
[root@localhost ~]# cat file1
A 3
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
[root@localhost ~]# sed '/A 3/d' file1
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
[root@localhost ~]# cat file1
A 3
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
[root@localhost ~]# sed '1,3d' file1
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
[root@localhost ~]# sed '1d;3d' file1
b 6
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
[root@localhost ~]# sed '/10/d' file1
A 3
b 6
5 5
h 0
z 8
d 6
f 1
d 6
^$
3 5
# 取值
[root@localhost ~]# ifconfig
eth0: flags=4163
mtu 1500 inet 10.0.0.160 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3064:d4a:f62e:5181 prefixlen 64 scopeid 0x20
ether 00:0c:29:f4:c1:98 txqueuelen 1000 (Ethernet)
RX packets 92209 bytes 51214077 (48.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41932 bytes 12326312 (11.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73
mtu 65536 inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 16 bytes 1328 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1328 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig|sed -n '2p '
inet 10.0.0.160 netmask 255.255.255.0 broadcast 10.0.0.255
[root@localhost ~]# ifconfig|sed -n '2p '|sed -r 's#(^.*et)(.*)(net.*)#\2#g'
10.0.0.160
# 调换位置
[root@localhost ~]# ifconfig
eth0: flags=4163
mtu 1500 inet 10.0.0.160 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3064:d4a:f62e:5181 prefixlen 64 scopeid 0x20
ether 00:0c:29:f4:c1:98 txqueuelen 1000 (Ethernet)
RX packets 92209 bytes 51214077 (48.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41932 bytes 12326312 (11.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73
mtu 65536 inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 16 bytes 1328 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1328 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ifconfig|sed -n '2p '
inet 10.0.0.160 netmask 255.255.255.0 broadcast 10.0.0.255
# 只能行替换
[root@localhost ~]# ifconfig|sed -n '2p '|sed -r 's#(^.*et)(.*)(net.*)#\2\1\3#g'10.0.0.160 inetnetmask 255.255.255.0 broadcast 10.0.0.255
3, awk
[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 过滤出第1行,第三行
[root@localhost ~]# awk 'NR==1;NR==3' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 过滤出第1到3行
[root@localhost ~]# awk 'NR==1,NR==3' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 过滤出大于等于15行的内容
[root@localhost ~]# awk 'NR>=15' passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 过滤出大于15行且小于20行的内容
[root@localhost ~]# awk 'NR>15&&NR<20' passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 过滤出大于18行或者小于2行的内容
[root@localhost ~]# awk 'NR>18||NR<2' passwd
root:x:0:0:root:/root:/bin/bash
zou:x:1000:1000::/home/zou:/bin/bash
# 查找文件有root的内容行
[root@localhost ~]# awk ‘/root/’ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# 查找文件中有root或bash的行
[root@localhost ~]# awk '/root|bash/' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 取反,查找文件中没有sbin的行
[root@localhost ~]# awk '!/sbin/' passwd
root:x:0:0:root:/root:/bin/bash
zou:x:1000:1000::/home/zou:/bin/bash
# 查找文件中除了第一行外的内容
[root@localhost ~]# awk 'NR!=1' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
-F 指定分隔符 默认空格键
# 取出以:为分隔符的第一列
[root@localhost ~]# awk -F: '{print $1}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
zou
[root@localhost ~]# cat file1
A 3
b 6
5 5
f 10
h 0
z 8
d 10
d 6
f 1
d 6
f 10
^$
3 5
a 2
# 取出文件的第一列
[root@localhost ~]# awk '{print $1}' file1
A
b
5
f
h
z
d
d
f
d
f
^$
3
a
# 取出文件中的第二列
[root@localhost ~]# awk '{print $2}' file1
3
6
5
10
0
8
10
6
1
6
10
5
2
# 取出最后一列 NF即最后一列
[root@localhost ~]# awk '{print $NF}' file1
3
6
5
10
0
8
10
6
1
6
10
^$
5
2
[root@localhost ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
zou:x:1000:1000::/home/zou:/bin/bash
# 截取前四个字符中,以:为分隔符。顺序以2,1,3,4列排列
[root@localhost ~]# cut -d ':' -f 1-4 passwd |awk -F: -vOFS=':' '{print $2,$1,$3,$4}'
x:root:0:0
x:bin:1:1
x:daemon:2:2
x:adm:3:4
x:lp:4:7
x:sync:5:0
x:shutdown:6:0
x:halt:7:0
x:mail:8:12
x:operator:11:0
x:games:12:100
x:ftp:14:50
x:nobody:99:99
x:systemd-network:192:192
x:dbus:81:81
x:polkitd:999:998
x:sshd:74:74
x:postfix:89:89
x:zou:1000:1000
4, column 排序 把文件内容排序更格式一些
-t 以tab键的格式将文件内容排序的更好看一些
三, 文件的类型和属性
[root@babysnow ~]# ls -li
33649897 -rw-r--r--. 1 root root 10 7月 19 11:51 a.txt
33649895 -rw-r--r--. 1 root root 26 7月 19 11:26 file0
33616950 -rw-r--r--. 1 root root 6 7月 19 10:39 file1
第一列:33649897 inode号 索引节点
第二列:-rw-r--r-- 权限
第三列: 1 文件硬链接的数量
第四列:root 属主 文件属于谁
第五列:root 属组 文件属于哪个组
第六列:10 文件的大小 以字节的形式显示
第七列:7月 19 11:51 文件的创建或者最后的修改时间
第八列:a.txt 文件名,不属于属性信息
文件的类型
第二列:-rw-r--r--
- 普通文件
d 目录
l 软链接,也叫符号链接
s 套接字文件 socket
p 管道文件
b 块设备 硬盘 分区 镜像
c 字符设备 终端设备 zero random null
[root@babysnow ~]# file a.txt
a.txt: ASCII text
[root@babysnow ~]# file /etc
/etc: directory
[root@babysnow ~]# file /dev/zero
/dev/zero: character special
[root@babysnow ~]# file /dev/sda
/dev/sda: block special
[root@babysnow ~]# stat /dev
文件:"/dev"
大小:3220 块:0 IO 块:4096 目录
设备:5h/5d Inode:3 硬链接:20
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:device_t:s0
最近访问:2020-07-18 17:59:18.333898575 +0800
最近更改:2020-07-18 00:57:38.594035382 +0800
最近改动:2020-07-18 00:57:38.594035382 +0800
创建时间:-
[root@babysnow ~]# stat a.txt
文件:"a.txt"
大小:10 块:8 IO 块:4096 普通文件
设备:803h/2051d Inode:33649897 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-19 11:51:47.378854451 +0800
最近更改:2020-07-19 11:51:38.405854178 +0800
最近改动:2020-07-19 11:51:38.405854178 +0800
创建时间:-
查看目录的数据大小
[root@babysnow ~]# du -sh /etc
31M /etc
4, 链接文件
文件被分为:
用户数据 userdata 数据块 存放在磁盘中的真实数据block
元数据 metadata 文件的属性文件大小 inode时间类型权限文件名不属于属性信息
分为两种链接文件软链接或符号链接硬链接
1.软链接:软链接相当于Windows上面的快捷方式,里面存放的是文件的真实路径及可以执行文件
版本发布与回滚 秒级回滚
目录不方便移动
软件版本升级及回退
ln -s 源文件链接文件
[root@babysnow ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 /root/sysconfig
[root@babysnow ~]# ll
总用量 1348
-rw-r--r--. 1 root root 10 7月 19 11:51 a.txt
-rw-r--r--. 1 root root 26 7月 19 11:26 file0
-rw-r--r--. 1 root root 6 7月 19 10:39 file1
-rw-r--r--. 2 root root 26 7月 19 10:40 file2
-rw-r--r--. 2 root root 26 7月 19 10:40 file3
-rw-r--r--. 1 root root 670293 7月 19 10:51 file6
lrwxrwxrwx. 1 root root 5 7月 19 10:35 file.copy -> file1
-rw-r--r--. 1 root root 14326 7月 18 20:41 index.html
-rw-r--r--. 1 root root 670293 7月 19 04:39 services
lrwxrwxrwx. 1 root root 42 7月 19 16:05 sysconfig -> /etc/sysconfig/network-scripts/ifcfg-ens33
&& 前面的命令执行成功,才会执行后面的命令
|| 前面的命令执行失败,才会执行后面的命令
##
特点:
1, 就是一个快捷方式,里面的存放的是源文件的路径及可以 执行源文件
2, 跟源文件不是同一类型的文件,inode号是不一样
3, 软链接可以跨文件系统创建 ln -s创建
4, 删除源文件,软链接存在,但是已经失效 红底白字闪烁状
5, 删除软链接文件,对源文件没有任何影响
硬链接:
多个不同文件名的文件的inode号是相同的,指向同一个block,
防止文件被误删除,针对文件进行操作
[root@babysnow ~]# ll
总用量 1348
-rw-r--r--. 1 root root 10 7月 19 11:51 a.txt
-rw-r--r--. 1 root root 26 7月 19 11:26 file0
-rw-r--r--. 1 root root 6 7月 19 10:39 file1
[root@babysnow ~]# ln a.txt a.hard
[root@babysnow ~]# ll
总用量 1352
-rw-r--r--. 2 root root 10 7月 19 11:51 a.hard
-rw-r--r--. 2 root root 10 7月 19 11:51 a.txt
-rw-r--r--. 1 root root 26 7月 19 11:26 file0
#
他们有共同的inode号,如果添加文件到a.txt
同样,a.hard也会出现添加的文件
[root@babysnow ~]# cat a.txt
156a9b446
[root@babysnow ~]# echo 'bbbb'>>a.hard
[root@babysnow ~]# cat a.txt
156a9b446
bbbb#
总结:
1,多个入口 inode号相同
2,只能对文件操作,不能对目录创建
3,删除源文件,对硬链接文件没有影响
4, 删除硬链接文件,对源文件也是没有影响
5,只有删除了源文件和硬链接文件,文件才会被真正的删除 硬链接数为零
5, 文件编辑器
vi / vim
修改配置
写脚本
vim,可以高亮显示,支持试图模式
vi 粘贴内容时,格式不会乱,vim格式会乱
三种工作模式:
命令模式: 控制光标的跳动 内容的复制 粘贴 剪切 删除 撤销等
编辑模式: 修改文件内容
底行模式:保存文件 导入导出 批量替换 光标跳动 删除 搜索
命令模式:
G 光标跳动到最后一行
gg 光标跳动到第一行
10gg / 10G 光标跳动到第十行
$ 光标跳转到当前行最后一个字符
^ 光标跳转到当前行第一个字符
ctrl+f 向下翻页
ctrl+b 向上翻页
yy 复制
nyy 复制多行 包括当前行
p 粘贴
np 粘贴多次 n是数字
d 删除
ndd 删除多行
dG 删除当前行及向下所有行
u 撤销
ctrl +r 回滚 回滚你的撤销
r 在当前光标所在字符进行替换
R 连续替换
x 从前往后删除字符
X 从后往前删除字符
D 删除当前行
~ 把当前字符进行大小写替换
ZZ 保存退出
编辑模式:
a 在当前字符后开始编辑
i 在当前字符后开始编辑
o 在当前光标后插入一行
O 在当前光标前插入一行
A 在当前光标所在行后开始编辑
I 在当前光标所在行开头开始编辑
s 删除光标当前字符开始编辑
S / C / cc 删除光标当前行开始编辑
底行模式:
:n
:nd
:n,md
:w
:wq
:q
:q!
:wq!
:x 保存退出
:w new.txt 文件内容另存为
:$r /etc/hosts 把/etc/hosts文件内容导入到此文件的结尾
:0r /etc/hosts 把/etc/hosts文件内容导入到此文件的开头,数字0
:%s#root#ttt#g 把文件中所有root替换为ttt
: 3s#root#ttt#g 把第三行的root 替换为ttt
:1,5s#root#ttt#g 把1-5行的root 替换为ttt
/root 搜索root字符串
n 向下
N 向上
:/root\c 忽略大小写 , 或者set ic
:set nu 显示行号
:set list 在每一行后面加上制表符
:noh 取消高亮显示
:set nonu
:set nolist
6, vim的高级操作
1,视图模式 批量操作
# 批量添加
先把光标移动到要操作的行的字符位置
ctrl键+ v进入可视块模式
选中你要操作的行
按shift+ i进入编辑模式输入要添加的内容
按Esc结束
# 批量删除
先把光标移动到要操作的行的字符位置
ctrl键+ v进入可视块模式
选中你要删除的内容
按d删除
#
可视行
先把光标移动到要操作的行
shift+ v进入可视行模式选中要删除的行
按d删除
#
先把光标移动到要操作的行
shift+ v进入可视行模式选中要复制的行
按y复制
按p粘贴
#vim故障解决[root@qls-0-160 ~]# vim -r passwd#先恢复
[root@babysnow ~]# rm -f .passwd.swp #在删除临时文件
vimdiff a.txt a.hard
=
vim -O a.txt a.hard
打开多个文件纵向对比
vim -o a.txt a.hard
横向对比
ctrl ww 切换分屏
[root@babysnow ~]# vim +10 services
打开文件的时候,自动快速到达第十行
7, 用户管理
跟用户相关的文件
[root@babysnow ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1008 7月 19 15:07 /etc/passwd
[root@babysnow ~]# ll /etc/shadow
----------. 1 root root 989 7月 19 15:07 /etc/shadow
[root@babysnow ~]# tail -3 /etc/passwd
roo:x:1005:1005::/home/egon:/bin/bash
dev02:x:1006:1006::/home/dev02:/bin/bash
dev03:x:1007:1007::/home/dev03:/bin/bash
#以冒号为分隔符分为7列
第一列:roo#用户的名称
第二列:x#密码的占位符
第三列:1005#用户的UID
第四列:1005#用户的GID
第五列:#用户的注释信息
第六列:/home 用户的家目录
第七列:/bin/bash#用户的命令解释器
( 可以正常登陆系统的 /sbin/nologin禁止登陆系统)
[root@babysnow ~]# tail -3 /etc/shadow
roo:$6$vDsWRVe5$7cek5ilJbIh/DRDmkGeEnf4nLr0hRZat1Bhr7ndAOEa4/nCCMC8oXXQGgRVUGBgQPKa.lJFMDaBL73NeTnoNw/:18462:0:99999:7:::
dev02:!!:18462:0:99999:7:::
dev03:!!:18462:0:99999:7:::
#以冒号为分隔符分为9列
第一列:roo#用户的名称
第二列:用户的密码* !!#没有密码
第三列:密码的设置时间#最近的一次修改密码,距离1970年1月1号过了多少天
第四列:0#密码的最小有效期
第五列:99999#密码的最大有效期没有限制
第六列:7#密码到期前的告警时间
第七列:#密码的到期后的宽恕时间
第八列:#密码账号失效时间20201231
第九列:#没有使用
0 # root用户超级管理员用户
1-200 #系统用户系统默认创建好的不同的程序或者进程运行用户
201-999 #系统用户我们自定义按照软件的时候,软件自带的用户程序或者进程运行用户
1000+ #普通用户
[root@babysnow ~]# yum install -y epel-release
[root@babysnow ~]# yum install -y nginx
8, 用户管理的相关命令
1, useradd ==== adduser
选项:
-u 指定uid
-g 指定gid
-G 指定附加组
-c 注释信息
-r 创建系统用户,默认不创建家目录
-M 不创建家目录
-s 指定命令解释器
-d 指定家目录
[root@babysnow ~]# useradd snow01
[root@babysnow ~]# tail -1 /etc/passwd
snow01:x:1008:1008::/home/snow01:/bin/bash
[root@babysnow ~]# tail -1 /etc/shadow
snow01:!!:18462:0:99999:7:::
[root@babysnow ~]# echo '1'|passwd --stdin snow01
更改用户 snow01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
==
[root@babysnow ~]# passwd snow01
[root@babysnow ~]# useradd -u 2001 -c 测试用户 -M -s /sbin/nologin snow01
[root@babysnow ~]# tail -1 /etc/passwd
snow01:x:2001:2001:测试用户:/home/snow01:/sbin/nologin
2, usermod 修改用户信息
选项:
-u #修改uid
-g #修改gid
-a #添加附加组跟-G配合
-G #修改附加组-aG
-c #修改注释
-s #修改命令解释器
-l# 修改名称
-m # 迁移家目录
-d #修改家目录 -md-
-L #锁定用户
-U #解锁用户
[root@babysnow ~]# usermod -md /home/snow01 -s /bin/bash snow01
[root@babysnow ~]# tail -1 /etc/passwd
snow01:x:2001:2001:测试用户:/home/snow01:/bin/bash
3, userdel 删除用户
-------默认不删除家目录及邮件信息
-r 删除用户的时候,删除家目录和邮件信息
[root@localhost ~]# tail -2 /etc/passwd
user03:x:1002:6666::/etc/user03:/sbin/bash
zz:x:1003:1003::/home/zz:/bin/bash
[root@localhost ~]# id user03
uid=1002(user03) gid=6666(z) groups=6666(z)
# 可以看到user03在etc目录下
[root@localhost ~]# finger user03
Login: user03 Name:
Directory: /etc/user03 Shell: /sbin/bash
Last login Wed Jul 29 15:07 (CST) on pts/0
No mail.
No Plan.
删除不带选项 -r
[root@localhost ~]# userdel user03
# 过滤出user03的信息依然存在
[root@localhost ~]# grep -r 'user03' /etc/
/etc/passwd-:user03:x:1002:6666::/etc/user03:/sbin/bash
/etc/shadow-:user03:$6$25cIaFPv$ZIckXezF0eavvB1KMYPYwY5OQc5VokOxv9jefI7PWEpltmdGuAdI3Ffrg/8P9nWImUuNRhbAa6kCPYXj883IV.:18472:0:99999:7:::
/etc/subuid-:user03:231072:65536
/etc/subgid-:user03:231072:65536
# 加上选项-r 删除zz的相关信息
[root@localhost ~]# userdel -r zz
# 再过滤出zz用户的相关信息都没有了
[root@localhost ~]# tail -2 /etc/passwd
zou:x:1000:1000::/home/zou:/bin/bash
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
9 , 用户密码
root 用户可以给所有用户设置密码 密码长度没有限制
普通用户只能给自己设置密码 最少8位无规则的密码
[root@localhost ~]# useradd zi
[root@localhost ~]# passwd zi
Changing password for user zi.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
设置随机密码
[root@localhost ~]# echo $RANDOM|md5sum
e0f4909058a070aaa7125a62184c60e6 -
# 随机密码里截取前9个字符
[root@localhost ~]# echo $RANDOM|md5sum|cut -c 1-9
292c35238
# tee 重定向的作用 把数据保存到文件的同时 输入到屏幕上
[root@localhost ~]# echo $RANDOM|md5sum|cut -c 1-9|tee z.txt|passwd --stdin zi
Changing password for user zi.
passwd: all authentication tokens updated successfully.
# 看一下当前文件是有z.txt文件的
[root@localhost ~]# ll
total 24
-rw-r--r--. 1 root root 12 Jul 29 15:29 10.txt
-rw-r--r--. 1 root root 9 Jul 29 15:25 aaa.txt
-rw-------. 1 root root 1448 Jul 16 15:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 58 Jul 30 14:43 file1
-rw-r--r--. 1 root root 0 Jul 27 12:49 file2
-rw-r--r--. 1 root root 835 Jul 30 14:44 passwd
drwxrwxrwx. 2 root root 6 Jul 24 10:55 www
-rw-r--r--. 1 root root 10 Jul 31 10:25 z.txt
[root@localhost ~]# cat z.txt
6d16caafb
[root@localhost ~]# yum install -y expect 配合交互式命令使用
[root@localhost ~]# mkpasswd
1xyXwtG2%
-l 指定多少位
-d 数字都多少个
-c 小写字母多少个
-C 大写字母多少个
-s 特使字符多少个
[root@localhost ~]# mkpasswd -l 16
pX1ekjfehzl8n?Vo
[root@localhost ~]# mkpasswd -l 16 -c 8 -C 8 -s 0 -d 0
xUfiBupgOGHuJVjM
[root@localhost ~]# mkpasswd -l 10 -c 2 -C 3 -s 4 -d 1
_;W&hY=T5s
10, 用户组相关
分类
基本组: 一个用户只能有一个基本组
附加组:一个用户允许有多个附加组
[root@localhost ~]# ll /etc/group
-rw-r--r--. 1 root root 535 Jul 31 10:23 /etc/group
[root@localhost ~]# ll /etc/gshadow
----------. 1 root root 418 Jul 31 10:23 /etc/gshadow
[root@localhost ~]# tail -3 /etc/group
z:x:6666:
user03:x:1001:
zi:x:1002:
以:为分隔符,分为4列
第一列 :组的名称
第二列 : 组的密码占位符
第三列 : 组的GID
第四列 : 哪些用户使用这个作为附加组,这里就写用户的名称
[root@localhost ~]# tail -3 /etc/gshadow
z:!::
user03:!::
zi:!::
第一列 : 组的名称
第二列 : 组的密码 !或者空 没有密码
第三列 : 组的管理者 一般为空
第四列 : 哪些用户使用这个作为附加组,这里就写用户的名称
用户组的相关命令
1,groupadd
选项:
-g :指定gid
-r :创建系统组 组id在201-999之间
[root@localhost ~]# groupadd -g 1055 agroup
[root@localhost ~]# tail -1 /etc/group
agroup:x:1055:
[root@localhost ~]# groupadd -r 11group
[root@localhost ~]# tail -1 /etc/group
11group:x:776:
2, groupadd 修改组
选项
-g :修改gid
-n : 修改组名称
[root@localhost ~]# groupmod -g 1111 agroup
[root@localhost ~]# tail -2 /etc/group
agroup:x:1111:
11group:x:776:
# 先输入新的用户名 再原本的用户名
[root@localhost ~]# groupmod -n bgroup agroup
[root@localhost ~]# tail -2 /etc/group
11group:x:776:
bgroup:x:1111:
3, groupdel 删除组
# 创建用户zzz在gid2222中没有该gid
[root@localhost ~]# uesadd -g 2222 zzz
-bash: uesadd: command not found
# 创建gid 为2222 的abc组
# 创建用户zzz的gid2222
[root@localhost ~]# groupadd -g 2222 abc
[root@localhost ~]# useradd -g 2222 zzz
# 删除abc组无法删除
# 改组下有zzz用户
[root@localhost ~]# groupdel abc
groupdel: cannot remove the primary group of user 'zzz'
# 修改zzz的gid
[root@localhost ~]# usermod -g 1001 zzz
# 再删除abc组即可
[root@localhost ~]# groupdel abc
11, 用户提权
su 简单 需要指定root密码
shell的分类:
交互式shell 在终端执行的命令
非交互式shell 脚本方式执行
登陆式shell 通过用户名和密码的方式登录
非登陆式shell 不通过用户名和密码的方式登录
su username 非登陆式shell
su - username 登录式shell
区别在于加载的系统环境变量配置文件不一样 /etc/profile
# 家目录仍在root下
[root@localhost ~]# su zzz
[zzz@localhost root]$ pwd
/root
# 家目录在home下
[root@localhost ~]# su - zzz
Last login: Fri Jul 31 12:13:18 CST 2020 on pts/0
[zzz@localhost ~]$ pwd
/home/zzz
root使用su切换用户,需要密码,普通用户切换普通用户需要密码
# su - 相当于 su - root
[zzz@localhost ~]$ su -
Password:
Last login: Fri Jul 31 12:13:41 CST 2020 on pts/0
sudo 复杂 安全 权限限制严
sudo 提权
只有root用户才可以使用sudo命令 ,普通用户必须让root用户设置之后才可以使用
[zzz@localhost ~]$ cat /var/log/messages
cat: /var/log/messages: Permission denied
[root@localhost ~]# visudo
在100行左右root下编辑,可执行100gg,直接光标跳到到100行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zzz ALL=(ALL) NOPASSWD: /bin/cat /var/log/messages
# 再次查看日志
[zzz@localhost ~]$ cat /var/log/messages
cat: /var/log/messages: Permission denied
[zzz@localhost ~]$ sudo cat /etc/log/messages
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo设置组的别名
# 设置别名BGROUP里有bb1和bb2两个用户#
# User_Alias ADMINS = jsmith, mikem
User_Alias BGROUP = bb1,bb2
# 设置READ包括cat more tail三个命令#注意/bin/cat 命令之间要用逗号分隔开
Cmnd_Alias READ = /bin/cat,/bin/more/,/bin/tail
#设置权限#
BGROUP ALL=(ALL) NOPASSWD:READ
#
创建bb1 和bb2用户
#切换到bb1用户,直接使用more命令提示无权限,前面一定要加上sudo
#可以 su -l查询权限
[root@localhost ~]# su - bb1
Last login: Fri Jul 31 16:50:12 CST 2020 on pts/0
[bb1@localhost ~]$ 1
-bash: 1: command not found
[bb1@localhost ~]$ sudo -l
Matching Defaults entries for bb1 on localhost:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User bb1 may run the following commands on localhost:
(ALL) NOPASSWD: /bin/cat, /bin/more/, /bin/tail
[bb1@localhost ~]$ more /var/log/messages
/var/log/messages: Permission denied
[bb1@localhost ~]$ sudo more /var/log/messages
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
#如果要取消该权限前面加上#即可
设置系统组
[baby1@babysnow ~]$ sudo -l
Matching Defaults entries for baby1 on babysnow:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User baby1 may run the following commands on babysnow:
(ALL) NOPASSWD: /bin/cat, /bin/more, /bin/taif -n
[baby1@babysnow ~]$ cat /var/log/messages
cat: /var/log/messages: Permission denied
[baby1@babysnow ~]$ sudo cat /var/log/messages
# 只需要设置权限处,注意不需要user alias
%babyy ALL=(ALL) NOPASSWD:READ