人人都会AI编程

chown、chgrp:修改文件所有者与属组

更新时间:2026-07-12

在 Linux 的权限模型中,每个文件都有一个所有者(user)和一个所属组(group)。它们直接决定了基于用户和组的读、写、执行权限是否生效。当需要转移文件归属或为团队协作调整组权限时,就要用到 chownchgrp

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 -lafind 确认范围。
  • 配合 chmod 一起使用,可以完整设定一个文件或目录的访问控制。

chownchgrp 是日常运维中管理文件归属的基础命令,掌握它们就能灵活地控制“谁能对这个文件做什么”,与权限设定形成完整闭环。