为什么将目录路径作为命令运行会返回“权限被拒绝”而不是“找不到命令”?

为什么将目录路径作为命令运行会返回“权限被拒绝”而不是“找不到命令”?

我是一个红帽盒子,我注意到如果我不小心输入了前面没有 dir的路径,我会得到一个;然而,我希望它会说。就像我输入了一些废话一样:cd/path/to/dir/: Permission denied./path/to/dir/: Command not found

$ sldkfjsd
sldkfjsd: Command not found.

这有什么目的?如果我以超级用户身份运行 adir作为命令(我没有sudo访问权限),会发生什么?

答案1

这是权限被拒绝,因为您没有权限以这种方式执行目录。通常,当您仅在 CLI 上输入某个文件的名称而没有其他任何内容时,这意味着您想要执行它。但对于目录来说,执行权限有不同的含义,这就是为什么你没有执行它的权限。

事实上,执行一个目录通常需要列出它的文件索引,但你不能像运行二进制可执行文件那样运行它。

有一个名为 的可执行文件/bin/ls,因此如果您/bin/ls在 CLI 上输入,它将调用该可执行文件并运行它。现在,如果您尝试输入/bin(目录),那么 Bash 也会执行相同的操作并尝试像可执行文件一样调用它,但您没有权限像可执行文件一样执行它,因为它是一个目录。

答案2

就像您尝试运行 PNG 图像或任何其他没有意义的运行一样,这是不允许的。对于文件来说,一个文件可以通过权限位使其可执行,因为它可能包含程序(所有命令实际上都是碰巧包含机器代码并且可执行的常规文件)。运行目录或硬盘永远没有意义。因此没有许可。

相关内容