x bit para directorio también se llama como bit de búsqueda. En realidad, le permite acceder a los inodos de los archivos enumerados dentro de la carpeta. Entonces, si desea acceder a /home/user/foo/bar.txt, debe tener acceso de búsqueda en cada antepasado de bar.txt
Citando desde la página
Debido a que los directorios no se usan de la misma manera que los archivos normales, los permisos funcionan de manera diferente (pero solo ligeramente). Un intento de listar los archivos en un directorio requiere permiso de lectura para el directorio, pero no en los archivos dentro. Un intento de agregar un archivo a un directorio, eliminar un archivo de un directorio, o cambiar el nombre de un archivo, todos requieren permiso de escritura para el directorio, pero (quizás sorprendentemente) no para los archivos dentro. El permiso de ejecución no se aplica a los directorios (un directorio no puede ser también un programa). Pero ese bit de permiso se reutiliza para directorios para otros fines.
Se necesita permiso de ejecución en un directorio para poder crear un CD en él (es decir, hacer que algún directorio sea su directorio de trabajo actual).
Se necesita ejecutar en un directorio para acceder a la información de inodo de los archivos que contiene. Necesita esto para buscar en un directorio para leer los inodos de los archivos dentro. Por esta razón, el permiso de ejecución en un directorio a menudo se denomina permiso de búsqueda.
Se requiere permiso de búsqueda en muchas situaciones comunes. Considere el comando cat / home / user / foo. Este comando claramente requiere permiso de lectura para el archivo foo. Pero a menos que tenga permiso de búsqueda en los directorios /, / home y / home / user, cat no puede localizar el inodo de foo y, por lo tanto, no puede leerlo. Necesita permiso de búsqueda en cada directorio ancestral para acceder al inodo de cualquier archivo (o directorio), y no puede leer un archivo a menos que pueda acceder a su inodo.
Por favor lea más en sección del directorio de permisos de archivos.
Actualización: Leo hizo una muy buena pregunta. Si conocemos el inodo, ¿podemos acceder a un archivo desde un directorio que tiene un bit x sin establecer? Creo que no deberíamos poder hacerlo. No lo probé con el programa c, sino que utilicé algunos comandos bash útiles para confirmarlo.
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775