chown 是干什么的
chown 用来修改文件或目录的属主与属组,写法是 chown 用户:组 路径。递归要加 -R,符号链接默认只改指向的目标,改链接本身要加 -h。部署应用后目录归属不对,是服务起不来或写不进文件的常见原因,用哪类账号运行服务、目录就应该归属哪个账号。
基本信息
| 改属主 | chown 用户 文件 |
|---|---|
| 改组 | chown :组 文件,或使用 chgrp |
| 同时改 | chown 用户:组 文件 |
| 递归 | -R 作用于整个目录树 |
| 仅改链接 | -h 只作用于符号链接自身 |
典型使用场景
- 部署后把站点目录交给服务账号读写
- 数据目录从其他主机迁移过来后修正归属
- 日志目录交给采集账号保证可读
- 共享目录统一属组便于协作
- 按参考文件快速复制一套归属设置
典型用法
典型用法
chown -R nginx:nginx /data/web # RPM 系服务账号,递归调整
chown -R www-data:www-data /data/web # DEB 系服务账号
chown appuser:appgroup /opt/app/conf # 同时改属主与属组
chown --reference=/opt/app/a /opt/app/b # 参照已有文件复制归属
chown -h appuser linkname # 只改链接自身
ls -ld /data/web; stat -c '%U:%G %a' /data/web # 复核结果
ps -o user= -p $(pgrep -f nginx | head -1) # 确认服务实际运行账号写法对照
| 写法 | 效果 | 注意点 |
|---|---|---|
| chown 用户 文件 | 只改属主 | 属组保持不变 |
| chown :组 文件 | 只改属组 | 等价于 chgrp |
| chown 用户:组 | 属主与属组同时改 | 最常用形式 |
| -R | 递归处理目录树 | 系统目录慎用 |
| -h | 只改符号链接本身 | 默认行为是改目标 |
| --reference | 复制参考文件的归属 | 批量对齐时高效 |
调整前确认
- 先确认服务以哪个账号运行
- 确认目录同时需要读写还是只读
- 递归范围尽量精确,避免波及系统目录
- 调整后核对属主与权限位
- 把归属规则写进部署文档
服务以哪个用户运行可以从单元文件的用户设置里看,也可以用 ps 查看进程的属主;确认运行账号再决定目录归属,比凭经验套用更可靠。