掃二維碼與項目經理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流

我們提供的服務有:網站建設、成都網站建設、微信公眾號開發(fā)、網站優(yōu)化、網站認證、新沂ssl等。為上千多家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的新沂網站制作公司
Windows 系統(tǒng)中,新建的文件和目錄時通過繼承上級目錄的權限獲得的初始權限,而 Linux 不同,它是通過使用 umask 默認權限來給所有新建的文件和目錄賦予初始權限的。
那么,我們如何得知 umask 默認權限的值呢?直接通過 umask 命令即可:
[root@localhost ~]# umask
0022
#root用戶默認是0022,普通用戶默認是 0002
讀者可能會問,不應該只有 3 個數字(分別對應 3 種用戶身份)嗎,為什么有 4 個? umask 默認權限確實由 4 個八進制數組成,但第 1 個數代表的是文件所具有的特殊權限(SetUID、SetGID、Sticky BIT),此部分內容放到后續(xù)章節(jié)中講解,現(xiàn)在先不討論。也就是說,后 3 位數字 "022" 才是本節(jié)真正要用到的 umask 權限值,將其轉變?yōu)樽帜感问綖?----w--w-。
注意,雖然 umask 默認權限是用來設定文件或目錄的初始權限,但并不是直接將 umask 默認權限作為文件或目錄的初始權限,還要對其進行 "再加工"。
文件和目錄的真正初始權限,可通過以下的計算得到:
文件(或目錄)的初始權限 = 文件(或目錄)的最大默認權限 - umask權限
如果按照官方的標準算法,需要將 umask 默認權限使用二進制并經過邏輯與和邏輯非運算后,才能得到最終文件或目錄的初始權限,計算過程比較復雜,且容易出錯,因此本節(jié)給大家介紹了更簡單的計算方式。
顯然,如果想最終得到文件或目錄的初始權限值,我們還需要了解文件和目錄的最大默認權限值。在 Linux 系統(tǒng)中,文件和目錄的最大默認權限是不一樣的:
接下來,我們利用字母權限的方式計算文件或目錄的初始權限。以 umask 值為 022 為例,分別計算新建文件和目錄的初始權限:
[root@localhost ~]# umask
0022
#默認umask的值是0022
[root@localhost ~]# touch file <--新建file空文件
[root@localhost ~]# ll -d file
-rw-r--r--. 1 root root 0 Apr 18 02:36 file
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir catalog <--新建catalog目錄
[root@localhost ~]# ll -d catalog
drwxr-xr-x. 2 root root 4096 Apr 18 02:36 catalog
注意,在計算文件或目錄的初始權限時,不能直接使用最大默認權限和 umask 權限的數字形式做減法,這是不對的。例如,若 umask 默認權限的值為 033,按照數字形式計算文件的初始權限,666-033=633,但我們按照字母的形式計算會得到 (rw-rw-rw-) - (----wx-wx) = (rw-r--r--),換算成數字形式是 644。
這里的減法,其實是“遮蓋”的意思,也就是說,最大默認權限中和 umask 權限公共的部分,通過減法運算會被遮蓋掉,最終剩下的“最大默認權限”,才是最終賦予文件或目錄的初始權限。
umask 權限值可以通過如下命令直接修改:
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# umask 033
[root@localhost ~]# umask
0033
不過,這種方式修改的 umask 只是臨時有效,一旦重啟或重新登陸系統(tǒng),就會失效。如果想讓修改永久生效,則需要修改對應的環(huán)境變量配置文件 /etc/profile。例如:
[root@localhost ~]# vim /etc/profile
...省略部分內容...
if [ $UID -gt 199]&&[ "'id -gn'" = "'id -un'" ]; then
umask 002
#如果UID大于199(普通用戶),則使用此umask值
else
umask 022
#如果UID小于199(超級用戶),則使用此umask值
fi
…省略部分內容…
這是一段 Shell 腳本程序,不懂也沒關系,大家只需要知道,普通用戶的 umask 由 if 語句的第一段定義,而超級用戶 root 的 umask 值由 else 語句定義即可。 修改此文件,則 umask 值就會永久生效。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流