chmod控制“谁能做什么”,修改读、写、执行权限;chown控制“谁拥有什么”,修改文件所有者和所属组。二者语义不同,不可混用。
chmod 和 chown 不是同一类操作:chmod 改的是“能不能做某事”(读/写/执行),chown 改的是“谁有资格做这件事”(属主和属组)。混用或误判会导致 Permission denied 却查不出原因。
chmod 修改权限时,数字法 755 和符号法 ug+x 的区别在哪
数字法(如
)直接覆盖三组权限:第一位 7 是属主(rwx),第二位 5 是属组(r-x),第三位 5 是其他人(r-x)。它不关心原来是什么,只按数字重设。
符号法(如
)是在原有基础上叠加或删减:
表示给属主加执行权,
表示去掉其他人的写权。它更安全,尤其在脚本部署中避免意外清空权限。
常见错误现象:
用
给脚本赋权后仍无法执行——因为没加
,644 对应 rw-r--r--,无执行位
用
给配置文件加执行权,导致 nginx 或 mysql 启动报错(部分服务拒绝加载可执行的配置文件)
性能影响极小,但语义差异大:数字法适合初始化设权,符号法适合增量调整。
chown 修改属主时,为什么 root:root 和 root: 不等价
明确指定属主为
、属组也为
;而
(末尾冒号保留)只改属主为
,属组则自动设为该用户默认组(通常是
组,但非绝对)。
使用场景:
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
数据库目录(如
)必须确保属主是
、属组也是
,否则 mysqld 进程启动失败
Web 目录(如
)常需属主为
、属组为
,便于协作编辑又不越权
容易踩的坑:
执行
(缺冒号)→ 属组变成
用户的登录组(可能是
,也可能不是),不如显式写
普通用户执行
报错
——这不是权限数字问题,而是没 root 权限,
默认仅 root 可用
递归修改(-R)时,chmod 和 chown 的行为差异
会把目录本身也设成 644,导致无法
进入(目录需要
位才能进入)。正确做法是先设目录为 755、文件为 644:
则无此问题,它对目录和文件都统一改属主属组,不会破坏访问逻辑。
性能影响:
在大目录下可能卡顿,因需遍历全部 inode;
同样耗时,但通常更稳定(不依赖权限位是否可读)
若目录无执行权,
可能中途失败并跳过子目录;
只要父目录可遍历(即有 x 权限),就能继续
什么时候必须同时用 chmod 和 chown
典型场景是部署 Web 应用或数据库服务:
上传新代码后,属主可能是
,但 Web 服务器(如 nginx)以
身份运行 → 先
但日志文件需由应用进程追加写入 →
(属主+属组可写)
可执行脚本(如
)需属主可读写执行、属组可读执行 →
最容易被忽略的一点:修改权限或属主后,SELinux 上下文(如果启用)可能未同步,导致仍被拒绝访问。此时需配合
或
,而不是反复调高 chmod 数字。
chmod 755 script.shchmod ug+x script.shu+xo-wchmod 644xchmod a+xchown root:root filerootrootchown root: filerootroot/var/lib/mysqlmysqlmysql/var/www/htmldeploywww-datachown -R www-data /var/wwwwww-datawww-datachown -R www-data:www-data /var/wwwchownOperation not permittedchownchmod -R 644 /pathcdxfind /path -type d -exec chmod 755 {} \;
find /path -type f -exec chmod 644 {} \;chown -R user:group /pathchmod -Rchown -Rchmod -Rchown -Rdeploywww-datachown -R www-data:www-data /var/www/appchmod 664 /var/www/app/logs/*.logstart.shchmod 750 start.shrestoreconchcon