Scripts de shell exigem que a permissão de leitura seja executada, mas 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 scripts de shell, essas coisas são relacionadas porque são "executadas" por "leitura" em um novo shell (ou o atual), se você perdoar a simplificação. É por isso que você precisa lê-los. Binários não usam esse mecanismo.
Para diretórios, a permissão de execução é um pouco diferente; isso significa que você pode fazer coisas com arquivos dentro desse diretório (por exemplo, ler ou executá-los). Então, digamos que você tenha um conjunto de ferramentas em /tools
que você queira que as pessoas possam usar, mas somente se elas souberem sobre elas. %código%. Então, executáveis em chmod 711 /tools
podem ser executados explicitamente (por exemplo, /tools
), mas /tools/mytool
será negado. Da mesma forma, os documentos poderiam ser armazenados em ls /tools/
, o que poderia ser lido se e somente se os nomes dos arquivos fossem conhecidos.