Сценарії оболонки вимагають виконання дозволу на читання, але двійкові файли не:
$ 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
яких можна було прочитати, якщо і лише тоді, коли відомі назви файлів.