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 sl, e não o colocar em nada, o sl apenas fica lá até eu o matar em 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á causando a interrupção desse comando?
shell
command-line
files
ls
Snitse
fonte
fonte
type ls
para verificar possíveis aliases etc.strace ls
pode potencialmente ajudar a identificar o problema.strace
exibe todas as chamadas do sistema feitas pelo programa que ele chama./bin/ls
(ou melhor,command ls
) executarls
sem as opções com alias, para confirmar se é ou não a opção de cor que está fazendo a diferença. FWIW,ls
desativa a coloração quando sua saída é um tubo ou outro dispositivo não terminal.\ls
Respostas:
Se você executar ls normalmente, ele mostrará apenas a lista de arquivos sem a necessidade de executar o stat (2) em nenhum deles. Em outras palavras, ele não acessa os próprios 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 precisam examinar os arquivos, então ls precisará declarar (2) esses arquivos.
Provavelmente, pelo menos um dos arquivos em seu diretório está realmente sendo montado em 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. Portanto, quando o ls tenta obter as informações sobre esse diretório, ele fica travado no kernel, aguardando a resposta do servidor.
Como outros já mencionaram, se você usar o strace, descobrirá qual diretório o ls está tentando acessar quando trava. Então você pode desmontar a partição montada ou o que for.
fonte
sshfs
montarias, e a única maneira de desmontá-las era matando os relacionadosssh
e ossshfs
processos.