天天看點

【shell,1】chmod 與find指令:

指令:

1、chmod 修改權限:

chmod指令的一般格式為: chmod [who] operator [permission] filename w h o的含義是: u   檔案屬主權限。 g   同組使用者權限。 o   其他使用者權限。 a   所有使用者(檔案屬主、同組使用者及其他使用者)。 operator的含義: +   增權重限。 -   取消權限。 =   設定權限。 permission的含義: r   讀權限。 w   寫權限。 x   執行權限。 s   檔案屬主群組s e t - I D。 t   粘性位*。 l   給檔案加鎖,使其他使用者無法通路。 u,g,o   針對檔案屬主、同組使用者及其他使用者的操作。 例: chmod a-x myfile rw- rw- rw- 收回所有使用者的執行權限 chmod og-w myfile rw- r-- r- - 收回同組使用者和其他使用者的寫權限 chmod g+w myfile rw- rw- r- - 賦予同組使用者寫權限 chmod u+x myfile rwx rw- r- - 賦予檔案屬主執行權限 chmod go+x myfile rwx rwx r- x 賦予同組使用者和其他使用者執行權限   chmod 666 rw- rw- rw- 賦予所有使用者讀和寫的權限 chmod 644 rw- r-- r- - 賦予所有檔案屬主讀和寫的權限,所有其他使用者讀權限 chmod 744 rwx r-- r- - 賦予檔案屬主讀、寫和執行的權限,所有其他使用者讀的權限 chmod 664 rw- rw- r- - 賦予檔案屬主和同組使用者讀和寫的權限,其他使用者讀權限 chmod 700 rwx --- --- 賦予檔案屬主讀、寫和執行的權限 chmod 444 r-- r-- r- - 賦予所有使用者讀權限  

2、find指令:

①、 按檔案名稱查找,使用name選項。

不管目前路徑是什麼,如果想要在自己的根目錄$HOME中查找檔案名符合* . t x t的檔案, 使用~作為pathname參數,波浪号~代表了你的$ H O M E目錄。 $ find ~ -name "*.txt" -print 想要在目前目錄及子目錄中查找所有的‘* . t x t’檔案,可以用: $ find . -name "*.txt" -print 想要的目前目錄及子目錄中查找檔案名以一個大寫字母開頭的檔案,可以用: $ find . -name "[A-Z]*" -print 想要在/ e t c目錄中查找檔案名以h o s t開頭的檔案,可以用: $ find /etc -name "host*" -print 想要查找$ H O M E目錄中的檔案,可以用: $ find ~ -name "*" -print  或find . -print 要想讓系統高負荷運作,就從根目錄開始查找所有的檔案。如果希望在系統管理者那裡 保留一個好印象的話,最好在這麼做之前考慮清楚! $ find / -name "*" -print 如果想在目前目錄查找檔案名以兩個小寫字母開頭,跟着是兩個數字,最後是* . t x t的文 件,下面的指令就能夠傳回名為a x 3 7 . t x t的檔案: $ find . -name "[a-z][a-z][0--9][0--9].txt" -print

②、按檔案權限模式來查找:使用perm選項:     

為了在目前目錄下查找檔案權限位為7 5 5的檔案,即檔案屬主可以讀、寫、執行,其他用 戶可以讀、執行的檔案,可以用: $ find . -perm 755 -print 如果希望在目前目錄下查找所有使用者都可讀、寫、執行的檔案(要小心這種情況),我們 可以使用f i n d指令的- p e r m選項。在八進制數字前面要加一個橫杠-。在下面的指令中- p e r m代 表按照檔案權限查找,而‘0 0 7’和你在c h m o d指令的絕對模式中所采用的表示法完全相同。 $ find . -perm -007 -print

③、忽略某個目錄使用-prune選項:

如果在查找檔案時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的檔案, 那麼可以使用- p r u n e選項來指出需要忽略的目錄。在使用- p r u n e選項時要當心,因為如果你同 時使用了- d e p t h選項,那麼- p r u n e選項就會被f i n d指令忽略。 如果希望在/ a p p s目錄下查找檔案,但不希望在/ a p p s / b i n目錄下查找,可以用: $ find /apps -name "/apps/bin" -prune -o -print

