
De repente ls -al
lleva un tiempo irritantemente largo, lo normal ls
es tan rápido como de costumbre.
Cuál puede ser el problema?
Respuesta1
Cuando ls
se ejecuta, solo muestra una lista de archivos y nada más. ls -al
por 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 -al
podrí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 ls
tiempos:
$ time ls -la
...
real 0m0.025s
user 0m0.001s
sys 0m0.004s
Si su sys
tiempo es demasiado alto, verifique load avg
en top
el 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: iotop
o 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.