umask值用于設定使用者在建立檔案時的預設權限,當我們在系統中建立目錄或檔案時,目錄或檔案所具有的預設權限就是由umask值決定的。
對于root使用者,系統預設的umask值是0022;對于普通使用者,系統預設的umask值是0002。執行umask指令可以檢視目前使用者的umask值。
[root@localhost ~]# umask
0022
umask值一共有4組數字,其中第1組數字用于定義特殊權限,我們一般不予考慮,與一般權限有關的是後3組數字。
預設情況下,對于目錄,使用者所能擁有的最大權限是777;對于檔案,使用者所能擁有的最大權限是目錄的最大權限去掉執行權限,即666。因為x執行權限對于目錄是必須的,沒有執行權限就無法進入目錄,而對于檔案則不必預設賦予x執行權限。
對于root使用者,他的umask值是022。當root使用者建立目錄時,預設的權限就是用最大權限777去掉相應位置的umask值權限,即對于所有者不必去掉任何權限,對于所屬組要去掉w權限,對于其他使用者也要去掉w權限,是以目錄的預設權限就是755;當root使用者建立檔案時,預設的權限則是用最大權限666去掉相應位置的umask值,即檔案的預設權限是644。
可以通過下面的測試操作來了解umask值。
[root@localhost ~]# mkdir directory1 #建立測試目錄
[root@localhost ~]# ll -d directory1 #目錄的預設權限是755
drwxr-xr-x. 2 root root 4096 12月 2 13:08 directory1
[root@localhost ~]# touch file1 #建立測試檔案
[root@localhost ~]# ll file1 #檔案的預設權限是644
-rw-r--r--. 1 root root 0 12月 2 13:09 file1
通過umask指令可以修改umask值,比如将umask值設為0077。
[root@localhost ~]# umask 0077
0077
此時建立的目錄預設權限為700,檔案預設權限是600:
[root@localhost ~]# mkdir directory2
[root@localhost ~]# ll -d directory2
drwx------. 2 root root 4096 12月 2 13:14 directory2
[root@localhost ~]# touch file2
[root@localhost ~]# ll file2
-rw-------. 1 root root 0 12月 2 13:14 file2
考慮一下,如果将umask值設為0003,那麼此時建立的目錄或檔案的預設權限是多少?
正确的結果應該是:目錄的預設權限是774,檔案的預設權限是664。在計算預設權限時,不應用最大權限直接減去umask值,而是将umask值所對應的相應位置的權限去掉,這樣才能得到正确的結果。
umask指令隻能臨時修改umask值,系統重新開機之後umask将還原成預設值。如果要永久修改umask值,需要修改/etc/profile檔案或是修改/etc/bashrc檔案,例如要将預設umask值設定為027,那麼可以在檔案中增加一行“umask 027”。
/etc/profile和/etc/bashrc都可以用于設定使用者登入系統時自動執行某些操作,他們的差別是/etc/profile隻在使用者第一次登入時被執行,而/etc/bashrc則在使用者每次登入加載Bash Shell時都會被執行。
因而,如果是修改/etc/profile檔案,将隻對新建立的使用者生效;而如果是修改/etc/bashrc檔案,則對所有使用者都生效。
本文轉自 yttitan 51CTO部落格,原文連結:http://blog.51cto.com/yttitan/1568662