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三個部分的屬性,分別表示所屬用戶、所屬組、其他用戶對這個文件所擁有的權限。看起來大概是這個樣子:  www.2cto.com  
 所屬用戶   所屬組    其他
   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位。  www.2cto.com  
 
現在來解釋setuid,setgid,setuid權限是用來使其他用戶可以“越權”執行你的命令,而本質上的實現就是在權限檢查的時候,在進程的的有效UID里面保存了這個其他用戶的UID,所以權限得意驗證通過(在這里的 http://www.2cto.com/os/201205/130111. html 注釋1里面很簡單的介紹了一下),這些權限用一個新的3位二進制數表示,有4,2,1三種值,4表示有setuid權限,2表示有setgid權限,1表示有粘着位(t)權限(粘着位權限最典型的例子是/tmp,每個用戶可以在里面創建、更新、刪除自己創建(文件所屬用戶是自己)的文件,而不能更改別人的文件)。如果有疑問,歡迎交流~
 
參考文章:
1. http://bbs.chinaunix.net/thread-442733-1-1.html
 
 
 
摘自 ICER-REPLS' BLOG


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM