修改文件所有者与所属组,通常需要 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
chown -R 写错目录会瞬间改掉大量文件的所有者,而且没有撤销。执行前 pwd、ls -ld 核对路径,并先用 ls -ln 保存原 UID/GID。Operation not permitted,这不是 ACL 问题。chown 不生效,通常是卷的“忽略所有权”开启。用 diskutil enableOwnership 修正。-h;-R 默认 -P 只改链接本身。要跟随链接必须显式 -L,但很容易误改目标树。brew doctor,不要直接 sudo chown -R 整个 /usr/local 或 /opt/homebrew。sudo 会话,确认无误再退出。chmod — 修改权限位与 ACL。ls — 用 -ln 查看数字 UID/GID。diskutil — 查看和启用外接卷所有权。chown — GNU 版对照,注意符号链接行为。takeown — Windows 取得文件所有权。权限速查 — 用户、组与权限位基础。合上页面,先回答,再展开对照。
chown 可能显示成功却不生效?chown -R 默认如何处理符号链接?要改链接本身用什么选项?diskutil enableOwnership 开启。-P 不跟随链接,改链接本身用 -h。
小程序版
微信扫码,随时查命令