當建立一個檔案的時候,系統儲存了有關該檔案的全部資訊,包括:
• 檔案的位置。
• 檔案類型。
• 檔案長度。
• 哪位使用者擁有該檔案,哪些使用者可以訪問該檔案。
• i節點。
• 檔案的修改時間。
• 檔案的許可權位。
讓我們用touch命令建立一個檔案:
建立了一個空檔案,現在用ls -l命令查看該目錄下檔案的屬性(我這裡用中文版):
如下:
代碼: |
[root@Linux_chenwy temp]# ls -l 總用量 36 -rw-r--r-- 1 root root 34890 10月 19 20:17 httpd.conf -rw-r--r-- 1 root root 0 10月 19 20:16 temp |
代碼: |
總用量 36:是ls所列出的入口佔用空間的位元組數(以K為單位)。 1該檔案永久連結的數目。 root檔案的屬主。 root檔案的屬主r o o t所在的預設組(也叫做r o o t )。 34890用位元組來表示的檔案長度,記住,不是K位元組! 10月 19 20:17檔案的更新時間。 temp or httd.conf 檔案名稱。 |
sunsroad 寫到: |
BTW:要檢查該目錄所有檔案佔用的空間應該用這個命令:du。 譬如說前面說的36是如何計算出來: 首先我們要先瞭解你所用的檔案系統的IO BLOCK(中文叫作簇)為多少,在你所使用的這個檔案系統的IO BLOCK大小是4096 Bytes。 他意義是檔案系統最小的讀寫及分配單位,每次讀寫操作你都不能小於這個尺寸。即使你的檔案是只有一個位元組。而且檔案在硬碟上的儲存也是以這個為單位,就是說如果檔案尺寸小於這個值,那麼它在磁碟上佔用的空間就是4096位元組。 佔用空間的具體演算法是:(進一(檔案尺寸/4096))×4096。根據這個你就可以計算出你所列舉的例子中的檔案的空間使用狀況:34890除以4096,大約等於8.5,進一法取得為9,就是說檔案在磁碟上佔用了9個BLOCk,每個BLOCK為4K,所以這兩個檔案佔用的空間就是36K。 這個規則也適合於目錄,不過不會出現為0的目錄,即使是空目錄 |
-rw-r--r-- :這是該檔案的許可權位。
第一個橫杠:指定檔案類型,表示該檔案是一個普通檔案。(所建立的檔案絕大多數都是普通檔案或符號連結檔案)。
除去最前面的橫杠,一共是9個字元,他們分別對應9個許可權位。通過這些許可權位,可以設定使用者對檔案的存取權限。對這兩個檔案的精確解釋是:
代碼: |
rw-:前三位,檔案屬主可讀、寫 r--:中間三位,同組使用者可讀 r--:最後三位,其他使用者只可讀 |
temp在建立的時候並未給屬主賦予執行許可權,在使用者建立檔案時,系統不會自動地設定執行許可權位。這是出於加強系統安全的考慮
BTW:檔案的屬主組並非是檔案所有者所在的預設組,而可以是任何一個跟該檔案所有者無關的使用者組
檔案類型
前面提到的第一條橫杠,表示該檔案是普通檔案型
檔案類型有七種,它可以從ls -l命令所列出的結果的第一位看出.
七種類型:
代碼: |
d 目錄。 l 符號連結(指向另一個檔案)。 s 通訊端檔案。 b 塊裝置檔案。 c 字元裝置檔案。 p 具名管道檔案。 - 普通檔案,或者更準確地說,不屬於以上幾種類型的檔案。 |
檔案的許可權位中中每一組字元中含有三個許可權位:
代碼: |
r 讀許可權 w 寫/更改許可權 x 執行該指令碼或程式的許可權 |
如:
代碼: |
r-- --- --- 文檔案屬主可讀,但不能寫或執行 r-- r-- --- 文檔案屬主和同組使用者(一般來說,是檔案屬主所在的預設組)可讀 r-- r-- r- - 文任何使用者都可讀,但不能寫或執行 rwx r-- r- - 文檔案屬主可讀、寫、執行,同組使用者和其他使用者只可讀 rwx r-x --- 文檔案屬主可讀、寫、執行,同組使用者可讀、執 rwx r-x r- x 文檔案屬主可讀、寫、執行,同組使用者和其他使用者可讀、執行 rw- rw- --- 文檔案屬主和同組使用者可讀、寫 rw- rw- r- - 文檔案屬主和同組使用者可讀、寫,其他使用者可讀 rw- rw- --- 文檔案屬主和同組使用者及其他使用者讀可以讀、寫,慎用這種許可權 設定,因為任何使用者都可以寫入該檔案 |
sunsroad 寫到: |
檔案的所有者組並非是檔案所有者所在的預設組,而可以是任何一個跟該檔案所有者無關的使用者組。 |
使用chmod來改變許可權位
這一命令有符號模式和絕對模式。
符號模式
chmod命令的一般格式為:
chmod [who] operator [permission] filename
w h o的含義是:
代碼: |
u 檔案屬主許可權。 g 同組使用者權限。 o 其他使用者權限。 a 所有使用者(檔案屬主、同組使用者及其他使用者)。 |
o p e r a t o r的含義:
代碼: |
+ 增加許可權。 - 取消許可權。 = 設定許可權。 |
p e r m i s s i o n的含義:
代碼: |
r 讀許可權。 w 寫入權限。 x 執行許可權。 s 檔案屬主和組set-ID。 t 粘性位*。 l 給檔案加鎖,使其他使用者無法訪問。 u,g,o 針對檔案屬主、同組使用者及其他使用者的操作。 *在列檔案或目錄時,有時會遇到“ t”位。“t”代表了粘性位。如果在一個目錄上出現“t”位,這就意味著該目錄中的檔案只有其屬主才可以刪除,即使某個同組使用者具有和屬主同等的許可權。不過有的系統在這一規則上並不十分嚴格。 如果在檔案清單時看到“ t”,那麼這就意味著該指令碼或程式在執行時會被放在交換區(虛存)。 |
對"t"還沒弄清楚這是"sunsroad"的解釋:
sunsroad 寫到: |
"t"許可權用在檔案上面是沒有意義的,不是什麼在交換區的概念,它跟檔案的執行沒有關係,而主要是為了檔案分享權限設定設定的。 |
例如
代碼: |
chmod a-x temp //rw- rw- rw- 收回所有使用者的執行許可權 chmod og-w temp //rw- r-- r- - 收回同組使用者和其他使用者的寫入權限 chmod g+w temp //rw- rw- r- - 賦予同組使用者寫入權限 chmod u+x temp //rwx rw- r- - 賦予檔案屬主執行許可權 chmod go+x temp //rwx rwx r- x 賦予同組使用者和其他使用者執行許可權 |
舉如
當建立temp檔案時,它具有這樣的許可權:
代碼: |
-rw-r--r-- 1 root root 0 10月 19 20:16 temp |
如果要使屬主和同組使用者具有有執行許可權,並取消其他使用者(所有其他使用者)的寫入權限,可以用:
代碼: |
$ chmod ug+x temp $ chmod o-w temp |
這樣,該檔案的許可權變為:
代碼: |
-rwxr--r-- 1 root root 0 10月 19 20:16 temp |
現在已經使檔案屬主對temp檔案具有讀、寫執行的許可權,同組使用者真有讀寫權限,其它使用者沒有許可權了。
絕對模式
chm d命令絕對模式的一般形式為:
chmod [mode] file
其中m o d e是一個八位元。
在絕對模式中,許可權部分有著不同的含義。每一個許可權位用一個八位元來代表,如
代碼: |
0 4 0 0 檔案屬主可讀 0 2 0 0 檔案屬主可寫 0 1 0 0 檔案屬主可執行 0 0 4 0 同組使用者可讀 0 0 2 0 同組使用者可寫 0 0 1 0 同組使用者可執行 0 0 0 4 其他使用者可讀 0 0 0 2 其他使用者可寫 0 0 0 1 其他使用者可執行 |
在設定許可權的時候,只需按照上面查出與檔案屬主、同組使用者和其他使用者所具有的許可權相對應的數字,並把它們加起來,就是相應的許可權表示。
可以看出,檔案屬主、同組使用者和其他使用者分別所能夠具有的最大許可權值就是7。
再來看看前面舉的例子:
代碼: |
-rwxr--r-- 1 root 0 10月 19 20:16 temp |
相應的許可權是:
代碼: |
rwx-:0400 + 0200 +0100 (檔案屬主可讀、寫、執行) = 0 7 0 0 r--:0 0 4 0 (同組使用者可讀) = 0 0 4 0 r--:0 0 4 0 (同組使用者可讀) = 0 0 4 0 0 7 4 4 |
有一個計算八進位許可權表示的更好辦法,如下:
代碼: |
檔案屬主:r w x:4 + 2 + 1 同組使用者:r w x:4 + 2 + 1 其他使用者:r w x:4 + 2 + 1 |
這上面這相,更容易地計算出相應的許可權值,只要分別針對檔案屬主、同組使用者和其他使用者把相應許可權下面的數字加在一起就可以了。
temp檔案具有這樣的許可權:
代碼: |
r w x r - - r - - 4+2+1 4 4 |
把相應許可權位所對應的值加在一起,就是7 4 4。
如:
代碼: |
chmod 666 rw- rw- rw- 賦予所有使用者讀和寫的許可權 chmod 644 rw- r-- r- - 賦予所有檔案屬主讀和寫的許可權,所有其他使用者讀許可權 chmod 744 rwx r-- r- - 賦予檔案屬主讀、寫和執行的許可權,所有其他使用者讀的許可權 chmod 664 rw- rw- r- - 賦予檔案屬主和同組使用者讀和寫的許可權,其他使用者讀許可權 chmod 700 rwx --- --- 賦予檔案屬主讀、寫和執行的許可權 chmod 444 r-- r-- r- - 賦予所有使用者讀許可權 |
下面舉一個例子,假定有一個名為temp的檔案,具有如下許可權:
代碼: |
-rw-rw-r-- 1 root 0 10月 19 20:16 test1 |
現在希望對該檔案可讀、寫和執行, root組使用者對該檔案唯讀,可以鍵入:
代碼: |
$chmod 740 test1 $ls -l -rwxr----- 1 root 0 10月 19 20:16 test1 |
如果檔案可讀、寫和執行,對其他所有使用者唯讀,用:
代碼: |
$chmod 744 test1 $ls -l -rwxr--r-- 1 root 0 10月 19 20:16 test1 |
如果希望一次設定目錄下所有檔案的許可權,可以用:
代碼: |
$chmod 664* $ls -l -rw-r--r-- 1 root 0 10月 19 20:16 test1 |
這將使檔案屬主和同組使用者都具有讀和寫的許可權,其他使用者只具有讀許可權。
還可以通過使用- R選項連同子目錄下的檔案一起設定:
這樣就可以一次將/ temp目錄下的所有檔案連同各個子目錄下的檔案的許可權全部設定為檔案屬主和同組使用者可讀和寫,其他使用者唯讀。使用- R選項一定要謹慎,只有在需要改變分類樹下全部檔案許可權時才可以使用。
目錄
目錄的許可權位和檔案有所不同。目錄的讀許可權位意味著可以列出其中的內容。寫入權限位意味著可以在該目錄中建立檔案,如果不希望其他使用者在你的目錄中建立檔案,可以取消相應的寫入權限位。執行許可權位則意味著搜尋和訪問該目錄.
代碼: |
r :可以列出該目錄中的檔案 w:可以在該目錄中建立或刪除檔案 x:可以搜尋或進入該目錄 |
許可權檔案屬主同組使用者其他使用者
代碼: |
drwx rwx r- x ( 775 ) 屬主讀、寫、執行,同組讀、寫、執行,其它組讀、執行 drwx r-x r- - ( 754 ) 屬主讀、寫、執行,同組讀、執行,其它組讀 drwx r-x r- x ( 755 ) 屬主讀、寫、執行,同組讀、執行,其它組讀、執行 |
如果把同組使用者或其他使用者針對某一目錄的使用權限設定為- - x,那麼他們將無法列出該目錄中的檔案。如果該目錄中有一個執行位置位的指令碼或程式,只要使用者知道它的路徑和檔案名稱,仍然可以執行它。使用者不能夠進入該目錄並不妨礙他的執行。
目錄的許可權將會覆蓋該目錄中檔案的許可權。例如,如果目錄temp具有如下的許可權:
代碼: |
drwxr--r-- 1 admin 0 10月 19 20:16 temp |
而目錄下的檔案myfile的許可權為:
代碼: |
-rwxrwxrwx 1 admin 0 10月 19 20:16 myfile |
那麼admin組的使用者將無法編輯該檔案,因為它所屬的目錄不具有這樣的許可權。
該檔案對任何使用者都可讀,但由於它所在的目錄並未給admin組的使用者賦予執行許可權,所以該組的使用者都將無法訪問該目錄,他們將會得到“訪問受限”的錯誤訊息。