Eu criei um diretório d
e um arquivo f
dentro dele. Então, eu me dei apenas permissões de leitura nesse diretório. Entendo que isso deva significar que posso listar os arquivos (por exemplo, aqui ), mas não posso.
will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x 3 will wheel 102 4 Oct 08:30 .
drwxrwxrwt 16 root wheel 544 4 Oct 08:30 ..
dr-------- 3 will wheel 102 4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>
Se eu alterar as permissões para gravar e executar, posso ver o arquivo.
will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions>
Por que é isso? Estou usando o MacOS.
Editar: com referência à resposta da @ ccorn, é relevante que eu esteja usando peixe e type ls
forneça o seguinte:
will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
command ls -G $argv
end
permissions
osx
fish
wrgrs
fonte
fonte
alias ls='ls -G'
, o que eu acho que muitas pessoas fazem.Respostas:
Alguns preparativos, apenas para garantir que
ls
não tente mais coisas do que deveria:Demonstração da
r
permissão do diretório:Nos sistemas de arquivos Unix tradicionais, um diretório era simplesmente uma lista de pares (nome, número de inode). Um número de inode é um número inteiro usado como índice na tabela de inodes do sistema de arquivos onde o restante dos metadados do arquivo é armazenado.
A
r
permissão em um diretório permite listar os nomes, mas não acessar as informações armazenadas na tabela de inodes, ou seja, obter tipo de arquivo, comprimento, permissões de arquivo etc. ou abrir o arquivo. Para isso, você precisa dax
permissão no diretório.É por isso que
ls -l
,ls -F
,ls
com a saída de código de cores etc falhar semx
permissão, enquanto que um merols
bem-sucedido.A
x
permissão só permite o acesso inode, ou seja, dada um nome explícito dentro desse diretório,x
permite olhar para cima sua inode eo acesso que os metadados do diretório entrada:Portanto, para abrir um arquivo
/a/b/c/f
ou listar seus metadados, a diretórios/
,/a
,/a/b
, e/a/b/c
deve ser concedidox
permissão.Não é novidade que a criação de entradas de diretório precisa de permissões
w
e dex
:A Wikipedia tem uma breve visão geral em um artigo sobre permissões do sistema de arquivos .
fonte
/bin/ls d
mostra o conteúdo para mim. Obrigado!-G
saída colorida, que precisa de metadados, portantox
permanentes). Portanto, meus preparativos comunalias ls
eunset CLICOLOR
. Eu deveria ter adicionadounset -f ls
para remover qualquer definição de função também. Editado.Para ler um diretório, você também precisa atravessá-lo (o bit x). Portanto, no mínimo, você precisa de rx para que um diretório possa acessá-lo de qualquer maneira.
fonte
ls
ainda deve poder listar os arquivos no diretório, mesmo que o diretório não seja executável.