'ls' comportamento no erro EACCES para / root e / root / some-lixo

1

Estou tentando codificar um clone do comando ls como parte de um exercício escolar. Eu estou querendo saber porque a seguinte saída é exibida por ls :

$> ls -- -test_dir  /root /root/some-rubbish
ls: /root/some-rubbish: Permission denied
-test_dir:
test.txt

/root:
ls: root: Permission denied

Especificamente, notei que quando a pasta pesquisada tem mais de uma "parte", ou seja, quando ela tem pelo menos um / entre duas partes alfanuméricas, como that/folder , então EACCES errors seja exibido no topo. Caso contrário, eles são exibidos em ordem alfabética, como qualquer outro diretório listado.

Atualmente estou testando isso no OSX 10.8, se isso faz alguma diferença.

Espero que o acima seja claro o suficiente. Se não, tentarei esclarecer.

    
por conradkdotcom 29.11.2013 / 16:53

1 resposta

3

O conjunto inicial de mensagens de erro é produzido quando ls faz um lstat() de cada um dos seus argumentos. Um argumento que não existe ou que não pode ser acessado porque um ou mais de seus diretórios pai é não pesquisável (não tem o bit 'x' apropriado) são alguns exemplos onde lstat() falhará e um mensagem de erro será produzida.

Objetos na lista de argumentos para os quais lstat() falham são removidos da lista de argumentos.

Depois disso, cada argumento tem seu nome impresso e (a menos que você tenha dado ls a opção -d ), cada argumento que é um diretório tem seu nome, um ':' e seu conteúdo impresso. Se um diretório não for pesquisável, ls exibirá uma mensagem de erro neste momento. /root provavelmente é capaz de ser lstat mas não pode ser pesquisado por usuários não-root.

    
por 29.11.2013 / 22:27