Está tardando mucho en un directorio pequeño.

Está tardando mucho en un directorio pequeño.

Al ejecutar Ubuntu, abro una terminal y hago

sudo bash
cd /
ls | head -n 1000

Y, como era de esperar, se devuelven unos 20 directorios.

Sin embargo, si hago un ls y no lo conecto a nada, el ls simplemente se cuelga allí hasta que lo elimine 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 la salida de ls hace que este comando se cuelgue?

Respuesta1

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 en sí, sino sólo al directorio que contiene los archivos.

Si agrega la opción --color, o usa otras opciones de ls que necesitan examinar los archivos en sí, entonces ls necesitará stat(2) esos archivos.

Lo más probable es que al menos uno de los archivos de su directorio se esté montando desde un sistema remoto, a través de NFS o similar. Y el servidor desde el que montó esa partición no está activo o no responde. Entonces, cuando ls intenta obtener información sobre ese directorio, se bloqueará en el kernel esperando que el servidor responda.

Como otros han mencionado, si usa strace, descubrirá a qué directorio intenta acceder ls cuando se bloquea. Luego puedes desmontar esa partición montada o lo que sea.

información relacionada