7-2.檔案處理工具之grep案例分析
阿新 • • 發佈:2020-08-05
1.顯示/proc/meminfo檔案中以大小s開頭的行(要求:使用兩種方法)
案例思路
分析:首先大小s,我們可以想到-i忽略大小選項,s開頭的行可以用行首錨定符^,用"."代表s後面的任意字元,用"*"表示前面點字元重複不確定次數。
[root@localhost data]# grep -in '^s.*' /proc/meminfo 6:SwapCached: 0 kB 15:SwapTotal: 4194300 kB 16:SwapFree: 4194300 kB 21:Shmem: 9724 kB 22:Slab: 93044 kB 23:SReclaimable: 40760 kB 24:SUnreclaim: 52284 kB [root@localhost data]# grep -Ein '^(S|s)' /proc/meminfo 6:SwapCached: 0 kB 15:SwapTotal: 4194300 kB 16:SwapFree: 4194300 kB 21:Shmem: 9724 kB 22:Slab: 93012 kB 23:SReclaimable: 40760 kB 24:SUnreclaim: 52252 kB
2.顯示/etc/passwd檔案中不以/bin/bash結尾的行
案例思路
分析:以/bin/bash結尾的行,我們可以使用行尾錨定符$來實現,而題目結果是不以/bin/bash結尾的行,那麼只要使用-v顯示不被pattern匹配到的行就可以了。
[root@localhost data]# grep -nv '/bin/bash$' /etc/passwd 2:bin:x:1:1:bin:/bin:/sbin/nologin 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin 4:adm:x:3:4:adm:/var/adm:/sbin/nologin 5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8:halt:x:7:0:halt:/sbin:/sbin/halt 9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10:operator:x:11:0:operator:/root:/sbin/nologin 11:games:x:12:100:games:/usr/games:/sbin/nologin 12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13:nobody:x:99:99:Nobody:/:/sbin/nologin 14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin 15:dbus:x:81:81:System message bus:/:/sbin/nologin 16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin 17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
3.顯示使用者rpc預設的shell程式
案例思路
分析:顯示使用者rpc,那麼就是以r開頭,c結尾,可以使用行首錨定符^,結尾部分用詞尾錨定>,那麼這樣就可以找出符合要求的使用者的,再通過cut取列就能拿到該使用者的shell程式。
[root@localhost data]# grep '^rpc\>' /etc/passwd|cut -d":" -f7
/bin/bash
4.找出/etc/passwd中的兩位或三位數
案例思路
分析:匹配任意數字可以使用[0-9]來實現,而兩位或三位數,我們首先想到用{m,n}這個實現,數字開頭和結尾可以用詞首和詞尾來錨定。
[root@localhost data]# grep "\<[0-9]\{2,3\}\>" /etc/passwd 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
5.顯示CentOS7的/etc/grub2.cfg檔案中,至少以一個空白字元開頭的且後面有非空白字元的行
案例思路
分析:匹配空白字元,首先我們想到有個[:space:],這個可以匹配水平和垂直的空白字元,而非空白字元則可以加上^來實現,至少一個,那麼可以用使用+匹配其前面的字元至少1次,字元開頭使用^行首錨定符來實現。
[root@localhost data]# grep -on "^[[:space:]]\+[^[:space:]]\+" /etc/grub2.cfg|head
12: load_env
15: set
16: set
17: save_env
18: set
20: set
24: menuentry_id_option="--id"
26: menuentry_id_option=""
32: set
33: save_env
6.找出“netstat -tan” 命令結果中以LISTEN後跟任意多個空白字元結尾的行
案例思路
分析:以多個空白字元結尾的行,可以使用[[:space:]]*$來匹配,-E使用擴充套件正則。
[root@localhost data]# netstat -tan |grep -En '(LISTEN[[:space:]]*)$'
3:tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
4:tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
6:tcp6 0 0 :::22 :::* LISTEN
7:tcp6 0 0 ::1:25 :::* LISTEN
7.顯示CentOS7上所有UID小於1000以內的使用者名稱和UID
案例思路
分析:首先顯示使用者名稱和UID,我們想到用cut命令,可以按列把使用者名稱和UID取出來,然後小於1000以內的UID,用{m,n}表示取數範圍。
[root@localhost data]# cat /etc/passwd|cut -d: -f1,3 | grep "\<[0-9]\{,3\}\>"
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
sshd:74
postfix:89
8.新增使用者bash、 testbash、 basher、 sh、 nologin(其shell為/sbin/nologin),找出/etc/passwd使用者名稱和shell同名的行
案例思路
分析:
useradd bash -s /sbin/nologin
useradd testbash -s /sbin/nologin
useradd basher -s /sbin/nologin
useradd sh -s /sbin/nologin
useradd nologin -s /sbin/nologin
[root@localhost data]# grep "^\(.*\)\>.*\1\>$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:1006:1006::/home/nologin:/sbin/nologin
9.利用df和grep,取出磁碟各分割槽利用率,並從大到小排序
案例思路
分析:首先用^/dev/sd匹配出各個磁碟分割槽,然後用[0-9]+%匹配出各個磁碟分割槽的利用率,最後用sort進行排序。
[root@localhost data]# df -h|grep "^/dev/sd"|grep -o "[0-9]\+%"|sort -nr
13%
2%
1%