está demorando muito em um diretório pequeno

está demorando muito em um diretório pequeno

Executando o Ubuntu, abro um terminal e faço

sudo bash
cd /
ls | head -n 1000

E previsivelmente cerca de 20 diretórios são retornados.

No entanto, se eu fizer um ls e não canalizá-lo para nada, o ls ficará pendurado até que eu o mate de outro terminal. O que poderia estar acontecendo?

EDITAR:

> type ls
ls is aliased to `ls --color=auto`

EDITAR:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

Por que colorir a saída de ls está fazendo com que este comando trave?

Responder1

Se você executar ls normalmente, ele mostrará apenas a lista de arquivos sem a necessidade de executar stat(2) em nenhum deles. Em outras palavras, ele não acessa os ARQUIVOS em si, mas apenas o diretório que contém os arquivos.

Se você adicionar a opção --color ou usar outras opções ls que precisam examinar os próprios arquivos, então ls precisará stat(2) esses arquivos.

Provavelmente pelo menos um dos arquivos do seu diretório está sendo montado a partir de um sistema remoto, via NFS ou similar. E o servidor a partir do qual você montou essa partição não está ativo ou não está respondendo. Portanto, quando ls tentar obter informações sobre esse diretório, ele ficará suspenso no kernel aguardando a resposta do servidor.

Como outros mencionaram, se você usar strace, descobrirá qual diretório ls está tentando acessar quando travar. Então você pode desmontar aquela partição montada ou algo assim.

informação relacionada