Uruchamiając Ubuntu, otwieram terminal i robię
sudo bash
cd /
ls | head -n 1000
I przewidywalnie zwracanych jest około 20 katalogów.
Jeśli jednak zrobię ls i nie podłączę go do niczego, ls po prostu wisi tam, dopóki nie zabiję go z innego terminalu. Co może się dziać?
EDYTOWAĆ:
> type ls
ls is aliased to `ls --color=auto`
EDYTOWAĆ:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
Dlaczego kolorowanie wyjścia ls powoduje zawieszenie się tego polecenia?
shell
command-line
files
ls
Snitse
źródło
źródło
type ls
aby sprawdzić ewentualne aliasy itp.strace ls
może potencjalnie pomóc zidentyfikować problem.strace
wyświetla wszystkie wywołania systemowe wykonane przez program, który wywołuje./bin/ls
(a raczejcommand ls
) uruchomićls
bez opcji aliasu, aby potwierdzić, czy to opcja koloru robi różnicę. FWIW,ls
wyłącza kolorowanie, gdy jego wyjściem jest potok lub inne urządzenie nieterminalne.\ls
Odpowiedzi:
Jeśli uruchomisz ls normalnie, po prostu wyświetli listę plików bez konieczności uruchamiania stat (2) na żadnym z nich. Innymi słowy, nie uzyskuje dostępu do samych PLIKÓW, a jedynie do katalogu zawierającego pliki.
Jeśli dodasz opcję --color lub użyjesz innych opcji ls, które same muszą zbadać pliki, ls będzie musiał stat (2) te pliki.
Najprawdopodobniej przynajmniej jeden z plików w twoim katalogu jest faktycznie montowany ze zdalnego systemu, przez NFS lub podobny. A serwer, z którego zamontowałeś tę partycję, nie działa lub nie odpowiada. Kiedy więc ls próbuje uzyskać informacje o tym katalogu, zawiesi się w jądrze, czekając na odpowiedź serwera.
Jak wspomnieli inni, jeśli użyjesz strace, dowiesz się, do którego katalogu ls próbuje uzyskać dostęp, gdy się zawiesi. Następnie możesz zamontować zamontowaną partycję lub cokolwiek innego.
źródło
sshfs
wierzchowce, a jedynym sposobem na ich odmontowanie było zabicie powiązanychssh
isshfs
procesów.