Quando você executa ls *
, a primeira coisa que acontece é que o shell obtém uma listagem do diretório atual. Se o diretório for enorme e o servidor estiver lento, isso pode demorar um pouco.
Quando o shell obtiver a lista de nomes de arquivos no diretório atual, ele classificará essa lista (que é muito rápida comparada a qualquer interação de rede) e, em seguida, chamará ls
. O comando ls
pesquisa cada arquivo e recupera seus metadados ( stat
call) para verificar se é um diretório; se um arquivo é um diretório, ls
lista seu conteúdo em vez do próprio diretório.
Quando você pressionar Ctrl + C , isso não interromperá a operação atual do NFS. Você não pode interromper uma operação do sistema de arquivos em qualquer lugar, pois isso pode deixar o sistema em um estado inconsistente. Mesmo lendo um arquivo pode atualizar seu tempo de acesso. Na maioria das vezes, uma operação elementar de leitura ou gravação em um arquivo é instantânea por padrões humanos, mas o NFS é uma exceção, especialmente com grandes quantidades de dados em uma rede lenta.
Assim, pressionar Ctrl + C só terá efeito:
- se o shell estiver gerando atualmente a lista de nomes de arquivos, quando essa lista for totalmente recuperada;
- se
ls
tiver sido iniciado e estiver atualmente obtendo metadados sobre um arquivo, quando o servidor fornecer os metadados; - se
ls
tiver sido iniciado e estiver listando atualmente um diretório, quando a lista for totalmente recuperada ou, pelo menos, após uma parte dela.
Não é culpa do comando ls
(que pode nem ter sido iniciado ainda). Nem é culpa da shell: é culpa do NFS. O NFS é bem lento.