验证开机启动脚本执行权限的关键是检查x位、用户归属匹配及解释器有效性:一查ls -l确认-rwxr-xr-x;二验sudo -u root ls -l确保root可访问;三测shebang指向的解释器是否存在且可执行。

验证开机启动项脚本的执行权限,关键不是“有没有写权限”,而是系统启动时能不能真正运行它——而这取决于 是否具备可执行位(x)、归属用户是否匹配启动上下文、以及解释器路径是否有效。下面分三步直接查、快速判、稳修复。
一、检查脚本是否带执行权限(x位)
在终端中运行:
ls -l /path/to/your/script.sh
重点看最左边10个字符的第4、7、10位(分别对应所有者、所属组、其他人的权限):
- ✅ 正确示例:-rwxr-xr-x → 第4位(所有者)、第7位(组)、第10位(其他)都是 x,表示可执行
- ❌ 常见错误:-rw-r--r-- → 没有任何 x,脚本无法被直接调用(即使内容是合法bash)
若无 x,立即补上:
sudo chmod +x /path/to/your/script.sh
二、确认脚本归属与启动用户匹配
开机启动时,脚本通常由 root 执行(如 rc.local、systemd service 默认、init.d 脚本)。如果脚本或它要访问的文件(比如日志目录、配置文件、Python 环境)属于普通用户且权限过严,root 就会失败。
验证方法:
sudo -u root ls -l /path/to/your/script.sh
再顺手试一下脚本里依赖的关键路径,例如:
sudo -u root ls -l /home/youruser/.bashrc
如果返回 Permission denied,说明 root 无法读取该路径——这时要么放宽目录权限(如 chmod 755 /home/youruser),要么把脚本和依赖资源移到 root 可访问位置(如 /usr/local/bin/ 或 /opt/)。
三、验证解释器是否存在且可执行
脚本第一行(shebang)必须指向真实存在的解释器,且该解释器本身也要有执行权限。常见错误是写了 #!/usr/bin/env bash,但 env 不在最小启动 PATH 中;或写了 #!/bin/bash,但实际系统用的是 /usr/bin/bash。
安全做法是用绝对路径并手动验证:
ls -l /bin/bash
sudo -u root /bin/bash --version
如果报错“Command not found”或“No such file”,就说明 shebang 不匹配。此时改脚本首行为:
#!/usr/bin/env bash 或 #!/bin/sh(更轻量、兼容性更强)
不复杂但容易忽略。











