先記下Linux下的權限可以分為
常見的
r(Read,讀取):對文件,讀取文件內容的權限;目錄來說,具有瀏覽目 錄的權限。權限值=4
w(Write,寫入):對文件而言,具有新增、修改文件內容的權限;對目錄來說,具有刪除、移動目錄內文件的權限。權限值=2
x(eXecute,執行):對文件而言,具有執行文件的權限;對目錄了來說該用戶具有進入目錄的權限。權限值=1
特殊的
s,t,i,a
Linux是通過9個權限位來控制文件,目錄權限的、分別是 所有者3位,所屬分組3位,其它(用戶組,用戶)3位、
文件默認權限基准值 rw- rw- rw- ,所有者=讀|寫,所屬分組=讀寫,其他(其他用戶,用戶組)=讀寫、
目錄默認權限基准值 rwx rwx rwx ,所有者=讀|刪除子目錄或文件|進入,所屬分組=讀|刪除子目錄或文件|進入,其他(其他用戶,用戶組)=讀|刪除子目錄或文件|進入、
在創建文件,目錄的時候,linux會通過上面的權限減去系統權限“補碼”umask,用 umask命令可以查看到具體
過 umask 查看,比如:0002;,umask -S可以查看own,group,others需要減去的具體權限是什么,比如:u=rwx,g=rwx,o=rx)
權限值計算,有教科書上講。按二進制 AND 和 NOT來計算,個人感覺能理解,但不是最能理解的方式。
甚至有些BBS論壇用 666 - umask 來算 注意:這個個是錯誤滴....
舉個栗子,假如umask=003,按照這種計算方式。
文件權限 = 666 - 003 = 663 = rw- rw- -wx,明明文件默認的other都沒有可執行權限x嘛。這兒還給算出來了個x執行權限。所以,這是絕對錯誤。切記咯、)
公式:令r,w,x 等於 1、符號“-”等於0,將文件/目錄權限基准值與umask轉換為 0,1 這種格式,將文件/目錄權限基准值按位對應相減 umask,若位的相減小於等於0,表示此位無權限,等於1表示此位有對應權限。
通過上面的公式,我們可以先得到(下面稱為文件轉換值,目錄轉換值)
文件的權限基准值(rw- rw- rw- ) 轉換為 110 110 110,對照圖如下
目錄的權限基准值(rwx rwx rwx) 轉換為 111 111 111,對照圖如下
注意:權限位是按 owner,group,others 的 rwx ,rwx,rwx 這個順序來的,不能變哦~
也就是說的,是按照 所有者的r,w,x;所屬分組的r,w,x;其他組/用戶的r,w,x這個順序來的~
舉個栗子
問題:某用戶umask = 002;請問,該用戶創建的文件/目錄的默認權限分別是什么?
解答:
首先,將 umask = --- --- -w-,按照公式轉換為 000 000 010
那么文件的默認權限值公式2,按位相減,計算如下步驟如下。
文件的默認權限值 = 文件默認權限基准值 (rw- rw- rw-) 減去 UMASK權限位值 = 文件轉換值 減去 UMASK轉換值
= rw- rw- rw- 減 --- --- -w-
= 110 110 110 - 000 000 010
轉換下
110 110 110
— 000 000 010
-------------------------------------------------------
= 110 110 100 —> 轉為權限位就是 rw- rw- r--
目錄的默認權限值 = 目錄默認權限基准值 (rwx rwx rwx) 減去 UMASK權限位值 = 目錄轉換值 減去 UMASK轉換值
= rwx rwx rwx 減 --- --- -w-
= 111 111 111 - 000 000 010
轉換下
111 111 111
— 000 000 010
-------------------------------------------------------
= 111 111 101 —> 轉為權限位就是 rwx rwx r-x
其實上面的公式有點點繞了。總結為一句話就是:“設rwx為1,-為0,按位xor,對應位值等於0,此位對應無權限,等於1,有權限;或按位相減,對應位值小於,等於0,此位對應無權限,等於1,有權限”
Okay,下面我們來測試下結果~
資料參考:
鳥哥的Linux私房菜(基礎篇,第三版:182頁~)
Linux中的幾種權限:http://blog.chinaunix.net/uid-16728139-id-3315846.html