Linux 之 chmod 命令
文件權限設置命令 chmod
文件權限指的是文件是否可以執行、寫入、讀取等操作。
而Linux/Unix的文件存取權限分為三級 : 文件所有者、用戶組及其他,分別使用以下字母來表示:
- u:所有者
- g:用戶組
- o:其他用戶
如下圖所示,每個級別都可以設置為rwx三種權限 。
改命令官方的解釋為:
change mode
所以可以通過chmod來控制文件如何被他人所存取。
使用的語法如下所示:
- $ chmod [-cfvR] [--help] [--version] mode file...
其中mode權限設定的格式如下 : [ugoa] [+-=] [rwxX]
其中u表示該文件的擁有者,g表示與該文件的擁有者屬于同一個群體(group)者,o表示其他以外的人,a表示這三者皆是。
- + 表示加權限、– 表示減權限、= 表示設定唯一權限。
- r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過為可執行。
- -R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞回的方式逐個變更)
對于chmod的使用而言,只有文件所有者和超級用戶可以修改文件或目錄的權限。
具體的方法為可以使用符號模式或者絕對模式來進行操作。
而我比較喜歡用的是絕對數字模式,比較粗暴簡單。
符號模式
使用符號模式需要考慮多個因素,其中包括用戶類型,操作符 和設定權限。
| who | 用戶類型 | 說明 |
|---|---|---|
u |
user | 文件所有者 |
g |
group | 文件所有者所在組 |
o |
others | 所有其他用戶 |
a |
all | 所用用戶, 相當于 ugo |
operator 的符號模式表:
| Operator | 說明 |
|---|---|
+ |
為指定的用戶類型增加權限 |
- |
去除指定用戶類型的權限 |
= |
設置指定用戶權限的設置,即將用戶類型的所有權限重新設置 |
permission 的符號模式表:
| 模式 | 名字 | 說明 |
|---|---|---|
r |
讀 | 設置為可讀權限 |
w |
寫 | 設置為可寫權限 |
x |
執行權限 | 設置為可執行權限 |
絕對數字模式
chmod命令可以使用八進制數來指定權限。文件或目錄的權限位是由9個權限位來控制,每三位為一組,它們分別是文件所有者的讀、寫、執行權限,用戶組的讀、寫、執行以及其它用戶的讀、寫、執行。歷史上,文件權限被放在一個比特掩碼中,掩碼中指定的比特位設為1,用來說明一個類具有相應的優先級。比如下面的0-7分別表示各自的權限定義。
| No | 權限 | rwx | 二進制 |
|---|---|---|---|
| 7 | 讀 + 寫 + 執行 | rwx | 111 |
| 6 | 讀 + 寫 | rw- | 110 |
| 5 | 讀 + 執行 | r-x | 101 |
| 4 | 只讀 | r-- | 100 |
| 3 | 寫 + 執行 | -wx | 011 |
| 2 | 只寫 | -w- | 010 |
| 1 | 只執行 | --x | 001 |
| 0 | 無 | --- | 000 |
如表所示:
- 對于7而言就表示所有者的權限為可讀、可寫、可執行,也就是對應的八進制為111,所以就是7;
- 而對于 5而言,表示所有者的權限為可讀、可執行,對應的八進制為101,所以就是5;
其他類似。
實例更改為全部可讀
接下來將文件 a.c 設為所有人皆可讀取 ,有三種方式可以使用,如下,分別為 :
- chmod ugo+r filename
- chmod a+r filename
- chmod 444 filename
具體如下所示:
通過方法1:
- # 默認設定為沒有任何屬性
- $ ll
- ---------- 1 user user 5KB Feb 12 22:22 a.c
- # 更改為全部可讀
- $ chmod ugo+r file1.txt
- $ ll
- -r--r--r-- 1 user user 5KB Feb 12 22:22 a.c
通過方法2:
- # 默認設定為沒有任何屬性
- $ ll
- ---------- 1 user user 5KB Feb 12 22:23 a.c
- # 更改為全部可讀
- $ chmod a+r file1.txt
- $ ll
- -r--r--r-- 1 user user 5KB Feb 12 22:23 a.c
通過方法3:
- # 默認設定為沒有任何屬性
- $ ll
- ---------- 1 user user 5KB Feb 12 22:23 a.c
- # 更改為全部可讀
- $ chmod 444 file1.txt
- $ ll
- -r--r--r-- 1 user user 5KB Feb 12 22:24 a.c
設置用戶及組可讀寫,其他用戶無法寫入但可以查看
接下來繼續把文件 a.c設置為用戶 和組可以讀寫,而其他 用戶無法寫入但是 可以查看 。
使用符號模式如下:
- $ ll
- -r--r--r-- 1 user user 5KB Feb 12 22:24 a.c
- $ chmod ug+rw,o+r,o-w a.c
- $ ll
- -rw-rw-r-- 1 user user 5KB Feb 12 22:26 a.c
使用數字模式如下:
- $ ll
- -r--r--r-- 1 user user 5KB Feb 12 22:24 b.c
- $ chmod 664 a.c
- $ ll
- -rw-rw-r-- 1 user user 5KB Feb 12 22:26 b.c
設定為所有人只有可執行權限
此時不管文件的權限是什么,因為只具有可執行權限,所以符號模式可以使用=,而數字模式只需要1即可,如下:
- $ chmod a=x filename
- #或者
- $ chmod 111 filename
- # 無法讀取
- $ cat a.c
- cat: a.c: Permission denied
所以對于只有可執行權限的文件,是無法執行讀取或者寫入操作的,這也保證了文件的安全性。




















