¿Por qué ls -al de repente tarda tanto tiempo?

¿Por qué ls -al de repente tarda tanto tiempo?

De repente ls -allleva un tiempo irritantemente largo, lo normal lses tan rápido como de costumbre.

Cuál puede ser el problema?

Respuesta1

Cuando lsse ejecuta, solo muestra una lista de archivos y nada más. ls -alpor otro lado muestra mucha más información, y para ello tiene queestadística(1)esos archivos.

Y si algo anda mal con el archivo, esa operación puede llevar mucho tiempo.

Mi problema era que el grupo de algunos de los archivos ya no existía.

-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

Un simple chown nifle:nifle .bash*solucionó el problema.

Respuesta2

A veces puede ser un alias, un procesamiento adicional por parte del shell o un acceso lento al dispositivo de almacenamiento.

En el mío lo tengo como alias:

$ type ls
ls is aliased to `ls $LS_OPTIONS'

Si ese es el caso, ejecutar as \ls -alpodría llamarlo directamente.

Para el procesamiento del shell, puede comprobarlo activando el rastreo del shell, por ejemplo

$ 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

Finalmente revisa tus lstiempos:

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

Si su systiempo es demasiado alto, verifique load avgen topel comando si hay algo que esté ralentizando su máquina en este momento; alternativamente, compare su disco duro, tal vez tenga muchas solicitudes de E/S en curso (verifique con: iotopo vmstat).

Si esto sucede con frecuencia, verifique siempre con un shell diferente o en la partición tmpfs ( /tmp), lo cual debería ser mucho más rápido.

información relacionada