馬哥2016全新Linux+Python高端運維班第五週做業

一、顯示當前系統上root、fedora或user1用戶的默認shell;
node

答:須要找到3個字符串,須要用到「或」命令,因此使用egrep。找到後cut再次篩選出咱們須要顯示的用戶默認的shell。shell

命令爲:egrep "^(root|fedora|user1)" /etc/passwd | cut -d: -f1,7bash

結果以下:服務器

wKiom1fFI4rQNcPSAACbdqPjtOk755.jpg

二、找出/etc/rc.d/init.d/functions文件中某單詞後面跟一組小括號的行,形如:hello();ide

答:wKioL1fFJVOQv8_sAAPtlETV6io751.jpg
oop

三、使用echo命令輸出一個絕對路徑,使用grep取出其基名;測試

答:首先咱們要了解什麼是路徑的基名和路徑名:spa

       基名:能夠理解爲路徑名最右邊的名稱;debug

       路徑名:除基名之外的路徑;3d

       瞭解以後咱們使用grep取出一個路徑的基名

  wKioL1fFRVzxKW0sAACUC5Un-QE617.jpg

    注:"\<[^/]\+" 意思爲匹配非"/"開頭的單詞,"\<"爲詞首錨定,"\+"爲匹配前面的條件至少一次;

          "/\?$" 意思爲匹配行尾"/"符號無關緊要的行,"\?"匹配前面的字符0或1次,"$"行尾錨定。

          條件"\<[^/]\+/\?$" 即匹配非"/"開頭的單詞而且行尾的"/"無關緊要

    命令擴展:

    grep的條件中使用了不少"\"來轉義,爲了方便簡潔,還可使用egrep來完成,以下圖;

   wKioL1fFShLRW6k6AACxscKMdMA292.jpg

       此外,咱們還可使用basename命令直接獲取一個路徑的基名,以下圖;      wKioL1fFJ4-whN8WAABGB3KKRno080.jpg

      也可使用dirname命令直接獲取一個路徑的路徑名,以下圖;

        wKiom1fFJ87z31ISAABKteEGfVk379.jpg

   擴展:取出其路徑名

wKiom1fFZMqA_khZAAC2v3MY5Oo512.jpg

四、找出ifconfig命令結果中的1-255之間數字;

答:此匹配模式僅僅只是找出1-255之間的數字,不考慮IP等因素‘

wKioL1fFrniApbvyAAMV5YBHNdI427.jpg

五、挑戰題:寫一個模式,能匹配合理的IP地址;

答:可編寫一個腳原本實現,思路是先判斷每一個數字是否小於255,要合理且可用必須小於255;而後經過行首行尾錨定來肯定給出的IP地址位數,大於或小於4位判斷爲非可用IP。腳本以下:

wKiom1fKlJfB-YDbAALBXsd2h-w387.jpg

測試結果以下:

[root@csd ~]# alias testip="./testip.sh"   ##定義腳本別名,要永久定義請修改配置文件
[root@csd ~]# testip 254.254.254                 ##給出的IP地址只有3個,不符合可用IP要求
The ip is not reasonable
[root@csd ~]# testip 2.111.111.111               ##正確可以使用IP
The ip is reasonable
[root@csd ~]# testip 199.250.3.1
The ip is reasonable
[root@csd ~]# testip 255.3.2.1                   ##有一個不小於255,不可用
The ip is not reasonable
[root@csd ~]# testip 14.0.0.1
The ip is reasonable
[root@csd ~]# testip 14.0.0.0                    ##此IP理論上可用,可是若要配置給服務器使用
The ip is not reasonable                           是不行的,故不放在考慮範圍
[root@csd ~]# testip 14.0.0.1.2                  ##大於4個,不可用
The ip is not reasonable

六、挑戰題:寫一個模式,能匹配出全部的郵件地址;

答:可編寫一個腳原本實現;思路爲匹配任意字母或數字開頭且有@符號,後跟任意字母或數字且以.com或.cn結尾的字符串。

wKiom1fKlruRlplWAAGH59cwwd0667.jpg

測試結果以下

