Сценарии оболочки требуют выполнения разрешения на чтение, но двоичные файлы этого не делают:
$ 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
Отображение содержимого файла и его выполнение - это две разные вещи. С сценариями оболочки эти вещи связаны, потому что они «выполняются» путем «чтения» их в новую оболочку (или текущую), если вы простите упрощение. Вот почему вы должны иметь возможность читать их. Двоичные файлы не используют этот механизм.
Для каталогов разрешение на выполнение немного отличается; это означает, что вы можете делать что-то с файлами в этом каталоге (например, читать или выполнять их). Допустим, у вас есть набор инструментов, /tools
которые вы хотите, чтобы люди могли использовать, но только если они знают о них. chmod 711 /tools
, Тогда исполняемые файлы /tools
могут быть запущены явно (например /tools/mytool
), но ls /tools/
будут отклонены. Точно так же могут храниться документы, /private-docs
которые можно прочитать, если и только если известны имена файлов.