LINUX之三劍客
本篇主要介紹linux下常用的增刪改查工具:
- grep
- sed
- awk
grep是linux下一個強大的搜索工具,幾乎操作linux的用戶每天都會或多或少的用到grep命令,單一個功能再強大,也存在短板,grep最明顯的短板就是不能對已知結果進行更改,因此sed和awk工具就彌補了grep的短板,有人習慣稱grep,sed和awk並稱為linux下三劍客,是體現了三個工具一個計算機工作者不可缺少的必備技能之一
♣grep的語法:
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<范本樣式>][-f<范本文件>][--help][范本樣式][文件或目錄...]
grep參數使用:
因參數過多,個人將列舉部分常用的參數

[root@aly-centos7 /]# ps -ef | grep nginx root 14475 14272 0 13:21 pts/0 00:00:00 grep --color=auto nginx [root@aly-centos7 /]# ps -ef | grep -c nginx 1

文件內容: [root@aly-centos7 /]# cat passwd1 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-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:998:997:User for polkitd:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin [root@aly-centos7 /]# cat passwd2 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 [root@aly-centos7 /]#cat passwd3 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 operator:x:11:0:operator:/root:/sbin/nologin 過濾結果: [root@aly-centos7 /]# cat passwd1 | grep -f passwd2 | grep -f passwd3 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 operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]# 最后結果顯示三個文件相同的部分

[root@aly-centos7 /]# cat passwd2 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 [root@aly-centos7 /]# cat passwd3 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 operator:x:11:0:operator:/root:/sbin/nologin root,root root123 [root@aly-centos7 /]# grep -n "root" passwd2 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]# grep -n "root" passwd2 passwd3 passwd2:1:root:x:0:0:root:/root:/bin/bash passwd2:10:operator:x:11:0:operator:/root:/sbin/nologin passwd3:1:root:x:0:0:root:/root:/bin/bash passwd3:5:operator:x:11:0:operator:/root:/sbin/nologin passwd3:6:root,root passwd3:7:root123 [root@aly-centos7 /]#

[root@aly-centos7 /]# grep "^r" passwd3 #查找指定字符開頭 root:x:0:0:root:/root:/bin/bash root,root root123 [root@aly-centos7 /]# grep "^[^r]" passwd3 #查找非指定字符開頭 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 operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]# grep "n$" passwd3 #查找指定結尾 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 operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]#

[root@aly-centos7 /]#cat qq.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" 130205

[root@aly-centos7 /]# grep -r -n "root" /etc/ /etc/logrotate.d/ppp:9: create 0600 root root /etc/logrotate.d/mysql:9:# In case the root user has a password, then you /etc/logrotate.d/mysql:10:# have to create a /root/.my.cnf configuration file /etc/logrotate.d/mysql:15:# user= root /etc/logrotate.d/mysql:19:# ATTENTION: The /root/.my.cnf file should be readable /etc/logrotate.d/mysql:20:# _ONLY_ by root ! /etc/logrotate.d/mysql-mmm:8: create 640 root adm /etc/logrotate.d/wpa_supplicant:5: create 0600 root root /etc/logrotate.d/yum:6: create 0600 root root /etc/rsyncd.conf:9:# use chroot = yes /etc/statetab:5:# See $STATE_LABEL in /etc/sysconfig/readonly-root /etc/statetab:9:# /root /etc/group:1:root:x:0: /etc/group:49:dockerroot:x:991: /etc/passwd-:1:root:x:0:0:root:/root:/bin/bash /etc/passwd-:10:operator:x:11:0:operator:/root:/sbin/nologin Binary file /etc/aliases.db matches /etc/mime.types:351:application/vnd.cyan.dean.root+xml /etc/mime.types:382:application/vnd.dvb.notif-aggregate-root+xml
grep用於常規的查詢操作固然方便,但是最大的弊端就是查出來不能增刪改,導致如果是寫一些腳本就會很不方便,這個時候就需要sed和awk這樣的工具來實現。
♣sed的使用:
因參數過多,個人將列舉部分常用的參數
- a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
- c :取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
- d :刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
- i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
- p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
- s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g
sed的工作流程:
1:sed默認不編輯原文件,而是逐行操作,復制一份到指定內存(pattern space,模式空間)
2:pattern space內進行模式匹配,即和指定條件做匹配
不滿足模式:輸出到標准輸出STDOUT
滿足模式:進行指定的模式操作,再輸出到STDOUT
3:第二個特殊的內存空間 :保持空間(hold space),臨時保存操作在另一處內存
4:當執行pattern space和 hold space相關選項時候會進行之間的數據流編輯操作
5:最后根據操作執行hold space空間操作,選擇性顯示到STDOUT
查詢:

