初識 Linux 文件許可權
在 Linux 中最基本的任務之一就是設置文件許可權。理解它們是如何實現的是你進入 Linux 世界的第一步。如您所料,這一基本操作在類 UNIX 操作系統中大同小異。實際上,Linux 文件許可權系統就直接取自於 UNIX 文件許可權(甚至使用許多相同的工具)。
但不要以為理解文件許可權需要長時間的學習。事實上會很簡單,讓我們一起來看看你需要了解哪些內容以及如何使用它們。
基礎概念
你要明白的第一件事是文件許可權可以用來幹什麼。當你設置一個分組的許可權時發生了什麼?讓我們將其展開來說,這個概念就真的簡單多了。那到底什麼是許可權?什麼是分組呢?
你可以設置的3種許可權:
- 讀 — 允許該分組讀文件(用
r
表示) - 寫 — 允許該分組寫文件(用
w
表示) - 執行 — 允許該分組執行(運行)文件(用
x
表示)
為了更好地解釋這如何應用於一個分組,例如,你允許一個分組可以讀寫一個文件,但不能執行。或者,你可以允許一個分組讀和執行一個文件,但不能寫。甚至你可以允許一個分組有讀、寫、執行全部的許可權,也可以刪除全部許可權來去除該組的許可權。
現在,什麼是分組呢,有以下4個:
- user — 文件實際的擁有者
- group — 用戶所在的用戶組
- others — 用戶組外的其他用戶
- all — 所有用戶
大多數情況,你只會對前3組進行操作,all
這一組只是作為快捷方式(稍後我會解釋)。
到目前為止很簡單,對吧?接下來我們將深入一層。
如果你打開一個終端並運行命令 ls -l
,你將會看到逐行列出當前工作目錄下所有的文件和文件夾的列表(如圖)
你會留意到最左邊那列是像是 -rw-rw-r--
這樣的。
實際上這列表應該這樣看:
rw- rw- r--
正如你所見,列表將其分為如下3部分:
- rw-
- rw-
- r--
許可權和組的順序都很重要,順序總是:
- 所屬者 所屬組 其他人 — 分組
- 讀 寫 執行 — 許可權
在我們上面示例的許可權列表中,所屬者擁有讀/寫許可權,所屬組擁有讀/寫許可權,其他人用戶僅擁有讀許可權。這些分組中賦予執行許可權的話,就用一個 x 表示。
等效數值
接下來我們讓它更複雜一些,每個許可權都可以用一個數字表示。這些數字是:
- 讀 — 4
- 寫 — 2
- 執行— 1
數值代替不是一個一個的替換,你不能像這樣:
-42-42-4--
你該把每個分組的數值相加,給用戶讀和寫許可權,你該用 4 + 2 得到 6。給用戶組相同的許可權,也是使用相同的數值。假如你只想給其他用戶讀的許可權,那就設置它為4。現在用數值表示為:
664
如果你想給一個文件664許可權,你可以使用 chmod
命令,如:
chmod 664 FILENAME
FILENAME 處為文件名。
更改許可權
既然你已經理解了文件許可權,那是時候學習如何更改這些許可權了。就是使用 chmod
命令來實現。第一步你要知道你能否更改文件許可權,你必須是文件的所有者或者有許可權編輯文件(或者通過 su
或 sudo
得到許可權)。正因為這樣,你不能隨意切換目錄和更改文件許可權。
繼續用我們的例子 (-rw-rw-r--
)。假設這個文件(命名為 script.sh)實際是個shell腳本,需要被執行,但是你只想讓自己有許可權執行這個腳本。這個時候,你可能會想:「我需要是文件的許可權如 -rwx-rw-r--
」。為了設置 x
許可權位,你可以這樣使用 chmod
命令:
chmod u+x script.sh
這時候,列表中顯示的應該是 -rwx-rw-r-- 。
如果你想同時讓用戶及其所屬組同時擁有執行許可權,命令應該這樣:
chmod ug+x script.sh
明白這是怎麼工作的了嗎?下面我們讓它更有趣些。不管什麼原因,你不小心給了所有分組對文件的執行許可權(列表中是這樣的 -rwx-rwx-r-x
)。
如果你想去除其他用戶的執行許可權,只需運行命令:
chmod o-x script.sh
如果你想完全刪除文件的可執行許可權,你可以用兩種方法:
chmod ugo-x script.sh
或者
chmod a-x script.sh
以上就是所有內容,能使操作更有效率。我希望能避免哪些可能會導致一些問題的操作(例如你不小心對 script.sh 使用 a-rwx
這樣的 chmod
命令)。
目錄許可權
你也可以對一個目錄執行 chmod
命令。當你作為用戶創建一個新的目錄,通常新建目錄具有這樣的許可權:
drwxrwxr-x
註:開頭的 d
表示這是一個目錄。
正如你所見,用戶及其所在組都對文件夾具有操作許可權,但這並不意味著在這文件夾中出創建的文件也具有與其相同的許可權(創建的文件使用默認系統的許可權 -rw-rw-r--
)。但如果你想在新文件夾中創建文件,並且移除用戶組的寫許可權,你不用切換到該目錄下並對所有文件使用 chmod
命令。你可以用加上參數 R(意味著遞歸)的 chmod
命令,同時更改該文件夾及其目錄下所有的文件的許可權。
現在,假設有一文件夾 TEST,裡面有一些腳本,所有這些(包括 TEST 文件夾)擁有許可權 -rwxrwxr-x
。如果你想移除用戶組的寫許可權,你可以運行命令:
chmod -R g-w TEST
運行命令 ls -l
,你講看到列出的 TEST 文件夾的許可權信息是 drwxr-xr-x
。用戶組被去除了寫許可權(其目錄下的所有文件也如此)。
總結
現在,你應該對基本的 Linux 文件許可權有了深入的理解。對於更高級的東西學起來會很輕鬆,像 setgid、setuid 和 ACL 這些。沒有良好的基礎,你很快就會混淆不清概念的。
Linux 文件許可權從早期到現在沒有太大變化,而且很可能以後也不會變化。
via: http://www.linux.com/learn/tutorials/885268-getting-to-know-linux-file-permissions
作者:Jack Wallen 譯者:ynmlml 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive