chown 用户名:组名 文件或目录可同时修改属主和属组,冒号分隔且不可有空格;仅用户名改属主,仅冒号加组名改属组;递归需-r,操作前须验证路径、用户组存在性及权限。

直接用 chown 用户名:组名 文件或目录 就能同时改属主和属组,这是最常用也最稳妥的方式。
基本语法与格式要点
冒号(:)是关键分隔符,前后不能有空格;用户名和组名都必须真实存在系统中:
-
chown alice:developers file.txt—— 同时把所有者设为 alice,属组设为 developers -
chown 1001:1002 file.txt—— 也可用 UID/GID 替代名称,适合用户已删或 NFS 环境 - 若只写
chown alice file.txt,仅改所有者,属组不变;只写chown :developers file.txt,仅改属组,所有者不变
递归修改整个目录树
要让子目录、子文件、隐藏文件(如 .env、.git)全部生效,必须加 -R 选项:
-
sudo chown -R www-data:www-data /var/www/html—— Web 项目部署常用 -
sudo chown -R 1001:33 /srv/app—— 用数字 ID 更稳定,避免用户名变动影响 - 执行前先用
ls -ld /path和ls -l /path | head -3抽样确认当前归属
操作前必须验证的三件事
递归修改不可逆,尤其在生产环境,跳过验证容易导致服务中断:
- 确认路径准确:优先用绝对路径,避免把
./data误写成/data - 确认用户和组存在:
id alice和getent group developers应有输出 - 确认你有权限:普通用户无法修改他人文件的所有者;改属组时,目标组必须是你所属的附加组之一
常见错误与规避方式
几个细节不注意,就会白忙活甚至引发故障:
- 漏掉
-R:只改了目录本身,里面文件还是旧归属,PHP 或 Nginx 常因此报 “Permission denied” - 误用点号(
.)代替冒号(:):比如user.group会被解析失败,尤其用户名含小数点时更危险 - 对系统目录乱加
-R:像/etc、/usr/bin这类路径,除非明确知道每层影响,否则不要碰 - 符号链接默认不处理目标:如需修改链接文件自身(而非它指向的内容),加
-h,例如chown -Rh user:group linkname











