Los scripts de shell requieren el permiso de lectura para ejecutarse, pero los archivos binarios no:
$ 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
Mostrar los contenidos de un archivo y ejecutarlos son dos cosas diferentes. Con los scripts de shell, estas cosas están relacionadas porque se "ejecutan" "leyéndolas" en un nuevo shell (o el actual), si perdona la simplificación. Es por eso que necesita poder leerlos. Los binarios no usan ese mecanismo.
Para los directorios, el permiso de ejecución es un poco diferente; significa que puede hacer cosas a los archivos dentro de ese directorio (por ejemplo, leerlos o ejecutarlos). Entonces, supongamos que tiene un conjunto de herramientas en el /tools
que desea que las personas puedan usar, pero solo si saben de ellas. chmod 711 /tools
. Luego, las cosas ejecutables /tools
pueden ejecutarse explícitamente (por ejemplo /tools/mytool
), pero ls /tools/
serán denegadas. Del mismo modo, se podrían almacenar documentos en los /private-docs
que se podrían leer si y solo si se conocen los nombres de los archivos.