Esta interpretação de permissões remonta aos primeiros sistemas de arquivos Unix. No começo, havia apenas arquivos. (Bem, e dispositivos, e pipes, e ... mas eu estou tentando contar uma história aqui, não ser 100% estritamente preciso; além disso, é tudo verdade para dispositivos e pipes e tudo mais porque tudo é um arquivo, mesmo diretórios).
Diretórios são apenas arquivos que o sistema de arquivos usa para armazenar os metadados que descrevem a árvore de diretórios e os arquivos nela contidos. Cada arquivo em um diretório foi descrito por uma estrutura de dados simples que continha espaço para um nome de arquivo (originalmente 14 caracteres, IIRC) junto com o número de inode onde os dados foram armazenados, o tamanho do arquivo, carimbos de data e hora. . Todos os diretórios começaram com duas entradas denominadas .
e ..
, a primeira apontando para o inode deste mesmo diretório e a segunda para o inode de seu diretório pai.
A palavra de permissão tinha nove bits para descrever o tratamento do proprietário, outros membros do mesmo grupo e do mundo. Os três bits para cada sinalizador, se o usuário relevante pode ler, gravar ou executar o arquivo. (Você pode notar que há mais cinco bits na palavra de permissão de 16 bits que estou ignorando. Eles acabaram recebendo significados atribuídos, mas isso não é relevante para essa parte da história.) (Além disso, essa interpretação dos nove bits permaneceu praticamente igual em todos os descendentes do início do Unix, incluindo Linux.
Assim, se um diretório é realmente apenas um tipo especial de arquivo e é descrito por uma entrada em algum diretório, ele obviamente também tem bits de permissão, e esses bits provavelmente significam algo. Mas a questão é exatamente o que. A maneira mais fácil de atribuir significado a esses bits é não alterar o que eles significam em primeiro lugar. E isso é essencialmente o que foi feito.
Portanto, o bit de leitura significa que o usuário pode ler o próprio diretório. Isso classicamente dá ao leitor acesso ao nome do arquivo, data e hora, tamanho e número de inode dos dados de cada arquivo. Especificamente, com r
set você pode usar ls
para ver os nomes de todos os arquivos no diretório, mas isso não é suficiente para abrir (ou usar de qualquer forma) qualquer um dos arquivos listados.
O bit de execução significa que o usuário pode "executar" o diretório. Como os diretórios são especiais, execute realmente significa procurar uma entrada pelo nome e usá-la. Isso significa que você pode tentar abrir os arquivos se x
estiver definido, mas sem r
você não conseguirá descobrir seus nomes. Naturalmente, as permissões do arquivo solicitado também afetam o acesso, portanto, mesmo com x
no diretório, você não poderá ler um arquivo, a menos que ele também ofereça r
.
O bit de gravação significa que o usuário pode gravar no diretório, mas naturalmente apenas mediado pelo próprio sistema de arquivos. Isso significa que com w
set você pode criar novos arquivos nesse diretório ou editar as entradas de diretório dos arquivos existentes. Mas sem x
set, você não pode realmente usar nenhum arquivo, e sem r
você não pode vê-los também.
À medida que modelos mais complicados de identidade do usuário evoluíram no Unix e seus descendentes, essas mesmas descrições básicas conseguiram permanecer notavelmente inalteradas.
Em suma, r
significa que você pode ver seu conteúdo, x
significa que você pode usá-lo e w
significa que você pode modificá-lo mesmo para diretórios.