Linux-chown
chowm
作用
chown(change owner),它是 Linux/Unix 系统中修改文件/目录的所有者(User)和/或所属组(Group) 的核心命令(只有 root 或文件的原始所有者能修改,日常主要由 root 操作)。
注意事项
- 权限限制 :普通用户只能修改「自己拥有的文件」的所属组(且必须是自己所属的组),但无法修改所有者;只有
root能修改任意文件的所有者/组。 - 符号链接 :默认情况下
chown会修改符号链接指向的原文件 权限,若要改链接本身,需加-h参数。 - 目录权限 :修改目录权限时,务必加
-R(递归),否则仅改目录本身,子文件/子目录不变。 - 生产场景 :Web/数据库等服务的目录/日志文件,通常会将所有者设为
root,所属组设为服务运行用户(如nginx/mysql),避免权限过大导致安全风险。
格式
bash
chown [参数] 新所有者[:新所属组] 文件/目录
说明:
- 所有者可写「用户名」或「UID」(如
1000),所属组可写「组名」或「GID」(如1000);- 仅改所有者:只写「新所有者」(不加冒号);
- 仅改所属组:只写「:新所属组」(冒号前留空);
- 同时改所有者和组:「新所有者:新所属组」(冒号无空格)。
参数
chown 命令行参数(选项)
这类参数控制命令执行行为,不直接修改权限,常用参数如下:
| 参数 | 全称/含义 | 核心作用 | 示例 |
|---|---|---|---|
-R |
recursive(递归) | 递归修改目录及其下所有子文件/子目录的所有者/所属组(最常用) | chown -R root:nginx /var/www/ 递归修改web目录的所有者为root、所属组为nginx |
-v |
verbose(详细输出) | 显示每个文件的修改结果(无论是否变更) | chown -v root file.txt 输出:ownership of 'file.txt' changed to root |
-c |
changes(仅显示变更) | 仅输出权限发生实际变更的文件信息,无变化则静默 | chown -c nginx file.txt 仅当file.txt所有者非nginx时才输出信息 |
-f |
force(强制) | 忽略错误提示(如无权限修改、文件不存在等,不报错) | chown -f test:test no_perm_file 即使无权限,也不输出错误 |
-h |
no dereference | 仅修改符号链接本身的所有者/组,而非链接指向的原文件(默认改原文件) | chown -h root:root /tmp/link 只改软链接link的权限,不改它指向的文件 |
--reference=参考文件 |
参考权限 | 将目标文件/目录的所有者+所属组,设为「参考文件」的所有者+组(无需手动指定) | chown --reference=ref.txt target.txt 让target.txt和ref.txt的所有者/组一致 |
--from=原所有者[:原所属组] |
条件修改 | 仅当文件的「原所有者/组」匹配指定值时,才修改为新值(精准批量修改) | chown --from=olduser:oldgroup newuser:newgroup /data/* 仅把原属主olduser、原属组oldgroup的文件改成newuser:newgroup |
chown 核心用法(修改所有者/所属组)
常用场景
| 场景 | 命令 | 说明 |
|---|---|---|
| 仅改所有者 | chown root file.txt |
将file.txt的所有者改为root(所属组不变) |
| 仅改所属组 | chown :nginx file.txt |
将file.txt的所属组改为nginx(所有者不变) |
| 同时改所有者+组 | chown www:www /var/log/app.log |
所有者和所属组都改为www用户/组 |
| 用UID/GID修改 | chown 1001:1002 dir/ |
所有者设为UID=1001的用户,所属组设为GID=1002的组 |
-
递归修改目录权限,且显示修改过程(运维高频):
bash# 把web项目目录的所有者设为root,所属组设为nginx,递归且显示过程 chown -Rv root:nginx /usr/share/nginx/html/ -
仅修改「原属主为test」的文件为root(条件修改):
bashchown --from=test root -R /tmp/test_dir/ -
参考系统默认文件,统一设置权限:
bash# 让app.conf和/etc/nginx/nginx.conf的所有者/组完全一致 chown --reference=/etc/nginx/nginx.conf /etc/nginx/conf.d/app.conf