|
Linux文件的属性:
zhyfly: ~/sixiang$ ls -all
total 54
[code:1]drwxr-xr-x 2 zhyfly zhyfly 192 2005-03-03 11:31 .
drwxr-xr-x 36 zhyfly zhyfly 1976 2005-03-08 16:20 ..
-rw-r--r-- 1 zhyfly zhyfly 5186 2005-02-28 13:03 1
-rw-r--r-- 1 zhyfly zhyfly 4819 2005-02-28 13:04 2
-rw-r--r-- 1 zhyfly zhyfly 5096 2005-02-28 13:05 3
-rw-r--r-- 1 zhyfly zhyfly 18923 2005-02-28 13:41 4
-rw-r--r-- 1 zhyfly zhyfly 3120 2005-02-28 13:43 5
-rw-r--r-- 1 zhyfly zhyfly 1411 2005-02-28 13:43 6
[/code:1]
其中:
[code:1]total 54[/code:1]
总用量 54:是ls所列出的入口占用空间的字节数(以K为单位)。
[code:1]-rw-r--r--[/code:1]
该文件的权限位
第一个横杠:指定文件类型,表示该文件是一个普通文件。(所创建的文件绝大多数都是普通文件或符号链接文件)。
补充:
[code:1]-rwxrw-r-- 1 root admin 34890 10月 19 20:17 httpd.conf[/code:1]
1.文件类型:
文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出.
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
2.文件权限:
前三位:rwx:它的所有者是root,即就是文件所有者,它对httpd.conf这个文件的权限是读写执行;
中间三位:rw-:表示admin组对这个文件的权限是读写
后面位:r--:就是即不是所有者,也不是属组的对文件的权限是读
3.umask及文件权限:
先讓我們看看 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,110 AND
-----------------
110,110,110 ===> 也就是 666﹐ 然後再和 umask 022 做 NOT 跟 AND 運算﹕
111,101,101 AND
-----------------
110,100,100 ===> 換成十進位是 644 ﹐這才是真正的結果。
我們的 umask 值是登入的時候﹐由 shell 的 profile 分配的(一般規則是:user 與 group 同名為 022﹐否則是 002)﹐我們可以在任何時候改變這個值﹕用 umask 命令以新的值作參數就可以了﹐如﹕umask 002 ﹐然後新建立的檔案就變成 664 的權限了。
tips﹕如果您不習慣用二進位進行計算﹐只能用十進位來算的話﹐可以簡單的這樣算﹕
目錄是用 777 扣掉 umask 的值﹔
檔案是用 666 扣掉 umask 的值。
不過﹐電腦上面真正的運算是二進位啦﹐這個和我們計算 IP subnet 的時候是一樣的原理。
查看umask的值:
[code:1]zhyfly: ~/1$ umask
0022[/code:1]
修改umask的值:
[code:1]zhyfly: ~/1$ umask 0002
zhyfly: ~/1$ umask
0002[/code:1]
彻底修改umask的值应修改.profile文件(bash)或.login文件(c shell) |
|