我的 home 文件夹里有一个名为:foo.sh
的脚本
导航到这个文件夹,并输入./foo.sh
:
-bash: ./foo.sh: Permission denied
当我使用sudo ./foo.sh
:
sudo: foo.sh: command not found
为什么会发生这种情况?
原文由 Neko 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
1 回答3.6k 阅读
没有权限
运行脚本,文件必须 设置可执行许可位。
想要更好的理解 Linux 文件权限,可以研究
chmod
命令的文档。 chmod 是 change mode 的缩写,是用于更改文件权限设置的命令。要阅读本地系统的 chmod 文档,请从命令行运行
man chmod
或info chmod
。一旦阅读并理解,应该能够理解运行的输出.........这将列出文件所有者、组所有者以及不是文件所有者或文件所属组成员的其他所有人的 READ、WRITE 和 EXECUTE 权限(有时称为最后一个权限组作为“world”或“other”)
以下是如何解决提问案例中 Permission Denied 错误 的说明。
Owner 具有读写权限 rw 但 - 表示缺少可执行权限
chmod
命令修复了这个问题。 (group和other只对文件设置了读取权限,不能写入或执行它)就 Linux 而言,
foo.sh
现在是可执行的。使用 sudo 导致找不到命令
使用 sudo 运行命令时,实际上是以超级用户或 root 身份运行它。
root 用户没有找到你的命令的原因可能是
PATH
root 的环境变量不包括 _foo.sh
所在的目录_。因此找不到该命令。PATH 环境变量包含搜索命令的目录列表。每个用户根据自己的需要设置自己的 PATH 变量。查看它设置为运行什么
以下是运行上述
env
命令的一些示例输出,首先以普通用户身份运行,然后以 root 用户身份使用 sudo请注意,虽然相似,但在这种情况下,非特权用户 (rkielty) 和超级用户在 PATH 中包含的目录 _并不相同_。
foo.sh
所在的目录不在 root 用户的 PATH 变量中,因此 找不到命令 错误。