ls demorando muito tempo no diretório pequeno

18

Rodando o Ubuntu, eu 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á parado 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 faz com que esse comando seja interrompido?

    
por Snitse 29.03.2012 / 18:12

1 resposta

25

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

Se você adicionar a opção --color, ou usar outras opções ls que precisem examinar os arquivos, ls precisará declarar (2) esses arquivos.

Provavelmente pelo menos um dos arquivos em seu diretório está sendo montado a partir de um sistema remoto, via NFS ou similar. E o servidor do qual você montou essa partição não está ativo ou não está respondendo. Então, quando o ls tenta obter as informações sobre esse diretório, ele fica pendurado no kernel esperando que o servidor responda.

Como outros já mencionaram, se você usar strace, descobrirá qual diretório o ls está tentando acessar quando ele é interrompido. Então você pode desmontar essa partição montada ou o que quer que seja.

    
por 29.03.2012 / 20:41