Algumas preparações, apenas para garantir que ls não tente mais coisas
do que deveria:
$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR
Demonstração da permissão do diretório r :
$ ls -ld d
dr-------- 3 ccorn ccorn 102 4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied
Nos sistemas de arquivos Unix tradicionais, um diretório era simplesmente uma lista de (nome, inode número) pares. Um número de inode é um inteiro usado como índice no sistema de arquivos tabela de inodes onde o restante dos metadados do arquivo é armazenado.
A permissão r em um diretório permite listar os nomes,
mas não para acessar as informações armazenadas na tabela de inode, isto é,
obtendo o tipo de arquivo, tamanho do arquivo, permissões de arquivo etc ou abrindo o arquivo.
Para isso, você precisa da permissão x no diretório.
É por isso que ls -l , ls -F , ls com saída codificada por cores etc. falha
sem x permissão, enquanto um mero ls é bem-sucedido.
A permissão x sozinha permite acesso ao inode, ou seja, dado um
nome dentro desse diretório, x permite procurar seu inode e acessar os metadados dessa entrada de diretório:
$ chmod 100 d
$ ls -l d/f
-rw-r--r-- 1 ccorn ccorn 0 4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied
Portanto, para abrir um arquivo /a/b/c/f ou listar seus metadados,
os diretórios / , /a , /a/b e /a/b/c devem receber a permissão x .
w e x permissions:
$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$
A Wikipedia tem uma breve visão geral em um artigo sobre permissões do sistema de arquivos .