linux運維實戰練習-2015年8月27日課程作業

一、作業(練習)內容:

1、總結本此課程中所涉及命令的使用方法及相關示例展示

2、總結基本正則表達式及擴展正則表達式

3、顯示/etc/passwd文件中以bash結尾的行

4、顯示/etc/passwd文件中的兩位數或三位數

5、顯示`netstat -tan`命令結果中以‘LISTEN’後跟0個、1個或者多個空白字符結尾的行

6、添加用戶bash、testbash、basher以及nologin用戶(nologin用戶的shell爲/sbin/nologin);而後找出/etc/passwd文件中用戶名與其shell名相同的行

7、顯示當前系統上root、centos或者user1用戶的默認shell和UID (請事先創建這些用戶,若不存在)

8、找出/etc/rc.d/init.d/functions文件中某單詞(單詞中間可以存在下劃線)後面跟着一組小括號的行

9、使用echo輸出一個路徑,而後egrep找出其路徑基名;進一步的使用egrep取出其目錄名

10、找出ifconfig命令執行結果中1-255之間的數字


第一、二題

http://huangyisan.blog.51cto.com/6925110/1690105

http://huangyisan.blog.51cto.com/6925110/1690110



第三題:使用$錨定bash爲詞尾

[root@ST_server home]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
nginx:x:498:498::/home/nginx:/bin/bash
mysql:x:500:500::/home/mysql:/bin/bash
huangyisan:x:502:502::/home/huangyisan:/bin/bash
huangyisan1:x:503:503::/home/huangyisan1:/bin/bash
huangyisan2:x:504:502::/home/huangyisan2:/bin/bash
huangyisan3:x:505:505::/home/huangyisan3:/bin/bash


第四題:第一位設定爲[1,9]然後第二位和第三位爲[0,9],並且讓他們出現一次(因爲已經有了最高位了)所以第二位其實是出現1次或者2次,然後用-o將需要匹配的對象給摳出來。

[root@ST_server home]# grep -o "\<[1-9][0-9]\{1,2\}\>" /etc/passwd_bak

最後顯示的結果沒有把"07"給匹配進去,因爲07屬於一位數。這道題目要注意的是首位數字不能爲0

[root@ST_server home]# cat /etc/passwd_bak | grep 07
halt:x:07:0:halt:/sbin:/sbin/halt
[root@ST_server home]# grep -o "\<[1-9][0-9]\{1,2\}\>" /etc/passwd_bak | grep 07
[root@ST_server home]#



第五題:0,1個或者多個,那麼是前一個字符的多次匹配,可以使用*,或者使用{0,\},然後他要求是空白字符結尾的行,空白字符可以用[:space:]表示,結尾的行則使用行尾錨定$

[root@ST_server home]# cat aa.txt 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 192.168.91.130:4506         192.168.91.131:54854        ESTABLISHED 
tcp        0      0 :::8080                     :::*                        LISTEN      
tcp        0      0 ::1:53                      :::*                        LISTEN      
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTENING1      
tcp        0      0 :::8009                     :::*                        LISTENING

編輯了一個aa.txt寫了個干擾項。

[root@ST_server home]# cat aa.txt  | egrep  "LISTEN[[:space:]]{0,}$"
tcp        0      0 :::8080                     :::*                        LISTEN      
tcp        0      0 ::1:53                      :::*                        LISTEN      
[root@ST_server home]# cat aa.txt  | egrep  "LISTEN[[:space:]]*$"
tcp        0      0 :::8080                     :::*                        LISTEN      
tcp        0      0 ::1:53                      :::*                        LISTEN

最終抓出了LISTEN的項目,其實這個LISTEN後面還有空格符的。


第六題:passwd分佈第一部分是用戶名,用^來錨定,最後一個部分是shell模式,用$來錨定,他說要用戶名和shell模式相同,先把用戶名給抓出來,用\<用戶名\>,然後使用\1來匹配,把用戶名參數傳入到\1中。

[root@ST_server home]# grep -E "^(\<[[:alnum:]]+)\>.+\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
bash:x:606:606::/home/bash:/bin/bash
nologin:x:609:609::/home/nologin:/sbin/nologin

[[:alnum:]]包含了字母和數字。


第七題:三個用戶採用或關係,首先想"|"符號,通過passwd提取,第一部分爲用戶名,首行錨定這三個用戶。

[root@ST_server home]# grep -E "^(\<root\>|\<centos\>|\<user1\>)" /etc/passwd
root:x:0:0:root:/root:/bin/bash
centos:x:611:611::/home/centos:/bin/bash
user1:x:612:612::/home/user1:/bin/bash


第八題:我的寫法存在問題。無法對相隔多個單詞之間的下劃線進行匹配,這樣雖然可以匹配出來,但是並沒用上語句的邏輯。

grep -E  "\<[[:alpha:]]+_?[[:alpha:]].*\(\)" /etc/rc.d/init.d/functions


第九題:可能echo出現的路徑最後會存在/,我的手法是提取兩次。先把基名/提取出來,然後再一次提取基名。關鍵點是[^/]弄出去掉/的部分。[^/]得到的是一個個的字母,[^/]+得到的纔是一個完整的字符串。這點需要注意!

[root@ST_server init.d]# echo "/etc/sysconfig/networks-sysconfig/" |   egrep  -o "^(/[^/]+){1,}" | egrep -o "[^/]+$"
networks-sysconfig

提取基名的目錄名:

[root@ST_server ~]# echo "/etc/sysconfig/networks-sysconfig/cis00co/h3c_009/update/mv/" |   egrep  -o "^(/[^/]+){1,}" | egrep -o "^/([^/]+/){1,}" | egrep -o "[^/]+/?$" | egrep -o "[^/]+"
update

wKioL1Xh2kmAwPk0AAFe1rcqVS8493.jpg

第十題:分成五個段,個位段;十位段,100-199段,200-249段,250-255段

[root@ST_server home]# ifconfig  | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

wKioL1XgimTx5PjCAAHHzsHS2iA054.jpg

還有點問題,比如mac地址內的數字沒有被抓取出來。


擴展:抓取ifconfig的ip地址。特點是第一個不能爲0 範圍是1-255  第二個到第四個可以爲0,範圍是0-255。

[root@ST_server home]# ifconfig   |egrep -o  "(\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.)(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){2}(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>)"
192.168.130.131
192.168.130.255
255.255.255.0
127.0.0.1
255.0.0.0


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章