“仅执行”文件权限的有效用例是什么?

pop*_*nja 21 permissions chmod executable files

我正在阅读 chmod 及其八进制模式。我看到那1只是执行。仅执行权限的有效用例是什么?要执行文件,通常需要读取和执行权限。

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo
Run Code Online (Sandbox Code Playgroud)

Dop*_*oti 43

Shell 脚本需要读取权限才能执行,但二进制文件不需要:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission
Run Code Online (Sandbox Code Playgroud)

显示文件的内容和执行它们是两件不同的事情。对于 shell 脚本,这些东西是相关的,因为它们是通过将它们“读”到一个新的 shell(或当前的 shell)中来“执行”的,如果你能原谅简化的话。这就是为什么你需要能够阅读它们。二进制文件不使用这种机制。

对于目录,执行权限稍有不同;这意味着你可以做一些事情来的文件该目录(例如读取或执行它们)。因此,假设您有一组工具/tools,您希望人们能够使用这些工具,但前提是他们知道这些工具。chmod 711 /tools. 然后可执行的东西/tools可以显式运行(例如/tools/mytool),但ls /tools/会被拒绝。类似地,/private-docs当且仅当文件名已知时,可以将文档存储在其中可以读取。