chown(Change Owner)是系統管理員修改文件/目錄擁有者與所屬組的核心命令。普通用戶無權變更擁有者,只能在擁有權限的目錄下操作。本文詳解語法、參數、四大實戰場景、參考文件同步、遞歸修改、常見報錯分析。
一、命令格式與參數
chown [選項]... [擁有者][:[組]] 文件...
| 參數 | 說明 |
-c, --changes | 僅報告被修改的文件 |
-f, --silent | 抑制錯誤信息 |
-h, --no-dereference | 修改符號鏈接本身而非目標文件 |
-R, --recursive | 遞歸處理目錄及子項 |
-v, --verbose | 顯示詳細處理信息 |
--reference=文件 | 以指定文件的擁有者/組為基準 |
--from=用戶:組 | 僅當當前擁有者/組匹配時才修改 |
二、擁有者/組指定語法
| 語法 | 效果 | 範例 |
user | 改擁有者,組不變 | chown alice file.txt |
user:group | 同時改擁有者和組 | chown alice:dev file.txt |
:group | 僅改組(等同 chgrp) | chown :dev file.txt |
user: | 改擁有者,組改為該用戶的主組 | chown alice: file.txt |
用戶/組可用名稱或數字 ID(UID/GID)。
三、四大實戰範例
1. 同時修改擁有者與組
chown mail:mail log2012.log
# -rw-r--r-- 1 root root -> -rw-r--r-- 1 mail mail
2. 僅修改擁有者(組跟隨擁有者主組)
chown root: log2012.log
# mail:mail -> root:root
3. 僅修改組
root:mail
4. 遞歸修改目錄樹(生產常用)
chown -R -v root:mail test6
# "test6/log2014.log" 的所有者已更改為 root:mail
# "test6/log2012.log" 的所有者已保留為 root:mail
# "test6" 的所有者已更改為 root:mail
四、進階用法
- 參考文件同步屬性:
chown --reference=ref_file target_file
- 條件修改:
chown --from=olduser:oldgroup newuser:newgroup file(防誤改)
- 處理符號鏈接:
chown -h user:group symlink 修改鏈接本身;無 -h 則修改目標文件
- 配合 find 批量修改:
find /data -user olduser -exec chown newuser {} +
五、權限前提與常見報錯
- 需 root 權限 或對文件擁有
CAP_CHOWN 能力
Operation not permitted:非 root 嘗試改擁有者、或文件系統掛載 nosuid/nodev 限制
Invalid argument:用戶/組不存在(檢查 /etc/passwd//etc/group)
- NFS 掛載需確保服務端
no_root_squash 且 id_mapping 一致

copyright ©
萬盛學電腦網 all rights reserved