Os diretórios têm duas permissões de leitura diferentes. Você tem a permissão de leitura padrão, como acontece com arquivos. Isso impede que você faça um opendir () / readdir () no diretório. Isso basicamente impede que você faça um ls no diretório. Você ainda pode acessar os subdiretórios se souber o nome deles. Você também tem a permissão de execução, que no caso de diretórios impede que você acesse os arquivos dentro deles. Você não pode alterar o diretório para um diretório para o qual não tem permissão de execução e não pode acessar nada sob ele, mas ainda pode ler o conteúdo.
# mkdir -p read/subdirectory
# mkdir -p execute/subdirectory
# chmod o-x execute/
# chmod o-r read
# logout
% ls -ld read/ execute/
drwxr-xr-- 3 root root 4096 2009-10-20 14:43 execute/
drwxr-x--x 3 root root 4096 2009-10-20 14:43 read/
% ls read
ls: cannot open directory read: Permission denied
% ls execute
ls: cannot access execute/subdirectory: Permission denied
subdirectory
% cd read/subdirectory
% cd -
% cd execute/subdirectory
bash: cd: execute/subdirectory: Permission denied
Você notará que ls execute
exibe um erro e o subdiretório. A razão é que ls tem permissão para ler o diretório de execução e descobrir o subdiretório, mas ls irá declarar o subdiretório e obter uma permissão negada lá.