源本科技 | 码上会

Linux 中的 chown 命令

2025/12/24
108
0

在 Linux 系统中,文件所有权(Ownership)是权限控制体系的重要组成部分。chown(全称 change owner)命令用于更改文件或目录的所有者和 / 或所属组,是系统管理员和高级用户进行访问控制、协作配置和安全加固的关键工具。

注意:只有 root 用户当前文件所有者(且具备相应权限)才能使用 chown 修改所有权。


基本语法

chown [选项] 新所有者[:新组] 文件或目录...
  • 新所有者:目标用户名(如 alice

  • 新组(可选):目标组名(如 developers),用冒号 : 分隔

  • 文件 / 目录:一个或多个目标对象

# 仅更改所有者
$ chown alice report.pdf

# 仅更改所属组
$ chown :developers project/

# 同时更改所有者和组
$ chown alice:developers script.sh

核心功能

1. 仅更改文件所有者

$ chown master file1.txt

file1.txt 的所有者设为用户 master,组保持不变。

2. 仅更改文件所属组

$ chown :group1 data.log

注意:冒号 : 前无用户名,表示仅改组

3. 同时更改所有者和组

$ chown master:group1 greek1

所有者 → master,组 → group1

4. 递归修改整个目录树

最常用

$ chown -R alice:devs /var/www/myapp/

-R 选项会递归处理目录下所有子文件和子目录,常用于部署 Web 应用或迁移项目。


实用技巧

选项

作用

示例

-R

递归修改目录及内容

chown -R user:group /path/

-v

显示详细操作过程(verbose)

chown -v alice file.txt

-c

仅在实际发生更改时报告

chown -c :admin config/

-f

静默模式,忽略错误(force)

chown -f root *.tmp

--from=原所有者:原组

仅当当前归属匹配时才更改

chown --from=olduser:oldgrp newuser file

--reference=参考文件

复制另一文件的所有权

chown --reference=model.txt target.txt

-h

修改符号链接本身(而非目标文件)

chown -h user link -> file

场景 1:批量修复 Web 目录权限

# 将整个网站目录归属给 web 用户和 www-data 组
$ sudo chown -R web:www-data /var/www/html/

场景 2:安全迁移配置文件

# 先备份原文件权限,再应用到新文件
$ cp config.template config.prod
$ chown --reference=config.template config.prod

场景 3:条件性更改(避免误操作)

# 仅当当前所有者是 'tempuser' 时,才改为 'alice'
$ chown --from=tempuser alice important.doc

所有权/权限

概念

控制内容

使用命令

谁能修改

所有权(Ownership)

谁“拥有”文件(User + Group)

chown

Root 或当前所有者

权限(Permissions)

拥有者 / 组 / 他人能做什么(r/w/x)

chmod

所有者或 Root

二者协同工作:

  • chown 决定 身份归属

  • chmod 决定 操作能力

    • 例如:即使你把文件 chown 给了别人,若 chmod 不允许写入,对方仍无法修改。


查看当前所有权

使用 ls -l 查看文件的用户和组信息:

$ ls -l sample.txt
-rw-r--r-- 1 vboxuser developers 1024 Nov 4 10:00 sample.txt
          │    │         └── 所属组
          │    └── 所有者
          └── 链接数
  • 第 3 列:所有者(User)

  • 第 4 列:所属组(Group)


重点总结

操作

命令

说明

改所有者

chown user file

组不变

改所属组

chown :group file

所有者不变

同时更改

chown user:group file

最常用

递归修改

chown -R user:group dir/

批量处理目录

复制归属

chown --reference=src dest

保持一致性

安静执行

chown -f user file

忽略错误(慎用)


思考题

  1. 为什么普通用户不能将自己创建的文件 chown 给另一个普通用户?这背后的安全逻辑是什么?

  2. 如果一个目录的所有者是 alice,组是 devs,而用户 bob 属于 devs 组,那么 bob 能否删除该目录中的文件?需要哪些权限配合?

  3. 如何用一条命令将 /project 目录及其所有内容的所有者设为 deploy,组设为 www-data,并显示操作详情?


掌握 chown 是 Linux 系统管理的基石之一。它与 chmodchgrp 共同构成了完整的文件访问控制体系。合理使用 chown,不仅能提升团队协作效率,更能有效防范未授权访问,筑牢系统安全防线。