chmod u+x script.sh是最安全常用方式,仅赋予所有者执行权限;需配合正确shebang和非noexec文件系统才能运行,避免误用X、777或忽略属主问题。

直接用 chmod +x script.sh 就能让脚本具备执行权限,之后就能通过 ./script.sh 运行。关键不在“加权限”本身,而在于加给谁、怎么加才安全有效。
快速赋予执行权的常用写法
最常用也最直接的方式是:
-
chmod +x script.sh:给所有者、组、其他用户都加上执行权限(等价于
a+x) - chmod u+x script.sh:仅所有者可执行,最常用且推荐——脚本通常只需自己运行
- chmod ug+x script.sh:所有者和所属组成员都能执行,适合团队协作场景
- chmod a-x script.sh:移除所有人执行权限,用于临时禁用脚本
确认权限是否生效
执行完 chmod 后,用 ls -l script.sh 查看输出。如果权限字段中出现 x(比如 -rwxr--r-- 或 -rw-r--r-x),说明已生效。注意:普通文件默认无执行位,所以新建脚本即使有 #!/bin/bash,也必须手动加 x 才能 ./ 运行。
两个容易被忽略的前提条件
光有 x 权限还不够,以下两点缺一不可:
-
脚本首行要有正确的 shebang,例如
#!/bin/bash或#!/usr/bin/env python3,否则系统不知道用什么解释器执行 -
文件系统不能挂载为 noexec,尤其是 /tmp 或某些容器挂载点。若提示 “Permission denied” 却确认 chmod 已生效,可用
mount | grep "$(df . -P | tail -1 | awk '{print $1}')"检查是否含noexec
别踩这些常见坑
看似简单,但几个细节常导致失败:
- 误用大写 X:写成
chmod u+X script.sh—— 它只对目录或已有 x 的文件生效,普通脚本不会被加上执行位,容易以为命令没起作用 - 权限设过宽:比如直接
chmod 777 script.sh,不仅不必要,还可能被安全扫描工具告警;日常开发用u+x或755(所有者全权,组和其他人可读可执行)更合理 - 忘了检查属主:如果脚本属于 root,而你用普通用户执行
chmod,会提示 “Operation not permitted”,此时需加sudo(但要确认是否真有必要)











