Linux chmod、chgrp、chown 權限管理筆記

感謝您點進本篇文章,我是 LukeTseng,近期接觸到 Linux 系統,時常需要面對黑色終端機,有些時候想做到一些操作,卻也不知道那個指令叫什麼,我也沒有好好奠基 Linux 的基礎指令,所以特此製作本篇文章!希望能解決到你我的痛點!

若本篇文章某處有誤,敬請告知,感謝!

Linux 檔案、目錄權限

Linux 的檔案權限分為三個層級:

  • 擁有者(Owner/User, u):檔案的所有者。
  • 群組(Group, g):與檔案擁有者同群組的使用者。
  • 其他人(Others, o):系統上其他所有使用者。

每個層級可以設定三種權限:

  • r(read, 讀取):數字值為 4,可以查看檔案內容或列出目錄內容。
  • w(write, 寫入):數字值為 2,可以修改檔案或在目錄中新增 / 刪除檔案。
  • x(execute, 執行):數字值為 1,可以執行檔案或進入目錄。

當在輸入 ls -l 時,會列出像以下這些東西:

image

其中 drwxr-xr-x 就是檔案或目錄的權限,可以分成三個部分來看:

1
2
d rwx r-x r-x
1 234 567 890

其中第一個欄位是檔案類型,有以下這幾種檔案類型:

  • -:普通檔案
  • d:directory,目錄。
  • p:pipe 管道檔案。
  • l:link 符號連結。

第 2~4 欄位是擁有者(u:owner)的權限:

  • r:可讀(read) = 4。
  • w:可寫(write) = 2。
  • x:可執行(execute) = 1。
  • -:沒有權限。

第 5~7 欄位是群組(g:group)權限,內容與上方(owner)敘述相同,第 8~0 欄位是其他人(o:others)權限,內容同上。

這串 rwxr-xr-x 可以表示成 7(rwx)5(r-x)5(r-x),每個數字左到右代表的是 u(owner)、g(group)、o(others)這些人的權限。

chmod 更改檔案、目錄權限

chmod 是取自 change mode 的縮寫,分成兩種模式,一種是數字模式,另一種是符號模式。

數字模式

先來講講數字模式:

數字模式透過三位八進位數字來設定權限,每位數字是權限值的總和:

  • 0:無權限(---
  • 1:僅執行(--x
  • 2:僅寫入(-w-
  • 3:寫入+執行(-wx
  • 4:僅讀取(r--
  • 5:讀取+執行(r-x
  • 6:讀取+寫入(rw-
  • 7:完整權限(rwx

範例:

1
2
3
4
chmod 644 file.txt    # -rw-r--r-- 擁有者可讀寫,其他人僅可讀
chmod 755 script.sh # -rwxr-xr-x 擁有者完整權限,其他人可讀取執行
chmod 700 private.txt # -rwx------ 僅擁有者有完整權限
chmod 777 shared.txt # -rwxrwxrwx 所有人完整權限

符號模式

接下來是符號模式,符號模式使用字母組合來新增、移除或設定權限:

操作對象:

  • u:擁有者(user)。
  • g:群組(group)。
  • o:其他人(others)。
  • a:所有人(all)。

操作符號:

  • +:新增權限。
  • -:移除權限。
  • =:設定特定權限(清除其他權限後會重新設定)。

範例:

1
2
3
4
5
chmod u+x script.sh        # 給擁有者新增執行權限
chmod a+r file.txt # 給所有人新增讀取權限
chmod g-w document.txt # 移除群組的寫入權限
chmod u=rw,g=r,o=r file.txt # 設定擁有者讀寫,群組和其他人僅讀取
chmod go-rwx private.txt # 移除群組和其他人的所有權限

常用參數

  • -R:遞迴,對目錄及其所有子目錄和檔案套用權限變更。
  • -v:詳細模式,顯示每個檔案的權限變更情況。
  • -c:僅顯示有變更的檔案。
  • -f:安靜模式,不顯示錯誤訊息。

範例:

1
2
chmod -R 755 /var/www/html   # 遞迴設定整個網站目錄權限
chmod -v 644 *.txt # 詳細顯示每個 txt 檔案的權限變更

chown

chown(change owner)是 Linux 系統中用來變更檔案或目錄「擁有者」和「群組」的指令。

擁有者(owner)以及群組(group)可用 ls -l 查看,於第三欄、第四欄就會顯示誰是擁有者以及群組:

image

第三欄(左邊紅框)是擁有者,第四欄(右邊紅框)是群組。

chown 主要做以下這三件事情:

  • 變更檔案或目錄的擁有者(誰擁有這個檔案)。
  • 變更檔案或目錄的群組(哪個群組的成員可以存取這個檔案)。
  • 同時變更擁有者與群組。

基本語法:

1
chown [options] [owner][:[group]] <files or directories>

owner:可為使用者名稱或使用者 ID。

group:可為群組名稱或群組 ID。

:(冒號):分隔 owner 與 group。

常用參數與 chmod 相同:

  • -R:遞迴,對目錄及其所有子目錄和檔案套用權限變更。
  • -v:詳細模式,顯示每個檔案的權限變更情況。
  • -c:僅顯示有變更的檔案。
  • -f:安靜模式,不顯示錯誤訊息。

相關範例:

  • 只改變擁有者:sudo chown alice file.txt

file.txt 的擁有者變成 alice,群組不變。

  • 只改變群組:sudo chown :devteam file.txt

file.txt 的群組變成 devteam,擁有者不變。

  • 同時改變擁有者和群組:sudo chown alice:devteam file.txt

file.txt 的擁有者變成 alice,群組變成 devteam

  • 遞迴更改整個目錄及其內容:sudo chown -R alice:devteam project_folder

project_folder 及其所有子目錄、檔案的擁有者和群組都變更。

使用權限

  • 只有 root 或檔案擁有者可以更改檔案的擁有者。

疑難雜症

  • 權限不足:一般使用者無法隨意更改檔案擁有者,需加 sudo
  • 目錄遞迴未加 -R:只會改變目錄本身,不會影響裡面的檔案。

chgrp

chgrp 是取自 change group 的縮寫,是 Linux 系統中用來變更檔案或目錄所屬群組的指令。

基本語法:

1
chgrp [options] <group_name or group_ID> <files or directories>

群組名稱須已存在於 /etc/group 檔案中。

常用參數與 chmod 相同:

  • -R:遞迴,對目錄及其所有子目錄和檔案套用權限變更。
  • -v:詳細模式,顯示每個檔案的權限變更情況。
  • -c:僅顯示有變更的檔案。
  • -f:安靜模式,不顯示錯誤訊息。

相關範例:

  • 更改單一檔案的群組:chgrp developers file.txt

file.txt 歸屬於 developers 群組。

  • 更改多個檔案的群組:chgrp users file1.txt file2.txt

同時更改多個檔案的群組。

  • 遞迴更改目錄及其內容的群組:chgrp -R www-data /var/www/html

讓整個網站目錄及其所有檔案都歸屬於 www-data 群組。

使用權限

  • 只有檔案擁有者或 root 管理員可以執行 chgrp
  • 要是目標群組的成員才可以用,否則會出現權限錯誤。

whoami

whoami 是在 Linux 查看目前有效使用者名稱的指令,只要直接輸入即可,效力等同於 id -un 指令。

總整理

Linux 檔案權限分為三個層級(usergroupothers),每層級有三種權限:

  • r(讀取)= 4
  • w(寫入)= 2
  • x(執行)= 1

使用 ls -l 查看時,如 drwxr-xr-x

  • 第 1 位:檔案類型(- 普通檔、d 目錄、l 連結、p 管道)。
  • 第 2-4 位:擁有者(owner)權限。
  • 第 5-7 位:群組(group)權限。
  • 第 8-10 位:其他人(others)權限。

chmod(變更權限)

數字模式:

1
2
chmod 644 file.txt    # 擁有者讀寫,其他人唯讀
chmod 755 script.sh # 擁有者完整,其他人讀+執行

符號模式:

1
2
3
chmod u+x script.sh        # 擁有者增加執行權限
chmod go-rwx private.txt # 移除群組和其他人所有權限
chmod u=rw,g=r file.txt # 設定特定權限組合

chown(變更擁有者、群組)

1
2
3
4
chown alice file.txt              # 改變擁有者
chown :devteam file.txt # 改變群組
chown alice:devteam file.txt # 同時改變擁有者和群組
chown -R alice:devteam folder/ # 遞迴更改整個目錄

chgrp(變更群組)

1
2
chgrp developers file.txt         # 改變單一檔案群組
chgrp -R www-data /var/www/ # 遞迴改變目錄群組

常用參數

三個指令共用這些參數:

  • -R:遞迴處理目錄及子內容。
  • -v:顯示詳細變更過程。
  • -c:僅顯示有變更的檔案。
  • -f:安靜模式,隱藏錯誤訊息。

注意事項

  • 變更擁有者需要 root 權限(使用 sudo)。
  • 目標群組必須存在於 /etc/group
  • 遞迴操作記得加 -R,否則只影響目錄本身。

參考資料

Linux 檔案權限教學:深入理解 chmod 指令與 -rw-r-r- 實用設定方法 - オープンソースの力を活用する方法~Ubuntuの世界へようこそ~

Linux chmod 命令 | 菜鸟教程

Linux - Chmod 工具管理檔案/目錄權限 - HowHow の WebSite

Linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思-腾讯云开发者社区-腾讯云

Linux檔案權限配置- FineReport帮助文档 - 全面的报表使用教程和学习资料

Linux chgrp 命令 | 菜鸟教程

鳥哥私房菜 - 第五章、Linux 的檔案權限與目錄配置

Lunix chgrp 命令详解-CSDN博客

簡單易懂的 chown 指令使用指南:改變檔案和目錄的擁有者

Linux 更改檔案擁有者與群組,chown 指令使用教學與範例 – G. T. Wang