Linux chown 超详细完整教程
一、命令作用
chown = change owner,修改文件/目录的所有者(用户) 和所属组(用户组) 。
Linux 每个文件都有两个权限归属:
- 属主(owner):文件属于哪个用户
- 属组(group):文件属于哪个用户组
只有 root 超级用户 或文件原所有者能执行 chown。
二、基础语法
bash
chown [选项] 属主[:属组] 文件/目录
拆分三种格式:
- 只改用户:
chown user 文件 - 只改组:
chown :group 文件(冒号前空) - 用户+组一起改:
chown user:group 文件
三、常用参数(高频必记)
| 参数 | 作用 |
|---|---|
-R |
递归修改,目录内所有子文件、子目录同步变更(最常用) |
-v |
显示执行过程,打印每个修改的文件 |
-c |
只显示实际发生变更的文件(比v简洁) |
-h |
不跟随软链接,只修改链接本身(不加则修改链接指向的原文件) |
--reference=file |
参考另一个文件的归属,复制它的用户和组 |
四、前置准备:查看用户、组、文件归属
1. 查看文件当前所有者
bash
ls -l test.txt
# 输出示例
-rw-r--r-- 1 root root 123 Jul 1 10:00 test.txt
# 第3列:属主 root
# 第4列:属组 root
2. 查看系统所有用户
bash
cat /etc/passwd
3. 查看系统所有用户组
bash
cat /etc/group
4. 查看当前登录用户、所属组
bash
whoami # 当前用户名
id # 查看uid、gid、附属组
id username # 查看指定用户信息
五、基础实操示例(由浅入深)
1. 修改文件属主(仅改用户)
把 test.log 所有者改为 www 用户
bash
chown www test.log
2. 仅修改文件所属组(冒号开头)
把 test.log 组改成 nginx
bash
chown :nginx test.log
3. 同时修改属主+属组(最常用)
文件归属改为用户 www,组 www
bash
chown www:www test.log
4. 递归修改整个目录(-R 重点)
网站目录 /var/www 全部文件递归归属 www:www
bash
chown -R www:www /var/www
生产场景:网站、日志、项目目录必用
-R,否则子文件权限不变。
5. 打印修改详情(-v)
bash
chown -Rv www:www /var/www
执行后逐条输出:changed ownership of '/var/www/index.html' from root:root to www:www
6. 只打印有变更的文件(-c)
bash
chown -Rc www:www /var/www
无变化的文件不会输出,日志更干净。
7. 不跟随软链接(-h)
目录里存在软链接,只修改链接本身,不改动源文件:
bash
chown -Rh www:www /data/linkdir
不加 -h 会直接修改软链接指向的真实文件,容易误改系统文件。
8. 复制参考文件的所有者(--reference)
让 newfile.txt 和 template.txt 用户、组完全一致
bash
chown --reference=template.txt newfile.txt
无需手动写用户名,批量标准化权限神器。
六、使用UID/GID数字修改(不写用户名)
每个用户/组都有数字ID,也可直接用数字修改:
bash
# uid=1000,gid=1000
chown 1000:1000 test.txt
适用场景:容器、跨系统同步、用户名不存在但ID存在时。
七、批量处理多个文件/目录
1. 空格分隔多个目标
bash
chown www:www a.txt b.log /data/dir1
2. 通配符批量匹配
目录下所有 .html 文件统一改归属
bash
chown www:www *.html
# 递归所有子目录html文件
find /var/www -name "*.html" -exec chown www:www {} \;
八、sudo 普通用户执行 chown
普通用户默认无权修改不属于自己的文件,必须加 sudo 提权:
bash
# 普通用户执行,加sudo
sudo chown -R www:www /var/www
root 用户不需要 sudo。
九、常见生产场景案例
场景1:Nginx网站目录权限修复
网站文件被root创建,访问报403,统一归属www用户组
bash
sudo chown -R www:www /usr/share/nginx/html
场景2:日志目录归属调整
程序日志目录归属错误无法写入
bash
sudo chown -R app:app /var/log/myapp
场景3:FTP上传目录,ftp用户读写
bash
sudo chown -R ftp:ftp /home/ftp/upload
场景4:Docker挂载目录权限
容器内用户uid=1000,宿主机目录统一修改ID
bash
sudo chown -R 1000:1000 /opt/mount/data
十、常见报错与排错
1. Operation not permitted
原因:普通用户修改他人文件,无权限
解决:命令前加 sudo
2. invalid user / invalid group
原因:用户名/组名不存在
排查:id 用户名、cat /etc/group 核对名称
3. 递归修改后软链接源文件权限错乱
原因:没加 -h,chown跟随软链接修改源文件
解决:递归场景统一搭配 -Rh
4. 目录改了,内部文件权限不变
忘记加 -R,只修改目录本身,子文件不生效
解决:目录操作必须带 -R
十一、chown vs chmod 核心区别(极易混淆)
chown:改所有者、所属组(谁拥有文件)chmod:改读写执行权限 rwx(拥有者能做什么)
搭配使用标准流程:
bash
# 1. 归属修改
chown -R www:www /var/www
# 2. 权限修改
chmod -R 755 /var/www
十二、安全注意事项
- 不要随意把系统文件递归改为普通用户(如
/etc、/bin),会导致系统崩溃; - 网站、业务目录尽量使用独立业务用户(www/app),禁止长期用root运行业务;
- 软链接场景优先使用
-h参数,避免误篡改系统核心文件; - 批量递归
-R前可加-v预览修改内容,防止路径输错。