ls занимает много времени в маленьком каталоге

ls занимает много времени в маленьком каталоге

Запускаю Ubuntu, открываю терминал и делаю

sudo bash
cd /
ls | head -n 1000

И, как и ожидалось, возвращается около 20 каталогов.

Однако, если я делаю ls и не перенаправляю его куда-либо, ls просто висит там, пока я не убью его из другого терминала. Что может происходить?

РЕДАКТИРОВАТЬ:

> type ls
ls is aliased to `ls --color=auto`

РЕДАКТИРОВАТЬ:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

Почему раскрашивание вывода ls приводит к зависанию этой команды?

решение1

Если вы запустите ls обычным образом, он просто покажет список файлов без необходимости запуска stat(2) для любого из них. Другими словами, он не обращается к самим ФАЙЛАМ, а только к каталогу, содержащему файлы.

Если вы добавите опцию --color или используете другие опции ls, которые требуют проверки самих файлов, то ls необходимо будет выполнить stat(2) для этих файлов.

Скорее всего, по крайней мере один из файлов в вашем каталоге фактически монтируется с удаленной системы, через NFS или что-то подобное. А сервер, с которого вы смонтировали этот раздел, не работает или не отвечает. Поэтому, когда ls пытается получить информацию об этом каталоге, он зависает в ядре, ожидая ответа сервера.

Как уже упоминали другие, если вы используете strace, вы узнаете, к какому каталогу ls пытается получить доступ, когда он зависает. Затем вы можете размонтировать этот смонтированный раздел или что-то в этом роде.

Связанный контент