farmer-logo.gif (14959 bytes) cshell-logo.gif (19625 bytes)
ch-3.gif (10141 bytes)
main-b.gif (271 bytes)
 

 

3-8-1 umask 指令

umask (顯示設定值)
umask nnn (設定umask,設定值為000~777的整數)

umask 指令的功能是用來“限定”每一個新增的檔案或者是目錄的基本使用權限(permission)。譬如說當使用者以編輯器新產生的檔案,或者從系統的某處拷貝來的新檔案,或以輸出重導向的方式產生的新檔案,或者以指令 mkdir 新建的目錄等等,一切新產生的檔案、目錄它們的最初使用權限,均由來自於這個內建指令 umask 的設定值。假如使用者想要顯示 umask 的設定值,可鍵入指令 umask,設定值即會顯示出:

% umask
22

以上所顯示的設定值“22”即代表“022”。因第一個數字為“0”時不顯示。假如顯示值為“2”則代表“002”,顯示值為“0”則代表“000”。一般系統的常用的設定值有“002”、“022”、“037”或“077”等幾種。

指令 umask 的設定值以三個八進位的數字“nnn”代表。數字的範圍自 000 到 777。第一個設定數字給使用者(user),第二個則是設定給用使用者所屬的群體(group),第三個給不屬於同群體的其它使用者(other)。 nnn 所代表的意義與 chmod 指令的 nnn 相似。不同的是 chmod 指令 nnn 是“給於”使用許可權限,而 umask 則是“取消”nnn 的使用許可權限。“限定值”對檔案而言最大到 666,也就相當於三者的權限均為可讀取、可寫,但不能執行。目錄則到 777,即是三者均可讀、寫,執行。現在你應該清楚為什麼一個新編輯完成的 C Shell 程式,還要用指令 chmod 來加上可執行使用權限才能執行的原因了吧!

你所設定的 umask 的設定值雖然只有一個,但是,事實上這個設定值對於目錄及檔案卻有著不同的作用,關於這一點請你特別注意。

設定值的計算方採用的是 XOR 的方法。就是你的設定值與檔案的“666”或目錄的“777”來做 XOR 計算所得的結果便是使用權限。以下我們分別以檔案及目錄為例子用表格來做說明:

檔案權限的最大值

運算 設定值 結果 代表的使用權限
666 XOR 002 664 rw-rw-r--
666 XOR 022 644 rw-r--r--
666 XOR 037 640 rw-r-----
666 XOR 077 600 rw-------

目錄權限的最大值

運算 設定值 結果 代表的使用權限
777 XOR 002 775 rwxrwxr-x
777 XOR 022 755 rwxr-xr-x
777 XOR 037 740 rwxr-----
777 XOR 077 700 rwx------

如果你不喜歡計算的話,以下提供你一個表格,直接對照設定值與檔案及目錄的使用權限的關係,見下表:

umask
設定值

檔案
使用許可權

目錄
使用許可權

0

rw-

rwx

1

rw-

rw-

2

r--

r-x

3

r--

r--

4

-w-

-wx

5

-w-

r--

6

---

--x

7

---

---

接著我們實際來設定指令並觀看其使用結果:

5 % umask 022 ; umask
22
6 % ls -l > aa ; ls -l aa
1 -rw-r--r-- 1 akira 61 Aug 31 11:32 aa
7 % mkdir dd ; ls -l
total 2
1 -rw-r--r-- 1 akira 61 Aug 31 11:32 aa
1 drwxr-xr-x 2 akira 512 Aug 31 11:33 dd/

一般而言如果使用者要自行設定或更改這個指令的設定值,最好的方式是將這個指令放在“~/.cshrc”檔案中,讓 C Shell 來為你執行。如果 login 後還有須要更動,可直接在指令行模式下鍵入指令重新設定之。如果使用者不自行設定則系統會給於系統的設定值,一般均為“022”。


mail.gif (2925 bytes)

b-line.gif (2092 bytes)