跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Linux怎么修改文件权限 chmod和chown命令详解

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

相关文章