[root@aly-centos7 /]# sed -n '1,5{/^root/p}' passwd2 root:x:0:0:root:/root:/bin/bash [root@aly-centos7 /]#

[root@aly-centos7 /]# cat passwd3 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 operator:x:11:0:operator:/root:/sbin/nologin root,root root123 [root@aly-centos7 /]# sed -n '/3/,$p' passwd3 #顯示第一次匹配到的3到最行一行輸出 adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root,root root123 [root@aly-centos7 /]# sed -n '/3/,+1p' passwd3#顯示第一次匹配到的3到向下1行輸出 adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root123 [root@aly-centos7 /]#

[root@aly-centos7 /]# cat passwd2 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 [root@aly-centos7 /]# sed '1!G;h;$!d' passwd2 #逆向排序 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/bash [root@aly-centos7 /]#

operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]# [root@aly-centos7 /]# cat passwd2 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 [root@aly-centos7 /]# sed '=' passwd2 #不屏蔽空行 1 root:x:0:0:root:/root:/bin/bash 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 11 12 operator:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]# sed '/./=' passwd2 #屏蔽空行 1 root:x:0:0:root:/root:/bin/bash 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 12 operator:x:11:0:operator:/root:/sbin/nologin

[root@aly-centos7 /]# grep -n "" passwd3 1:root:x:0:0:root:/root:/bin/bash 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:operator:x:11:0:operator:/root:/sbin/nologin 6:root,root 7:root123 [root@aly-centos7 /]# sed -n '$=' passwd3 7 [root@aly-centos7 /]#

[root@aly-centos7 /]# grep -n "" passwd3 1:root:x:0:0:root:/root:/bin/bash 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:operator:x:11:0:operator:/root:/sbin/nologin 6:root,root 7:root123 [root@aly-centos7 /]# sed -n 'p;n' passwd3 #奇數行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root123 [root@aly-centos7 /]# sed -n '1~2p' passwd3 #奇數行 root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin root123 [root@aly-centos7 /]# sed -n 'n;p' passwd3 #偶數行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin root,root [root@aly-centos7 /]# sed -n '2~2p' passwd3 #偶數行 bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin root,root [root@aly-centos7 /]#

[root@aly-centos7 /]# cat passwd2 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 1234567890 9876543210 [root@aly-centos7 /]# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' passwd2 hsab/nib/:toor/:toor:0:0:x:toor nigolon/nibs/:nib/:nib:1:1:x:nib nigolon/nibs/:nibs/:nomead:2:2:x:nomead nigolon/nibs/:mda/rav/:mda:4:3:x:mda nigolon/nibs/:dpl/loops/rav/:pl:7:4:x:pl cnys/nib/:nibs/:cnys:0:5:x:cnys nwodtuhs/nibs/:nibs/:nwodtuhs:0:6:x:nwodtuhs% tlah/nibs/:nibs/:tlah:0:7:x:tlah$ nigolon/nibs/:liam/loops/rav/:liam:21:8:x:liam$# nigolon/nibs/:toor/:rotarepo:0:11:x:rotarepo 0987654321 0123456789 [root@aly-centos7 /]#

[root@aly-centos7 /]# cat passwd2 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 1234567890 9876543210 [root@aly-centos7 /]# sed ':a;s/\B[0-9]\{3\}\>/,&/;ta' passwd2 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 1,234,567,890 9,876,543,210 [root@aly-centos7 /]#
刪除:

刪除1-5行內容 [root@aly-centos7 /]# grep -n "" passwd2 | sed '1,5d' 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: 11: 12:operator:x:11:0:operator:/root:/sbin/nologin 13:1234567890 14:9876543210 刪除奇數行: [root@aly-centos7 /]# grep -n "" passwd2 | sed '1~2d' 2:bin:x:1:1:bin:/bin:/sbin/nologin 4:adm:x:3:4:adm:/var/adm:/sbin/nologin 6:sync:x:5:0:sync:/sbin:/bin/sync 8:$halt:x:7:0:halt:/sbin:/sbin/halt 10: 12:operator:x:11:0:operator:/root:/sbin/nologin 14:9876543210 刪除空行 [root@aly-centos7 /]# grep -n "" passwd2 1:root:x:0:0:root:/root:/bin/bash 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: 11: 12:operator:x:11:0:operator:/root:/sbin/nologin 13:1234567890 14:9876543210 [root@aly-centos7 /]# grep "" passwd2 | sed '/^$/d' 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 1234567890 9876543210 [root@aly-centos7 /]#
修改:

