系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

chown

修改文件所有者与所属组,通常需要 root 权限。

补充说明

chown 用户:组 文件 同时改所有者和组,chown 用户 文件 只改所有者,chown :组 文件 只改组。macOS 用冒号分隔用户和组;用户可以是本地账户名,组常见的是 staff(普通用户默认组)、wheel(管理员组)和服务账户组(如 _www)。非 root 用户只能把组改成自己所属的组,改所有者必须 sudo。

BSD 与 GNU 差异:macOS 的 chown 在 man 第 8 节,没有 --reference、--from、--preserve-root 长选项;GNU 默认跟随符号链接,而 macOS 对作为参数的符号链接默认不修改,改链接本身要用 -h。递归时 -R 默认 -P,不会跟随链接目录,-x 可避免跨挂载点。

外接卷可能启用了“忽略此卷上的所有权”,此时 chown 看似成功但实际不生效,文件都显示为当前用户。用 diskutil info /Volumes/盘名 | grep -i owners 查看,必要时 sudo diskutil enableOwnership /Volumes/盘名 后再改。系统卷和受 SIP 保护的位置仍然拒绝修改。

影响范围:chown -R 会改整棵目录树,可能让服务无法读取文件,或让你自己失去访问权限。 先备份:记录原所有者用 ls -ln,重要目录先做 Time Machine 备份。 如何回滚:没有自动撤销,按记录逐个改回;系统文件不要手工改所有者。

常用示例

# 记录原所有者,再修改单个文件
% ls -ln report.txt
% sudo chown alice:staff report.txt

# 只改组,普通用户可以把文件转给自己所属的组
% chown :staff ~/Shared/report.txt

# 递归修复网站目录所有者,先确认路径没有多余斜杠
% sudo chown -R "$USER":staff ~/Sites/example

# 修改符号链接自身,而不是它指向的目标
% sudo chown -h alice ~/Desktop/shortcut

# 用数字 UID/GID,避免网络目录或名称服务解析失败
% sudo chown -n 501:20 report.txt

# 检查外接卷是否启用所有权
% diskutil info /Volumes/USB | grep -i owners

# 启用后再修改,否则 chown 可能被卷设置忽略
% sudo diskutil enableOwnership /Volumes/USB

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 普通用户可以把文件的组改成任意组吗?改所有者呢?
  2. 为什么外接卷上的 chown 可能显示成功却不生效?
  3. chown -R 默认如何处理符号链接?要改链接本身用什么选项?
答案
  1. 只能改成自己所属的组;改所有者必须 root。
  2. 卷启用了“忽略所有权”,需用 diskutil enableOwnership 开启。
  3. 默认 -P 不跟随链接,改链接本身用 -h。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令