在 Linux 的权限模型中,每个文件都有一个所有者(user)和一个所属组(group)。它们直接决定了基于用户和组的读、写、执行权限是否生效。当需要转移文件归属或为团队协作调整组权限时,就要用到 chown 和 chgrp。
1. chown — 修改文件所有者(和属组)chown 可以单独修改文件的所有者,也可以同时修改所有者和属组。只有 root 用户可以更改文件的所有者(普通用户无权将文件“赠予”他人),而将文件属组改到自己所在的组通常需要文件所有权。
常见用法:
chown 用户名 文件名 # 仅更改所有者为指定用户
chown :组名 文件名 # 仅更改属组(等同于 chgrp)
chown 用户名:组名 文件名 # 同时更改所有者和属组
chown 用户名.组名 文件名 # 同上,冒号也可用点号(兼容旧写法)
递归修改目录及其下所有内容:
chown -R alice:developers /project/
-R 会遍历整个目录树,统一调整所有文件和子目录的归属。这在部署代码、转移项目时非常常用。
如果想保持符号链接本身不改变而更改其指向的目标文件,可以使用 -h 选项:
chown -h alice linkname
2. chgrp — 单独修改文件属组chgrp 专门用于修改文件的属组,语法更专注:
chgrp 组名 文件名
chgrp -R 组名 目录名 # 递归修改
通常用户只能将文件组改为自己所属的组。管理员(root)可以更改为任意组。
3. 实用场景举例
- 把 Web 目录的所有权交给
www-data用户和组(Web 服务器运行身份):
chown -R www-data:www-data /var/www/html
- 将一个共享项目目录设为
dev组,以便该组所有成员都可读写:
chgrp -R dev /shared/code
# 同时确保目录本身有组写权限
chmod -R g+w /shared/code
- 查看当前文件归属(使用
ls -l):
-rw-r--r-- 1 bob developers 4096 Mar 12 10:00 report.txt
如果需要移交给 alice,使用 chown alice report.txt。
4. 重要提示
- 只有 root 才能将文件所有者改为其他人。普通用户即使拥有文件,也无法把它“送给”另一个用户,这是一项安全设计。
- 使用递归修改时务必小心,尤其是在系统目录或大规模数据上。建议先用
ls -la或find确认范围。 - 配合
chmod一起使用,可以完整设定一个文件或目录的访问控制。
chown 和 chgrp 是日常运维中管理文件归属的基础命令,掌握它们就能灵活地控制“谁能对这个文件做什么”,与权限设定形成完整闭环。