chown可一步完成所有者、所属组或二者同时修改:仅改所有者用chown user file;仅改组用chown :group file或chgrp group file;同步修改用chown user:group file;递归操作加-r选项。

直接用 chown 就行,不需要先改用户再改组,也不用分两步调用不同命令。
只改所有者,不碰所属组
常见于部署时把文件“移交”给服务用户(比如 www-data),但想保留原属组不变:
-
sudo chown www-data file.txt—— 所有者变成www-data,组名不动 - 如果当前不是 root,且你不是文件原所有者,会报
Operation not permitted,必须加sudo - 注意:普通用户无法把自己的文件转给他人,只有 root 或 CAP_CHOWN 权限者能执行这类所有权转移
只改所属组,不改所有者
比 chown 更安全、语义更明确的写法是用 chgrp,尤其适合日常协作场景:
-
sudo chgrp developers project/—— 目录本身和所有子项的组都变成developers - 普通用户也能用
chgrp,但只能设为自己已加入的组(groups命令可查) - 如果坚持用
chown,写成chown :developers file.txt也行,冒号开头表示跳过所有者
同时改用户和组,带递归
这是 Web 服务部署、挂载盘重置后最常遇到的操作,也是最容易出错的地方:
-
sudo chown -R nginx:nginx /var/www/html—— 注意-R是大写,不是-r;路径末尾不加斜杠,避免误删 - 递归操作不会提示确认,一旦路径写错(比如手抖打成
/或/etc),可能破坏系统权限结构 - 建议先用
ls -ld /path和find /path -maxdepth 1 -ls | head -5确认范围,再执行 - 若目标环境用户名不可靠(如容器/NFS),可用 UID/GID 替代:
sudo chown -R 1001:1001 /data
为什么不用 chgrp 改所有者?
chgrp 命令压根不提供修改所有者的功能,它的作用域严格限定在组层面。试图用它改用户会直接报错:
-
chgrp alice file.txt→ 报错:invalid group(如果alice不是组名) - 而
chown alice file.txt和chown :alice file.txt是两种完全不同的行为,前者改用户,后者改组 - 混淆这两者是新手最常见的权限误操作来源之一,尤其在脚本里硬编码时没注意冒号位置











