chmod(change mode)用來變更檔案或目錄的權限,可以用字串或數字表達,通常字串對初學者是比較直觀方便的。
理解它後能讓你在日常維運、部署、權限排錯時更快更準。
ls -l
範例 :
drwxr-xr-x 5 user group … file/
-rw-r--r-- 1 user group … notes.txt
-rwxr-x--- 1 user group … Frieren.png
第一個字元 : 檔案型態
d | 目錄 |
---|---|
- | 一般檔案 |
l | 連結檔(symbolic link) |
b | block設備檔 |
c | character 設備檔 |
p | pipe 檔 |
s | socket 檔 |
接著九位字元 : 三個一組分別代表User(檔案擁有者)、Group(檔案所屬群組之使用者)、Other(其他使用者)對此檔案之權限。
r
( read ) 可讀內容 / w
( write ) 可改內容 / x
( execute ) 可當程式執行r
可列目錄清單 / w
可在此「新增/刪除/改名」項目(通常需搭配 x
) / x
可「穿越」進去chmod [參數] [動作] 檔案
R
:遞迴v
:顯示變更c
:只顯示有變更的項目f
:安靜模式(抑制錯誤)-reference=file.txt
:把操做的檔案權限改成跟 file.txt 一樣每組 r w x 對應 4 2 1,將要更改的部分數字相加即可
權限 | 值 | 說明 |
---|---|---|
--- |
0 | 無權限 |
--x |
1 | 只執行/穿越 |
-w- |
2 | 只寫 |
-wx |
3 | 寫+執行 |
r-- |
4 | 只讀 |
r-x |
5 | 讀+執行 |
rw- |
6 | 讀+寫 |
rwx |
7 | 讀+寫+執行 |
chmod [更改的權限] 檔案
chmod 644 file.txt # u=rw, g=r, o=r(一般檔案預設)
chmod 755 script.sh # u=rwx, g=rx, o=rx(可執行)
chmod 700 document/ # 只有本人可存取
指令 : chmod [who][操作][權限] 檔案
,可用逗號串多段
u
( user ) 擁有者g
( group ) 檔案所屬群組之使用者o
( others ) 其他使用者)a
( all ) 所有使用者+
加上、 -
移除、=
直接指定r w x X s t
chmod u+x deploy.sh # 給擁有者執行權
chmod go-rw secrets.txt # 移除群組與他人讀寫
chmod a=r file.txt # 所有人僅可讀
chmod ug+w shared/ # 擁有者與群組可寫
X
(大寫 X)x
chmod -R a+rX document/
s
和 t
( 特殊權限位 )u+s
,執行檔以檔案擁有者身分執行g+s
,執行檔以檔案群組身分執行;目錄上,該目錄內新檔案會繼承群組
+t
,目錄上,只有擁有者/根使用者可刪除自己的檔案符號法直接加,數字法的話把此數字放最前面
#數字法
chmod 2755 teamdir/ # setgid 目錄;團隊共用且繼承群組
chmod 1777 /shared/tmp # sticky 共享暫存區(任何人可寫但只能刪自己的)
#符號法
chmod g+s teamdir/
chmod +t /shared/tmp