linux正則以及find命令練習

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


grep '^\(root\|fedora\|user1\):' /etc/passwd | cut -d: -f1,7


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


egrep '[_[:alpha:]]+\(\)' /etc/rc.d/init.d/functions


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


echo /usr/local/src | grep -o "[^/]*$"


    擴展:取出其路徑名

echo /usr/local/src/***server/ | grep -oP "^.*(?=/)"

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


ifconfig | egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' --color

#注:這條也可以匹配得到1-255中,所有0-9的阿拉伯數字,但是不符合要求,在看題的使用,需要注意。

ifconfig  |grep '[0-9]' --color


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

[root@rice ~]# ifconfig eth0 | grep 'inet addr'| awk '{print $2}' | tr -d "addr:" 
192.168.1.10
You have new mail in /var/spool/mail/root

6、挑戰題:寫一個模式,能匹配出所有的郵件地址;

[root@rice ~]# egrep "[[:alnum:]]+_?[[:alnum:]]+@[[:alnum:]]+\.[[:alpha:]]+\.?[[:alpha:]]+?" bbbb.txt
[email protected]
[email protected]
[email protected]
[email protected]


7、查找/var目錄下屬主爲root,且屬組爲mail的所有文件或目錄;

find /var -user root -group mail -ls

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


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

[root@rice ~]#  find / -nouser -o -nogroup 
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/single.result
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/source.test
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/newcomb.test
/home/server/lnmp1.2-full/src/mariadb-5.5.42/mysql-test/suite/mtr/t/source.result

[root@rice ~]#find / -nouser -o -nogroup -a -atime 3 13


注:由於文件過多,這裏不做操作演示了。

 

9、查找/etc目錄下所有用戶都有寫權限的文件;

[root@rice ~]#find /etc -not -perm +222
/etc/openldap/certs/password
/etc/pam.d/cups
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem


10、查找/etc目錄下大於1M,且類型爲普通文件的所有文件;

[root@rice ~]# find /etc -type f -size +1M -ls
  5489 1044 -rw-r--r--   1 root     root      1066943 Apr 24  2015 /etc/pki/tls/certs/ca-bundle.trust.crt
    85 7900 -rw-r--r--   1 root     root      8088660 Jul  1 22:08 /etc/selinux/targeted/policy/policy.24
 18633 7900 -rw-r--r--   1 root     root      8088660 Jul 10  2015 /etc/selinux/targeted/modules/active/policy.kern


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


 find /etc/init.d/ -type f -perm -102 -ls


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


[root@rice ~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop -type f -ls
find: `hadoop' is not the name of a known user

注:因爲我的VPS中沒有這個用戶所以,顯示結果如下


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

[root@rice ~]#  find /etc/ ! -perm +222 -ls
  7885    4 -r--------   1 root     root           45 Jul 10  2015 /etc/openldap/certs/password
 23050    4 -r--r--r--   1 root     root          146 May 11 13:00 /etc/pam.d/cups


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

[root@rice ~]#  find /etc/ -type f -ctime -7 -a ! \( -user root -o -user hadoop \) -ls
find: `hadoop' is not the name of a known user

注:因爲我的VPS中沒有這個用戶的信息所以,顯示結果如下


總結:本次的練習,主要體現在正則的使用,以及find命令的運用,在下面我簡單的介紹下,find的一些各類場景 出現的問題,本週真的很忙,有很多細節的地方,沒有用心去多操作,所以,只能將就這樣了,過段時間,再對其,進行調整。


linux中find命令的-perm參數。


find -perm,根據文件的權限來查找文件,有三種形式:

find -perm mode

find -perm -mode

find -perm +mode

那麼這三者之間有什麼區別呢?解釋之前首先得簡單說一下linux中文件權限位的概念。在linux中文件或目錄有三者權限r,w,x,代表的含義分別是讀、寫、可執行。而一個文件或目錄的屬性中又包括所屬用戶u、所屬組g、其他o三個部分的屬性,分別表示所屬用戶、所屬組、其他用戶對這個文件所擁有的權限。看起來大概是這個樣子:

 所屬用戶   所屬組    其他

   rwx       rwx      rwx

用戶在其擁有權限的位上設置1,沒有權限的位設置0。如果將每個部分的這些權限位看成二進制數,每個部分可以用3位二進制數表示,最大值爲7(2^3-1),表示可讀、可寫、可執行。嚴格的來說,文件權限除了r、w、x以外還有setuid,setgid權限,等下再解釋。


好了,有了權限位的基礎,那麼再來看find -perm mode。mode是三個數字表示的,每個數字最大值是7(原因前面解釋過了)。

find -perm mode , 表示嚴格匹配,也就是你的文件權限位轉換成對應的十進制數字與mode一模一樣,那麼匹配成功,需要注意的是如果mode給的數字不足3位,那麼前面自動添0(嚴格的說是不足4位,原因就是前面所說的setuid,setgid,稍後解釋)


find -perm -mode , 表示mode中轉換成二進制的1在文件權限位裏面必須匹配,比如mode=644那麼轉換成二進制爲110 100 100,而被查找的文件的權限位也可以被轉換成一個二進制數,兩者在位上爲1的部分必須完全匹配,而0則不管。例如被查找的文件的權限爲轉換成二進制數是111 111 111那麼這個比如被匹配,而假如是100 100 100那麼則不會匹配。所以這個'-'的作用歸結起來就是匹配比mode權限更充足的文件(找不到什麼詞語來形容了)


find -perm +mode , 與 -mode的區別是+mode只需其中的任意一個1的部分被匹配,-mode是所有1的部分都必須被匹配,同樣+mode也不管0位。


現在來解釋setuid,setgid,setuid權限是用來使其他用戶可以“越權”執行你的命令,而本質上的實現就是在權限檢查的時候,在進程的的有效UID裏面保存了這個其他用戶的UID,所以權限得意驗證通過(在這裏的註釋1裏面很簡單的介紹了一下),這些權限用一個新的3位二進制數表示,有4,2,1三種值,4表示有setuid權限,2表示有setgid權限,1表示有粘着位(t)權限(粘着位權限最典型的例子是/tmp,每個用戶可以在裏面創建、更新、刪除自己創建(文件所屬用戶是自己)的文件,而不能更改別人的文件)。


以上是借鑑repls博主的文章,結合理解的,很實用,有興趣的可以看看

原文地址:http://blog.csdn.net/zbszhangbosen/article/details/7528680


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