![Por que ls -al de repente demora muito?](https://rvso.com/image/1481852/Por%20que%20ls%20-al%20de%20repente%20demora%20muito%3F.png)
De repente, ls -al
leva um tempo irritante, um normal ls
é tão rápido como de costume.
Qual pode ser o problema?
Responder1
Quando ls
é executado, ele mostra apenas uma lista de arquivos e nada mais. ls -al
por outro lado, mostra muito mais informações e, para isso, é necessárioestatística(1)esses arquivos.
E se algo estiver errado com o arquivo, essa operação pode levar muito tempo.
Meu problema era que o grupo de alguns arquivos não existia mais
-rw------- 1 nifle 10001 21499 Jan 25 14:31 .bash_history
-rw-r--r-- 1 nifle 10001 304 Dec 6 2004 .bash_logout
-rw-r--r-- 1 nifle 10001 222 Dec 16 14:05 .bash_profile
-rw-r--r-- 1 nifle 10001 124 Dec 6 2004 .bashrc
Um simples chown nifle:nifle .bash*
resolveu o problema.
Responder2
Às vezes, pode ser um alias, processamento adicional por shell ou acesso lento ao dispositivo de armazenamento.
No meu, tenho como alias:
$ type ls
ls is aliased to `ls $LS_OPTIONS'
se for esse o caso, correr como \ls -al
poderia chamá-lo diretamente.
Para o processamento do shell, você pode verificá-lo ativando o rastreamento do shell, por exemplo
$ set -x
$ ls
+ ls -G -h
README.txt index.php
++ update_terminal_cwd
++ local url_path=
++ local i ch hexch LC_CTYPE=C LC_ALL=
++ (( i = 0 ))
++ (( i < 26 ))
++ ch=/
++ [[ / =~ [/._~A-Za-z0-9-] ]]
++ url_path+=/
++ (( ++i ))
++ (( i < 26 ))
++ ch=U
++ [[ U =~ [/._~A-Za-z0-9-] ]]
++ url_path+=U
++ (( ++i ))
++ (( i < 26 ))
++ ch=s
... hundred of other lines
$ set +x
$ echo $PROMPT_COMMAND
update_terminal_cwd
Por fim, verifique seus ls
horários:
$ time ls -la
...
real 0m0.025s
user 0m0.001s
sys 0m0.004s
Se o seu sys
tempo for muito alto, verifique load avg
no top
comando se alguma coisa está deixando sua máquina lenta no momento, como alternativa, faça um benchmark do seu disco rígido, talvez você tenha muitas solicitações de E/S em andamento (verifique por: iotop
ou vmstat
).
Se isso acontecer com frequência, verifique sempre com um shell diferente ou na partição tmpfs ( /tmp
), que deve ser muito mais rápida.