linux中的umask命令


轉載:http://blog.51cto.com/1123697506/882064

一 權限掩碼umask


umask是chmod配套的,總共為4位(gid/uid,屬主,組權,其它用戶的權限),不過通常用到的是后3個,例如你用chmod 755 file(此時這文件的權限是屬主讀(4)+寫(2)+執行(1),同組的和其它用戶有讀寫權限)

二 umask的作用

默認情況下的umask值是022(可以用umask命令查看),此時你建立的文件默認權限是644(6-0,6-2,6-2),建立的目錄的默認權限是755(7-0,7-2,7-2),可以用ls -l驗證一下哦 現在應該知道umask的用途了吧,它是為了控制默認權限,不要使默認的文件和目錄具有全權而設的
三 修改umask值

知道了umask的作用后,你可以修改umask的值了,例如:umask 024則以后建立的文件和目錄的默認權限就為642,753了

四 將umask值保存到環境文件

若要長期修改umask的值,可以把它寫進/etc/profile或~/.profile或~/.bash_profile中,大家應該知道這幾個文件是干什么用的吧。

您知道當你建立一個新的檔案或目錄時,他的預設屬性會是什么嗎?呵呵!那就與 umask 有關了!那么 umask 是在搞什么呢?基本上, umask 就是指定『目前使用者在建立檔案或目錄時候的屬性默認值』,那么如何得知或設定 umask 呢?他的指定條件以底下的方式來指定:語法:

[root @test root]# umask
0022
[root@vbird test]# umask 002 <==后面接 3 個數字!
[root@vbird test]# umask
0002

說明:查看 umask 數值為直接輸入 umask 即可,而設定呢?沒錯!就是 umask 之后接三個數字!那么如何來指定呢?主要還是跟 Linux 的檔案屬性(那九個屬性, r, w, x )有關的,而且是以分數的那一個關系為例的,而有底下的規則為輔:

若使用者建立為『檔案』則預設『沒有可執行 ( x ) 項目』,亦即只有 rw 這兩個項目,也就是最大為 666 分

–rw-rw-rw-

若使用者建立為『目錄』,則由於 x 與是否可以進入此目錄有關,因此預設為所有權限均開放,亦即為 777 分

drwxrwxrwx
 
那么 umask 指定的是『該默認值需要減掉的權限!』因為 r、w、x 分別是 4、2、1 分,所以啰!也就是說,當要拿掉能寫的權限,就是輸入 2 分,而如果要拿掉能讀的權限,也就是 4 分,那么要拿掉讀與寫的權限,也就是 6 分,而要拿掉執行與寫入的權限,也就是 3 分,這樣了解嗎?請問您, 5 分是什么?呵呵!就是讀與執行的權限啦!如果以上面的例子來說明的話,因為 umask 為 002 ,所以 user, group 並沒有被拿掉屬性,不過 others 的屬性被拿掉了 2 ( 也就是 w 這個屬性 ),那么由於當使用者:
 
建立檔案時:(-rw-rw-rw-) – (——–w-) ==> -rw-rw-r–
建立目錄時:(drwxrwxrwx) – (——–w-) ==> drwxrwxr-x
 
不相信嗎?你只要使用 touch test 然后看看這個 test 的檔案屬性,就可以知道了!那么如何看你這個使用者目前的 umask呢?直接下達 umask 即可!實作看看先:
 
[root@vbird test]# umask
0002
[root@vbird test]# touch test1
[root@vbird test]# mkdir test2
[root@vbird test]# ls -l
-rw-rw-r– 1 root root 0 Oct 22 00:00 test1
drwxrwxr-x 2 root root 4096 Oct 22 00:00 test2/

發現了什么?呵呵! Test1 的屬性為 666-002 = 664 !正確嗎?是的!正確!而 test2 這個目錄呢?就是 777-002 = 775 !也正確!

[root@vbird test]# umask 003
[root@vbird test]# touch test3
[root@vbird test]# mkdir test4
[root@vbird test]# ll
-rw-rw-r– 1 root root 0 Oct 22 00:03 test3
drwxrwxr– 2 root root 4096 Oct 22 00:03 test4/

嘿!屬性又跟剛剛的不一樣啰!仔細推敲一下為什么呦!test3 666-003 =663,這是怎么一回事?! 663 應該是 -rw-rw–wx 才對啊!怎么會是上面的屬性!呵呵!這里就要特別的給他強調了!『盡量不要以數字相加減啦!』容易造成類似上面的問題!你應該要這樣想(-rw-rw- rw-) – (——–wx)=-rw-rw-r–這樣就對啦!了解了嗎?不要用十進制的數字喔!夠能力的話,用二進制來算,不曉得的話,用 rwx 來算喔!

由上面的例子您應該很輕易的就可以發現 umask 的用途!而這個 umask 可以在 /etc/bashrc 里面進行修改喔!預設的情況之下, root 的 umask 為 022 而一般使用者則為 002 ,因為可寫的權限蠻嚴重的,因此預設都會拿掉這個權限!此外,因為 root 比較重要!所以為了安全的需求,其同群組的寫入屬性就被拿掉了!這東西對於安全性也有一定程度的貢獻呦!

-------------------------------------------------------------------------------------------------------------------------------------------

注意,如果是以"umask -S 權限符號"的形式來設置權限掩碼

最終創建的權限就是權限符號參數所代表的含義

例如,

 

輸入"umask u=,g=w,o=rwx"后,掩碼顯示為750.

在創建文件時,根據掩碼來設置真實的權限, 公式為a=rwx - umask.

即rw-/rw-/rw-(666)   -   rwx/r-x/---(750)   =   ---/-w-/rw-(最終權限)

(目錄同理)

參考文章:https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

-------------------------------------------------------------------------------------------------------------------------------------------

使用mkdir命令遞歸創建目錄時的權限分配問題:

由上圖可以清楚地看到, 遞歸創建時指定的權限只對最底層目錄生效,而上級目錄都是默認權限.

而且-pvm書寫時m寫在最后面, 這樣才不會發生參數錯誤.


免責聲明!

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



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