[root@csd ~]# alias testm="./testmail.sh"       ##定義腳本別名,要永久定義請修改配置文件
[root@csd ~]# testm 1111@163.com.cn
This is a email address
[root@csd ~]# testm chenshunde@qq.com
This is a email address
[root@csd ~]# testm chenshunde@jlkjsdf.com
This is a email address
[root@csd ~]# testm 2322w177@163.com
This is a email address
[root@csd ~]# testm lkjsdfkljs
This is not a email address
[root@csd ~]# testm lkjsdfkljs@.com
This is not a email address 
[root@csd ~]# testm 2322w177@163.cn
This is a email address

七、查找/var目錄下屬主爲root,且屬組爲mail的全部文件或目錄;

答:

wKiom1fFsmTTi_TWAADyGec2FvQ845.jpg

 注:-user root:查找指定屬主爲root的文件或目錄;

        -group mail:查找指定屬組爲mail的文件或目錄;

        -ls:至關與ls -l

八、查找當前系統上沒有屬主或屬組的文件;

答:find命令中查找沒有屬主的選項爲"-nouser";查找沒有屬組的選項爲"-nogroup"

wKiom1fFtEqDq2I3AAoor2Rv15A697.jpg

    進一步:查找當前系統上沒有屬主或屬組,且最近3天內曾被訪問過的文件或目錄;

       爲了便於演示,咱們先建立2個文件文件,修改其屬主和屬組以及訪問時間:

[root@csd test]# touch testatime1.txt         ##建立文件1
[root@csd test]# touch testatime2.txt         ##建立文件2
[root@csd test]# touch -a -t 201609011342.34 testatime1.txt       ##修改文件1訪問時間 
[root@csd test]# touch -a -t 201609021521.54 testatime2.txt       ##修改文件2訪問時間
[root@csd test]# chown 1001:1001 /test/testatime1.txt           ##修改文件1屬主和屬組爲無
[root@csd test]# chown 1001:1001 /test/testatime2.txt           ##修改文件2屬主和屬組爲無

  ##說明:所謂無屬組和無屬主,就是在/etc/passwd文件中無有效的UID和GID,這次試驗中個人/etc/passwd文件
沒有UID號爲1001的用戶和GID號爲1001的組,因此斷定爲無屬主或無屬組。

[root@csd test]# stat testatime1.txt          ##查看文件1的狀態
  File: "testatime1.txt"
  Size: 0         	Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d	Inode: 395343      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-01 13:42:34.000000000 +0800      ##此爲訪問時間
Modify: 2016-09-03 01:58:41.270874816 +0800      ##此爲修改時間
Change: 2016-09-03 01:59:09.409420634 +0800      
[root@csd test]# stat testatime2.txt          ##查看文件2的狀態    
  File: "testatime2.txt"
  Size: 0         	Blocks: 0          IO Block: 4096   普通空文件
Device: 802h/2050d	Inode: 395769      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-02 15:21:54.000000000 +0800
Modify: 2016-09-03 01:58:44.166927110 +0800
Change: 2016-09-03 01:59:28.165787554 +0800
[root@csd test]# find / \( -nouser -o -nogroup \) -atime -3 -ls   ##find可以使用組合條件            
                                        "-o"表示爲條件或,
                                        "-a"指明訪問時間,
                                        "-ls"同等於"ls -l"
                                        使用條件組合時必須使用
                                        括號且括號需轉義

結果圖以下:

wKiom1fJw1LgT_8HAAdmC9tDIIo863.jpg

九、查找/etc目錄下全部用戶都有寫權限的文件;

答:find命令能夠根據權限來查找,使用選項爲"-perm"。

[root@csd test]# find /etc -perm -222 -ls;

效果以下

wKiom1fJ3iXRbyhMAAf-iruIZCc647.jpg

"-222"匹配的權限爲屬主擁有寫權限,屬組擁有寫權限,其餘用戶擁有寫權限;

說明:find使用權限查找時有三種用法;

find /etc -perm /MODE;此用法表示任何一類(u,g,o)對象權限中的只要能一位匹配便可;

