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 .