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.