cutsky 发表于 2005-2-23 12:47:05

请教一个umask的问题

我的系统的umask=022,那么是不是我新建一个文件时该文件的默认权限就是777-022=755呢?(书上是这么说的)。我自己试了一下结果是644而不是755。
另我的vsftpd.conf中将local_umask=022,那么当我上传一个文件时,该文件的权限又该如何计算呢?我试的结果是600。恳求高手赐教。

BOoRFGOnZ 发表于 2005-2-23 12:53:40

不是减 是与

firemoth 发表于 2005-2-23 13:51:30

对文件而言,umask的最大值是666; 对目录而言,umask的最大值是777

zhy2111314 发表于 2005-2-26 14:13:41

先讓我們看看 x,r,w 的 bit 位元表示方式﹕

x: 001
w: 010
r: 100

如果將全部位元做 OR 運算就是最終 permission﹕rwx 的位置都是 111 ﹐換成十進位就是 7 了。

下面您如果輸入﹕
chmod 750 test.ls

您會發現權限會變成﹕rwxr-x---﹐至於為什麼會如此﹐不妨算算看﹕

1) 將 750 換成二進位﹐就是﹕111,101,000
2) 分別將 rwx 的位置代入得﹕rwx,r-x,---
(方法﹕1 對應著的權限就打開﹐0 對應的就關閉)

就這麼簡單 ^_^

好了﹐我們剛纔已經會得計算自己對一個檔案擁有什麼樣的權限﹐也知道如何改變檔案的權限設定。但是﹐檔案被建立的時候﹐預設會獲得怎樣的權限呢﹖這個值就要靠 umask 來決定了。如果您現在輸入 umask﹐會得到 022 的值﹐這個值決定了檔案在建立的時候﹐要拿掉什麼樣的權限。在沒有使用 umask 的時候﹐所建立的檔案都是 777 這個值的﹐但當運用了 umask 之後呢﹐目錄會變為 755﹐而檔案則為 644 。那是怎麼得出來的呢﹖還是回到二進位吧﹐然後將完整權限和 umask 進行 NOT 和 AND 運算﹐就是最後的權限值。

在建立目錄的時候﹕
1) 首先﹐我們先對 unmask 進行 NOT 運算﹕
000,010,010 的 NOT 運算結果是﹕111,101,101 ﹔
2) 然後再和 777﹐也就是﹕111,111,111 進行 AND 運算﹔
3) 最後﹐我們會得到這樣的結果﹕111,101,101 ﹔
換成十進位就是 755。

而至於檔案的建立﹕
預設會把它的 x (001) 拿掉﹐其實也是先進行 NOT + AND 運算﹕
1) 先對 x 做 NOT 運算﹕001 NOT ==> 110
2) 然後和 111 做 AND 運算﹕
111,111,111
110,110,110AND
-----------------
110,110,110      ===> 也就是 666﹐ 然後再和 umask 022 做 NOT 跟 AND 運算﹕
111,101,101AND
-----------------
110,100,100      ===> 換成十進位是 644 ﹐這才是真正的結果。

我們的 umask 值是登入的時候﹐由 shell 的 profile 分配的(一般規則是:user 與 group 同名為 022﹐否則是 002)﹐我們可以在任何時候改變這個值﹕用 umask 命令以新的值作參數就可以了﹐如﹕umask 002 ﹐然後新建立的檔案就變成 664 的權限了。
tips﹕如果您不習慣用二進位進行計算﹐只能用十進位來算的話﹐可以簡單的這樣算﹕
目錄是用 777 扣掉 umask 的值﹔
檔案是用 666 扣掉 umask 的值。

不過﹐電腦上面真正的運算是二進位啦﹐這個和我們計算 IP subnet 的時候是一樣的原理。

cutsky 发表于 2005-2-26 20:18:42

好精彩的回答啊,
让我茅塞顿开啊,谢谢了

cnhnln 发表于 2005-2-27 23:38:58


tips﹕如果您不習慣用二進位進行計算﹐只能用十進位來算的話﹐可以簡單的這樣算﹕
目錄是用 777 扣掉 umask 的值﹔
檔案是用 666 扣掉 umask 的值。

学习

tianyajinhui 发表于 2005-2-28 14:51:58

是 与非,,
666&~(uamsk的值)

xzhgch 发表于 2005-4-11 14:50:54

我的也是600 按上面的说法应该是644才对
页: [1]
查看完整版本: 请教一个umask的问题