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