基础_三剑客 & vim & 用户管理相关命令

一,字符处理命令


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

mail

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'<file1

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'<file1

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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>

        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<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        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<UP,BROADCAST,RUNNING,MULTICAST>  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<link>

        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<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        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

mail

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268