“ls” está dando um erro de “Permissão negada” embora tenha funcionado? [duplicado]

5

Eu tenho um diretório que tem o bit de permissão r :

dr-------- 3 robert robert 4096 2017-12-17 03:47 dir

Este diretório tem dois arquivos e um diretório:

file 1.txt  file 2.txt  subdir

Quando executo o comando ls dir (da conta robert ), recebo um erro ao lado do conteúdo do diretório:

ls: cannot access dir/file 1.txt: Permission denied
ls: cannot access dir/file 2.txt: Permission denied
ls: cannot access dir/subdir: Permission denied
file 1.txt  file 2.txt  subdir

Por que ls exibiu um erro, embora também exibisse o conteúdo do diretório sem problemas?

    
por user9002947 17.12.2017 / 11:12

1 resposta

12

ls chamadas readdir() (ou getdents() ) no próprio diretório, o que equivale a "ler" o diretório. Acho que alguns Unixes implementam isso como chamadas reais para read() , como se o diretório fosse um arquivo. Isso funciona, desde que você tenha permissão de leitura para o diretório, mas só dá os nomes dos arquivos.

Além disso, ls geralmente deseja encontrar os tipos de arquivos (para mostrar diferentes tipos com cores diferentes ou para colocar barras e asteriscos etc. com ls -F ). Mas encontrar o tipo geralmente requer chamar stat() nos próprios arquivos, e isso requer permissão de acesso ( +x ) para o diretório, da mesma maneira que a abertura dos arquivos requereria. E você não tem isso.

    
por 17.12.2017 / 11:53