Os scripts de shell exigem a permissão de leitura para serem executados, mas os arquivos binários não:
$ 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
Exibir o conteúdo de um arquivo e executá-lo são duas coisas diferentes. Com os scripts de shell, essas coisas estão relacionadas porque são "executadas" pela "leitura" delas em um novo shell (ou no atual), se você perdoar a simplificação. É por isso que você precisa ser capaz de lê-los. Os binários não usam esse mecanismo.
Para diretórios, a permissão de execução é um pouco diferente; significa que você pode fazer coisas com arquivos dentro desse diretório (por exemplo, lê-los ou executá-los). Então, digamos que você tenha um conjunto de ferramentas em /tools
que deseja que as pessoas possam usar, mas apenas se elas souberem. chmod 711 /tools
. Em seguida, as coisas executáveis /tools
podem ser executadas explicitamente (por exemplo /tools/mytool
), mas ls /tools/
serão negadas. Da mesma forma, os documentos podem ser armazenados nos /private-docs
quais podem ser lidos se e somente se os nomes dos arquivos forem conhecidos.