④、按照檔案屬主查找:使用user和nouser選項:     

如果希望按照檔案屬主查找檔案,可以給出相應的使用者名。例如,在$ H O M E目錄中查找 檔案屬主為d a v e的檔案,可以用: $ find ~ -user dave -print 在/ e t c目錄下查找檔案屬主為u u c p的檔案: $ find /etc -user uucp -print 為了查找屬主帳戶已經被删除的檔案,可以使用- n o u s e r選項。這樣就能夠找到那些屬主 在/ e t c / p a s s w d檔案中沒有有效帳戶的檔案。在使用- n o u s e r選項時,不必給出使用者名;f i n d指令 能夠為你完成相應的工作。例如,希望在/ h o m e目錄下查找所有的這類檔案,可以用: $ find /home -nouser -print

⑤、按照檔案所屬組查找,使用group和nogroup 選項:

就像u s e r和n o u s e r選項一樣,針對檔案所屬于的使用者組,f i n d指令也具有同樣的選項,為 了在/ a p p s目錄下查找屬于a c c t s使用者組的檔案,可以用: $ find /apps -group accts -print 要查找沒有有效所屬使用者組的所有檔案,可以使用n o g r o u p選項。下面的f i n d指令從檔案 系統的根目錄處查找這樣的檔案 $ fine/-nogroup-print

⑥、按照檔案類型查找使用type選項:

如果要在/etc目錄下查找所有的目錄,可以用: $ find /etc -type d -print 為了在目前目錄下查找除目錄以外的所有類型的檔案,可以用: $ find . ! -type d -print 為了在/ e t c目錄下查找所有的符号連結檔案,可以用: $ find /etc -type l -print

⑦、按照更改時間查找檔案使用-mtime選項:     

如果希望按照更改時間來查找檔案,可以使用m t i m e選項。如果系統突然沒有可用空間了, 很有可能某一個檔案的長度在此期間增長迅速,這時就可以用m t i m e選項來查找這樣的檔案。 用減号-來限定更改時間在距今n日以内的檔案,而用加号+來限定更改時間在距今n日以前的 檔案。 希望在系統根目錄下查找更改時間在5日以内的檔案,可以用: $ find / -mtime -5 -print 為了在/ v a r / a d m目錄下查找更改時間在3日以前的檔案,可以用: $ find /var/adm -mtime +3 -print

⑧、使來執行shell指令:

當比對到一些檔案以後,可能希望對其進行某些操作,這時就可以使用- e x e c選項。一旦 f i n d指令比對到了相應的檔案,就可以用- e x e c選項中的指令對其進行操作(在有些作業系統 中隻允許- e x e c選項執行諸如l s或ls -l這樣的指令)。 e x e c選項後面跟随着所要執行的指令,然後是一對兒{ },一個空格和一個\,最後是一個 分号。 為了用ls -l指令列出所比對到的檔案,可以把ls -l指令放在f i n d指令的- e x e c選項中,例如:

         find . -type f -exec ls -l {} \;      為了在/ l o g s目錄中查找更改時間在5日以前的檔案并删除它們,可以用:      $ find logs -type f -mtime +5 -exec rm {} \; ⑨、find指令和xargs的使用:似乎xargs 與exec 功能相同

下面的例子在整個系統中查找記憶體資訊轉儲檔案 (core dump),然後把結果儲存到 /tmp/core.log 檔案中: $ find . -name "core" -print | xargs echo "" >/tmp/core.log 下面的例子在/ a p p s / a u d i t目錄下查找所有使用者具有讀、寫和執行權限的檔案,并收回相應 的寫權限: $ find /apps/audit -perm -7 -print | xargs chmod o-w 在下面的例子中,我們用g r e p指令在所有的普通檔案中搜尋d e v i c e這個詞: $ find / -type f -print | xargs grep "device" 在下面的例子中,我們用g r e p指令在目前目錄下的所有普通檔案中搜尋D B O這個詞: $ find . -name \*-type f -print | xargs grep "DBO" 注意,在上面的例子中,\用來取消find指令中的*在shell中的特殊含義。