umask:設定所建立檔案或目錄的預設權限
umask值是個掩碼,它會屏蔽掉不想授予該安全級别的權限,建立檔案或目錄時,需要将umask值從對象的全權限中減掉,對檔案來說,全權限的值是666(所有使用者都有讀和寫的權限);對目錄來說,全權限值則是777(所有使用者都有讀、寫和可執行權限)。
如何通過umask值計算建立檔案的預設權限?
計算方法:(檔案或目錄的全權限) & ~(umask值)
舉例:建立一個檔案test.c,umask值為0033
檔案的全權限為666,是以最終檔案的權限為(110110110) & ~(000011011) = 110100100,對應三字元的編碼為-rw-r--r--,代表檔案屬主具有可讀可寫權限,屬組可讀,其他使用者可讀。
在大多數Linux發行版中,umask值通常會設定在/etc/profile啟動檔案中,也有一些是設定在/etc/login.defs檔案中(如Ubuntu),也可以在任何一個終端使用指令umask設定指定一個新的掩碼值,但設定僅在該終端有效,關閉終端後,umask恢複為之前的預設值。
如何讓umask設定永久有效?
1、有root權限,直接修改啟動檔案/etc/profile中或/etc/login.defs的umask設定。
2、無root權限,以bash shell為例,其他shell也有對應的啟動檔案,首先确認$HOME目錄下的啟動檔案,通常可能存在$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile檔案中一兩種,shell會按照下列順序,運作第一個被找到的檔案,餘下的則被忽略:
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
例如,$HOME下僅有$HOME/.profile檔案,打開$HOME/.profile檔案,通常會這個檔案中會運作$HOME/.bashrc,是以在.bashrc中加入指令“umask 掩碼值”,建議在檔案的最後加上此指令,以防止指令被後面的同指令覆寫。
【建議】:如果工作涉及到使用linux伺服器,建議使用umask将建立檔案或目錄的預設權限修改為适當的值如033等。
參考:
1、http://c.biancheng.net/view/764.html
2、https://man7.org/linux/man-pages/man2/umask.2.html
3、《linux指令行與shell腳本程式設計大全》第3版