1. 程式人生 > >Linux命令find -perm使用方法

Linux命令find -perm使用方法

花了點時間才將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,每個使用者可以在裡面建立、更新、刪除自己建立(檔案所屬使用者是自己)的檔案,而不能更改別人的檔案)。

如果有疑問,歡迎交流~