Ejecutando Ubuntu, abro una terminal y hago
sudo bash
cd /
ls | head -n 1000
Y previsiblemente se devuelven unos 20 directorios.
Sin embargo, si hago un ls, y no lo canalizo a nada, el ls simplemente se cuelga allí hasta que lo mato desde otra terminal. ¿Qué podría estar pasando?
EDITAR:
> type ls
ls is aliased to `ls --color=auto`
EDITAR:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
¿Por qué colorear el resultado de ls hace que este comando se bloquee?
shell
command-line
files
ls
Snitse
fuente
fuente
type ls
para verificar cualquier posible alias, etc.strace ls
puede ayudarlo a identificar el problema.strace
muestra todas las llamadas al sistema realizadas por el programa que invoca./bin/ls
(o más biencommand ls
) ejecutarls
sin las opciones con alias, para confirmar si es la opción de color la que está marcando la diferencia. FWIW,ls
apaga la coloración cuando su salida es una tubería u otro dispositivo no terminal.\ls
Respuestas:
Si ejecuta ls normalmente, solo mostrará la lista de archivos sin necesidad de ejecutar stat (2) en ninguno de ellos. En otras palabras, no accede a los ARCHIVOS, sino solo al directorio que contiene los archivos.
Si agrega la opción --color, o usa otras opciones ls que necesitan examinar los archivos, entonces ls necesitará stat (2) esos archivos.
Lo más probable es que al menos uno de los archivos en su directorio se esté montando desde un sistema remoto, a través de NFS o similar. Y el servidor desde el que ha montado esa partición no está activo o no responde. Entonces, cuando ls intenta obtener la información sobre ese directorio, se colgará en el kernel esperando que el servidor responda.
Como otros han mencionado, si usa strace, descubrirá a qué directorio ls está intentando acceder cuando se cuelga. Entonces puedes desmontar esa partición montada o lo que sea.
fuente
sshfs
monturas, y la única forma en que podía desmontarlas era matando los procesosssh
y los relacionadossshfs
.