將root全部替換成mysql [root@aly-centos7 /]# grep -n "" passwd3 1:root:x:0:0:root:/root:/bin/bash 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:operator:x:11:0:operator:/root:/sbin/nologin 6:root,root 7:root123 [root@aly-centos7 /]# sed 's/root/mysql/g' passwd3 mysql:x:0:0:mysql:/mysql:/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 operator:x:11:0:operator:/mysql:/sbin/nologin mysql,mysql mysql123 把數字1全部替換成9 [root@aly-centos7 /]# sed 's/1/9/g' passwd3 root:x:0:0:root:/root:/bin/bash bin:x:9:9:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin operator:x:99:0:operator:/root:/sbin/nologin root,root root923 只替換行中未出現“sbin”字符的時候,將”root“替換成”nginx“ [root@aly-centos7 /]# sed '/sbin/!s/root/nginx/g' passwd3 nginx:x:0:0:nginx:/nginx:/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 operator:x:11:0:operator:/root:/sbin/nologin nginx,nginx nginx123 root:x:11:0:operator:/root:/sbin/nologin root1:x:11:0:operator:/root:/sbin/nologin root2:x:11:0:operator:/root:/sbin/nologin [root@aly-centos7 /]#
awk的使用:
在某些場景下,我們需要過濾方式希望是列來匹配,而不是sed的行來匹配,而且awk還可以嵌套for等循環去使用,拓展性強,當然awk也是最難的。
awk的常用命令選項:
- -F fs fs指定輸入分隔符,fs可以是字符串或正則表達式,如-F:
- -v var=value 賦值一個用戶定義變量,將外部變量傳遞給awk
- -f scripfile 從腳本文件中讀取awk命令
- -m[fr] val 對val值設置內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標准awk中不適用。
awk內置變量:
- FS 保存或設置分隔符,例如FS=",";
- $N 指定分隔符的第N個字段,例如$1,$5代表第一列和第三列;
- $0 當前讀入整行的文本內容;
- NF 記錄當前處理行的字段個(列)數;
- NR 記錄當前處理行的數量;
- FNR 保存當前處理行在原文本內的行號;
- FILENAME 當前處理的文本名;
- ENVIRON 調用shell環境變量。
查詢:

[root@aly-centos7 /]# awk '{print $0}' passwd4 #$0代表整列 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 1234 567890 9876 543210 [root@aly-centos7 /]# awk '{print $1}' passwd4 #$1代表第一列 root bin daemon adm lp sync %shutdown $halt:x:7:0:halt:/sbin:/sbin/halt #$mail operator 1234 9876 [root@aly-centos7 /]#

首先要查看剩余內存是那個字段標記,然后標記的這一行用grep取出來,最后用awk把這一行的列取出來在加上一個可讀性語句即可 [root@aly-centos7 /]# free | grep Mem | awk '{print"當前剩余內存:\n",$7}' 當前剩余內存: 1408424 [root@aly-centos7 /]#

/var/log/secure是用於記錄訪問的信息,可以通過這個日志來看出來是否遭受到惡意攻擊 [root@aly-centos7 /]# grep "Accepted" /var/log/secure | awk '{print $11}' 101.95.130.134 101.95.130.134 101.95.130.134 101.95.130.134 101.95.130.134 101.95.130.134 101.95.130.134 101.95.130.134 [root@aly-centos7 /]# 通過過濾我就知道那些ip訪問了,不過訪問的ip數量很多,而生產服務器訪問的ip都是固定的,一般都會有一個文件記錄,這樣可以寫一個腳本和你過濾的ip比對,那些沒有登記的就可以處理掉。

[root@aly-centos7 /]# awk '{print NF}' passwd4 2 2 2 2 2 2 2 1 2 2 2 2 [root@aly-centos7 /]# cat passwd4 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 1234 567890 9876 543210 [root@aly-centos7 /]#

[root@aly-centos7 /]# awk '{print FNR}' passwd3 passwd4 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 12 [root@aly-centos7 /]#

[root@aly-centos7 /]# awk -F: 'BEGIN{i=0;j=0}{if($3<=30){i++}else{j++}}END{print "<=30:"i,"\n",">=30:"j}' /etc/passwd <=30:13 >=30:17 [root@aly-centos7 /]#

[root@aly-centos7 /]# grep --color root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin dockerroot:x:993:991:Docker User:/var/lib/docker:/sbin/nologin [root@aly-centos7 /]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd 5 [root@aly-centos7 /]#

[root@aly-centos7 httpd]# tail -10 access_log 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" 172.16.163.69 - - [24/Jul/2018:13:39:12 +0800] "GET / HTTP/1.0" 403 4897 "-" "ApacheBench/2.3" [root@aly-centos7 httpd]# awk '{ip[$1]++} END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log 172.16.163.69 1000 [root@aly-centos7 httpd]#
后續將不斷完善awk使用案例