Strange hang "ls -l" ou "dir -l" não funciona [fechado]

1

Eu tenho um comportamento estranho em um servidor Debian.

Contexto: Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux

Usuário: root

Os comandos ls , ls -a , ls -1 ou dir funcionam perfeitamente. Mas esses comandos ls -l , dir -l somente no diretório / , esses comandos de reboque suspendem o terminal.

    
por Vsplit 20.10.2016 / 15:39

2 respostas

2

ls / ls -a ... acabou de ler o conteúdo do diretório atual, ele não faz nada com os arquivos.

ls -l ou ls -F ou ls --color precisam obter informações de metadados dos próprios arquivos listados (permissão, tipo, propriedade, tempo de modificação ...). Portanto, além da chamada do sistema getdents() para ler o conteúdo do diretório, ele precisa fazer um lstat() para cada arquivo listado lá, e também um readlink() para links simbólicos (e um stat() também para links simbólicos com algumas implementações ls com -F ou --color ).

Para os + ou @ e outros sinalizadores de método de acesso alternativo opcionais encontrados algumas vezes após as permissões, talvez seja necessário fazer algumas chamadas de sistema extras (como getxattr() no Linux para recuperar ACLs).

Com ls -l , também é necessário consultar o banco de dados do usuário para converter uid e gid em nome de usuário e nome de grupo.

Assim, enquanto para um simples ls , só precisamos abrir um arquivo (o diretório de trabalho atual) e ler seu conteúdo, é fácil ver que há muito mais escopo para as coisas que falham com -l / -F / --color ...:

  • o lstat() pode falhar ou ser interrompido se o arquivo for um ponto de montagem em um sistema de arquivos indisponível.
  • o stat() em um symlink pode falhar se o destino do symlink estiver em um fs indisponível.
  • a consulta ao banco de dados do usuário pode falhar ou travar (como em implantações usando bancos de dados de usuários de rede (LDAP / NIS +).
por 20.10.2016 / 16:39
0

Uma das pastas no meu diretório / é uma pasta de volume, montada de outra máquina, esta foi desligada. O diretório montado era inatingível.

    
por 20.10.2016 / 16:06