Linux—umask(創建文件時的掩碼)用法詳解

umask 基本用法

  在 Linux 系統中,我們創建一個新的文件或者目錄的時候,這些新的文件或目錄都會有默認的訪問權限,umask 命令與文件和目錄的默認訪問權限有關。若用戶創建一個文件,則文件的默認訪問權限爲 -rw-rw-rw-,創建目錄的默認權限 drwxrwxrwx ,而 umask 值則表明了需要從默認權限中去掉哪些權限來成爲最終的默認權限值。

umask [-p] -S [mode]

  umask 指定用戶創建文件時的掩碼,其中的 mode 和 chmod 的命令中的格式一樣。如果不用 mode 參數,則顯示當前的 umask 設置。如果用 -S 參數,則以符號形式顯示設置

$ umask
0022 	(第一個 0 表示是 8 進制,後面的三位數字用 8 進製表示)
$ umask -S
u=rwx,g=rx,o=rx

  比如該用戶 touchgedit 創建一個文件,則其默認權限爲 -rw-r-r–,如果該用戶創建一個可執行文件(比如編譯生成的程序),則其默認權限爲 -rwxr-xr-x。也就是說,由於 umask 的設定,創建的文件默認是不具有 gw 權限和 ow 權限的,除非用 chmod 更改權限。

umask 原理解析

  umask 默認值一般都是 0002,其中第一個 0 與特殊權限有關,可以暫時不用理會,後三位 002 則與普通權限(rwx)有關,其中 002 中第一個 0 與用戶(user)權限有關,表示從用戶權限減 0,也就是權限不變,所以文件的創建者的權限是默認權限(rw),第二個 0 與組權限(group)有關,表示從組的權限減 0,所以羣組的權限也保持默認權限(rw),最後一位 2 則與系統中其他用戶(others)的權限有關,由於 w=2,所以需要從其他用戶默認權限(rw)減去 2,也就是去掉寫( w )權限,則其他人的權限爲 rw - w = r,則創建文件的最終默認權限爲 -rw-rw-r–

  touch 創建一個文件,創建的文件默認權限(mode)爲 rw-rw-rw-,用數字表示也就是 0666,這個默認的 mode 的值要與 umask取反值按位與的出來的值纔是文件的權限的值;也就是 mode 的值減去 umask 的值,得出來的值,我們來看一下計算過程。

在這裏插入圖片描述

更改 umask 值

  可以通過命令 umask 值 的方式來更改 umask 值,比如我要把 umask 值改爲 022,則使用命令 umask 022 即可。改成 022 後,用戶權限不變,羣組權限減掉 2,也就是去掉寫(w)權限,其他用戶減 2,也就是去掉寫權限(w)。

$ umask 022
$ umask
$ touch test.txt
$ ls -l test.txt
-rw-r--r-- 1 name name 0 5月  24 20:49 test.txt
$ mkdir test
$ ls -al test
總用量 8
drwxr-xr-x  2 name  name    4096 5月  24 20:49 .
drwxrwxr-x 52 name  name    4096 5月  24 20:49 ..

  可以看到文件的默認訪問權限變爲了 -rw-r-----,目錄 test 的默認訪問權限變爲了 drwxr-x—這種方式並不能永久改變 umask 值,只是改變了當前會話的 umask 值,打開一個新的 terminal 輸入 umask 命令,可以看到 umask 值仍是默認的 002。要想永久改變 umask 值,則可以修改文件 /etc/bashrc,在文件中添加一行 umask 022

總結

  所以當我們想改變創建文件和目錄時的默認訪問權限,則可以通過 umask 命令來實現,省去了用 chmod 修改權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章