chmod — 變更檔案或目錄的存取權限
修改檔案或目錄的擁有者、群組與其他人的讀/寫/執行權限。
語法
chmod [選項] 模式 檔案...
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-R, --recursive |
遞迴套用到目錄及其所有內容 | chmod -R 755 /var/www/ |
-v, --verbose |
顯示每個已處理的檔案 | chmod -v 644 config.txt |
-c, --changes |
只顯示有實際變更的檔案 | chmod -c 644 *.txt |
--reference=檔 |
使用參考檔的權限作為模式 | chmod --reference=model.txt file.txt |
使用範例
範例 1:數字模式:設定 755 權限
755 = rwxr-xr-x:擁有者可讀/寫/執行,群組和其他人可讀/執行。適合目錄與可執行腳本。 • 7 (rwx) = 4+2+1 = 擁有者 • 5 (r-x) = 4+0+1 = 群組 • 5 (r-x) = 4+0+1 = 其他人
$ chmod 755 deploy.sh
範例 2:數字模式:設定 644 權限
644 = rw-r--r--:擁有者可讀/寫,群組和其他人只可讀。適合一般設定檔與資料檔。
$ chmod 644 config.yml
範例 3:符號模式:新增執行權限
u+x 表示給擁有者(u)新增(+)執行(x)權限,不影響其他已有的權限。
$ chmod u+x script.sh
範例 4:符號模式:移除寫入權限
go-w 表示移除群組(g)和其他人(o)的寫入(w)權限。
$ chmod go-w sensitive.conf
範例 5:符號模式:給所有人新增讀取權限
a+r(或 +r)表示給所有人(a = u+g+o)新增讀取(r)權限。
$ chmod a+r public-readme.txt
範例 6:遞迴設定目錄權限
遞迴套用到整個 /var/www/html 目錄,適合設定 Web 伺服器根目錄。
$ chmod -R 755 /var/www/html/
注意:通常應避免對私密設定檔使用 755,以免敏感內容被其他使用者讀取。
範例 7:設定私密金鑰檔案權限
600 = rw-------:只有擁有者可讀/寫,其他任何人都無法存取。SSH 私鑰必須如此設定。
$ chmod 600 ~/.ssh/id_rsa
常見錯誤與排錯
chmod: changing permissions of 'file': Operation not permitted
- 原因
- 沒有修改此檔案權限的權力(非擁有者也非 root)。
- 解法
- 使用 sudo chmod,或以檔案擁有者身份執行。
WARNING: UNPROTECTED PRIVATE KEY FILE! (ssh 連線時出現)
- 原因
- SSH 私鑰檔案的權限過於開放(應為 600,不可被他人讀取)。
- 解法
- 執行 chmod 600 ~/.ssh/id_rsa 修復私鑰權限。