Por que ls -al de repente demora muito?

Por que ls -al de repente demora muito?

De repente, ls -alleva 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 -alpor 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 -alpoderia 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 lshorários:

$ time ls -la
...
real    0m0.025s
user    0m0.001s
sys     0m0.004s

Se o seu systempo for muito alto, verifique load avgno topcomando 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: iotopou 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.

informação relacionada