Запустив 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 вызывает зависание этой команды?
shell
command-line
files
ls
Snitse
источник
источник
type ls
чтобы проверить любые возможные псевдонимы и т. Д.strace ls
может потенциально помочь вам определить проблему.strace
отображает все системные вызовы, сделанные программой, которую она вызывает./bin/ls
(или, скорее,command ls
), чтобы запуститьls
без псевдонимов, чтобы убедиться, что это цвет вариант, который имеет значение. FWIW,ls
отключает окраску, когда его выход представляет собой трубу или другое нетерминальное устройство.\ls
Ответы:
Если вы запустите ls нормально, он просто покажет список файлов без необходимости запуска stat (2) для любого из них. Другими словами, он не обращается к самим ФАЙЛАМ, а только к каталогу, содержащему файлы.
Если вы добавите опцию --color или воспользуетесь другими опциями ls, которые должны проверять сами файлы, то ls потребуется stat (2) для этих файлов.
Скорее всего, по крайней мере один из файлов в вашем каталоге на самом деле монтируется из удаленной системы, через NFS или аналогичный. И сервер, с которого вы смонтировали этот раздел, не работает или не отвечает. Таким образом, когда ls пытается получить информацию об этом каталоге, он зависает в ядре, ожидая ответа сервера.
Как уже упоминалось, если вы используете strace, вы узнаете, к какому каталогу ls пытается получить доступ, когда зависает. Затем вы можете размонтировать этот смонтированный раздел или что-то еще.
источник
sshfs
маунты, и единственным способом, которым я мог их демонтировать, было уничтожение связанных с нимиssh
иsshfs
процессов.