②find /etc -perm -MODE;此用法表示每一類對象都必須同時擁有爲其指定的權限標準;

③find /etc -perm MODE;此用法表示精確權限匹配;

十、查找/etc目錄下大於1M,且類型爲普通文件的全部文件;

答:find命令可根據文件大小來查找,使用選項"-size"

      說明:    

       -size [+|-]#UNIT

       經常使用單位:k,M,G

       #UNIT:不加+-號,大於#-1,小於或等於#

       -#UNIT:大於0,小於或等於#-1

       +#NUIT:大於#

效果以下:

wKioL1fJ0NPT4JOHAAG1V5p1RXU072.jpg

十一、查找/etc/init.d/目錄下,全部用戶都有執行權限,且其它用戶有寫權限的文件;

答:

wKioL1fJ3A2R_c-SAAD_PvYNj-M765.jpg

十二、查找/usr目錄下不屬於root、bin或hadoop的文件;

答:爲了便於演示,咱們首先建立兩個test文件,並修改屬主;

[root@csd usr]# touch test1.txt            ##建立文件
[root@csd usr]# touch test2.txt
[root@csd usr]# chown bash: test1.txt         ##修改文件屬主
[root@csd usr]# chown testbash: test2.txt
[root@csd ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls   ##find支持條件查詢,"-o"爲或;"-not"爲非。
133800    0 -rw-r--r--   1 bash     bash            0 9月  3 14:18 /usr/test1.txt
133804    0 -rw-r--r--   1 testbash testbash        0 9月  3 14:18 /usr/test2.txt
137096   12 -rwsr-xr-x   1 abrt     abrt        10096 8月 14  2013 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

結果以下:

wKioL1fKmNvgZeflAAGlLPsMaDY679.jpg

1三、查找/etc/目錄下至少有一類用戶沒有寫權限的文件;

答:

[root@csd ~]# find /etc ! -perm -222 -ls
 說明:"-222"表示查找全部權限中都有寫權限的文件和目錄,要查找至少有一類用戶沒有寫權限的,咱們進行取反便可;
    "!"表示非,等同於"-not"

效果以下:

wKioL1fKb4-jKQ56AAfOw7cfPU4120.jpg

1四、查找/etc目錄下最近一週內其內容被修改過,且不屬於root或hadoop的文件;

答:

[root@csd etc]# touch test.txt                ##新建文件
[root@csd etc]# touch test1.txt  
[root@csd etc]# chown bash: test.txt          ##修改文件屬主
[root@csd etc]# chown basher: test1.txt 
[root@csd etc]# vi test.txt                   ##編輯文件,知足一週內被修改過的條件
[root@csd etc]# vi test1.txt 
[root@csd ~]# find /etc \( ! \( -user root -o -user hadoop \) \) -a \( -mtime -7 \) -ls
  3781    4 -rw-r--r--   1 basher   basher         16 9月  3 14:46 /etc/test1.txt
  3782    4 -rw-r--r--   1 bash     bash           17 9月  3 14:46 /etc/test.txt
  
[root@csd ~]# touch -m -t 201608021423.42 /etc/test1.txt   ##修改/etc/text1.txt的modify time
[root@csd ~]# stat /etc/test1.txt                          ##查看/etc/text1.txt文件狀態
  File: "/etc/test1.txt"
  Size: 16        	Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d	Inode: 3781        Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 3006/  basher)   Gid: ( 3008/  basher)
Access: 2016-09-03 14:46:38.969278255 +0800
Modify: 2016-08-02 14:23:42.000000000 +0800
Change: 2016-09-03 14:52:48.479680378 +0800

[root@csd ~]# find /etc \( ! \( -user root -o -user hadoop \) \) -a \( -mtime -7 \) -ls
  3782    4 -rw-r--r--   1 bash     bash           17 9月  3 14:46 /etc/test.txt

效果以下:

wKiom1fKdn7h6ZcPAAGtgkQP8hg322.jpg

爲了更好的看出效果,咱們修改下test1的modify time

wKiom1fKdsfB00icAAN4o0a-6B0805.jpg

相關文章
相關標籤/搜索