Linux

Linux 以 chmod 指令更改檔案權限教學與範例

介紹如何在 Linux 系統上以 chmod 指令設定檔案或目錄的讀取、寫入與執行權限。

基本檔案權限

在 UNIX/Linux 系統中,檔案與目錄可以根據不同的使用者或群組授予不同的權限,我們可以使用 ls 指令搭配 -l 參數查看檔案的權限:

# 查看 /var/log/syslog 檔案的詳細資訊
ls -l /var/log/syslog
-rw-r----- 1 syslog adm 36996 Dec 18 19:35 /var/log/syslog

在這裡的 ls 輸出中,最開頭 -rw-r----- 的後面九個字元代表檔案的權限,閱讀時是三個一組,由左至右分別代表「擁有者」、「群組」、「其他使用者」的權限。

而在這九個字元中,會以下面這些符號表示各種權限:

符號 數值 權限
r 4 可讀取(read)
w 2 可寫入(write)
x 1 可執行(execute)
- 0 沒有授權

/var/log/syslog 這個檔案來說,擁有者(syslog)的權限是 rw- 就代表可以讀取與寫入,群組(adm)的權限是 r-- 就代表只能讀取,而其他使用者的權限是 --- 就代表完全沒有任何權限。

讀取、寫入與執行的權限各有對應的數值,我們可以使用這三種權限的數值總和來表示這三種權限,例如 -rw-r----- 若要改以數值表示,計算方式如下:

角色 符號表示 數值表示
擁有者 rw- 4 + 2 + 0 = 6
群組 r-- 4 + 0 + 0 = 4
其他使用者 --- 0 + 0 + 0 = 0

所以 -rw-r----- 改以數值表示的話就可以寫成 640,這在後面的 chmod 指令會使用到。

chmod 設定檔案權限(數值方式)

chmod 指令可以用來更改檔案的權限設定,使用此指令在指定擁有者、群組與其他使用者的權限時,可以用數值的方式來表示:

# 設定檔案權限為 644
chmod 644 myfile.txt

設定好新的權限之後,可以用 ls 來檢查:

# 查看 myfile.txt 檔案的詳細資訊
ls -l myfile.txt
-rw-r--r-- 1 ubuntu ubuntu 679 Dec 18 21:55 myfile.txt

這樣的權限就代表所有人都可以讀取此檔案,但是只有擁有者可以寫入。

chmod 設定檔案權限(符號方式)

除了以數值的方式表示權限之外,亦可使用權限符號的表示方式,這種表示方式通常會由「角色」、「設定」、「權限」三個部分組成:

角色 設定 權限
u(擁有者)
g(群組)
o(其他使用者)
a(所有角色)
+(增加)
-(刪除)
=(設定為)
r(讀取)
w(寫入)
x(執行)

以下是一些簡單的使用範例。

設定檔案的擁有者權限為可以讀取與寫入(rw-):

# 設定擁有者權限為 rw-
chmod u=rw myfile.txt

只刪除群組的寫入權限,其他的各種權限都維持不變:

# 移除群組寫入權限(其餘權限維持不變)
chmod g-w myfile.txt

增加所有角色(擁有者、群組、其他使用者)的寫入權限,其他的各種權限都維持不變:

# 增加所有角色的寫入權限(其餘權限維持不變)
chmod a+w myfile.txt

如果沒有指定角色,預設會套用至所有角色(也就是 a),所以上面的指令亦可寫成這樣:

# 增加所有角色的寫入權限(其餘權限維持不變)
chmod +w myfile.txt

也可以一次設定多種權限的組合:

# 設定多種權限組合
chmod u=rwx,go=rx myfile.txt

目錄權限

Linux 的目錄權限設定方式跟檔案一樣,只不過目錄的各種權限意義跟檔案不同:

類型 讀取權限 r 寫入權限 w 執行權限 x
檔案 可讀取檔案內容 可修改檔案內容 可執行檔案
目錄 可讀取目錄內的檔案名稱 可修改目錄內的檔案名稱 可以 cd 進入目錄內

以下是各種目錄的權限設定組合所產生的效果:

目錄權限 新增或刪除檔案、改檔名 ls 列出檔名 cd 進入目錄
rwx 可以 可以 可以
r-x 不可以 可以 可以
--x 不可以 不可以 可以

若要對目錄之下的檔案進行任何操作,目錄至少要有執行權限 x,但是如果沒有目錄的讀取權限 r,就不能用 ls 查看目錄內的檔案,會非常不方便,所以在授權使用目錄時,權限至少會包含讀取與執行(r-x)兩種。

# 設定目錄權限為 755
chmod 755 myfolder
在目錄的權限設定為 --x 的情況下,若事先知道目錄內的檔案路徑,還是可以對檔案進行操作,就好像沒開燈,摸黑操作的意思。

遞迴設定目錄與所有檔案權限

如果要用 chmod 指令設定指定目錄之下所有子目錄與檔案的權限,可以使用 -R 參數:

# 遞迴設定目錄、子目錄與所有檔案權限(加入讀取與執行權限)
chmod -R +rx /path/folder

在使用 -R 的時候通常會遇到一個小問題,對於普通的檔案來說通常不會設定執行權限,但是對於正常目錄來說執行權限卻是必要的,若用 -R 參數統一開啟執行權限,會讓所有檔案都設定了多餘的執行權限,這時候可以改用大寫的 X 來設定執行權限,它只會加入目錄的執行權限,不更動檔案的執行權限(保留原有的檔案執行權限,若原來沒有就維持沒有):

# 加入檔案與目錄的讀取權限,加入目錄的執行權限,不更動檔案的執行權限
chmod -R +rX /path/folder

參考資料:archlinux Wiki鳥哥的 Linux 私房菜

Share
Published by
Office Guide
Tags: Bash

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago