---
# System prepended metadata

title: Linux chmod、chgrp、chown 權限管理筆記
tags: [Linux, 電腦雜談, 計算機概論, 電腦]

---

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

[TOC]

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

若本篇文章某處有誤，敬請告知，感謝！

## Linux 檔案、目錄權限

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

- 擁有者（Owner/User, u）：檔案的所有者。
- 群組（Group, g）：與檔案擁有者同群組的使用者。
- 其他人（Others, o）：系統上其他所有使用者。

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

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

當在輸入 `ls -l` 時，會列出像以下這些東西：

![image](https://hackmd.io/_uploads/B1m8U4z0xx.png)

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

```
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`）

範例：

```bash
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）。

操作符號：

- `+`：新增權限。
- `-`：移除權限。
- `=`：設定特定權限（清除其他權限後會重新設定）。

範例：

```bash
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`：安靜模式，不顯示錯誤訊息。

範例：

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

## chown

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

擁有者（owner）以及群組（group）可用 `ls -l` 查看，於第三欄、第四欄就會顯示誰是擁有者以及群組：

![image](https://hackmd.io/_uploads/ryxQnrfRle.png)

第三欄（左邊紅框）是擁有者，第四欄（右邊紅框）是群組。

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

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

基本語法：

```bash
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 系統中用來變更檔案或目錄所屬群組的指令。

基本語法：

```bash
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 檔案權限分為三個層級（`user`、`group`、`others`），每層級有三種權限：

- `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（變更權限）

數字模式：

```bash
chmod 644 file.txt    # 擁有者讀寫，其他人唯讀
chmod 755 script.sh   # 擁有者完整，其他人讀+執行
```

符號模式：

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

### chown（變更擁有者、群組）

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

### chgrp（變更群組）

```bash
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の世界へようこそ～](https://www.linux.digibeatrix.com/zh/security-and-user-management/linux-chmod-permission-guide/)

[Linux chmod 命令 | 菜鸟教程](https://www.runoob.com/linux/linux-comm-chmod.html)

[Linux - Chmod 工具管理檔案/目錄權限 - HowHow の WebSite](https://how64bit.com/posts/linux/2022/linux-chmod-permission-tool/)

[Linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思-腾讯云开发者社区-腾讯云](https://cloud.tencent.com/developer/article/1838097)

[Linux檔案權限配置- FineReport帮助文档 - 全面的报表使用教程和学习资料](https://help.fanruan.com/finereport-tw/doc-view-222.html)

[Linux chgrp 命令 | 菜鸟教程](https://www.runoob.com/linux/linux-comm-chgrp.html)

[鳥哥私房菜 - 第五章、Linux 的檔案權限與目錄配置](https://linux.vbird.org/linux_basic/centos7/0210filepermission.php)

[Lunix chgrp 命令详解-CSDN博客](https://blog.csdn.net/qq646748739/article/details/81137576)

[簡單易懂的 chown 指令使用指南：改變檔案和目錄的擁有者](https://vocus.cc/article/64dd7bd6fd897800018f68e2)

[Linux 更改檔案擁有者與群組，chown 指令使用教學與範例 – G. T. Wang](https://blog.gtwang.org/linux/linux-chown-command-tutorial/)

