Próbowałem usunąć plik w systemie Linux za pomocą rm -rf file_name
, ale otrzymałem błąd:
rm: file_name not removed. Text file busy
Jak mogę się dowiedzieć, który proces używa tego pliku?
Odpowiedzi:
Możesz użyć fuser
polecenia, takiego jak:
fuser file_name
Otrzymasz listę procesów korzystających z pliku.
Możesz użyć z nim różnych flag, aby uzyskać bardziej szczegółowe wyniki.
Więcej informacji można znaleźć w artykule w Wikipedii dotyczącym utrwalacza lub na man
stronach.
fuser
implementacje są takie same lub działają w ten sam sposób. Nawet jeśli -i
jest zdefiniowana w POSIX, konkretna implementacja, której używasz, niekoniecznie ma te same opcje, co te opisane w artykule w Wikipedii. Na przykład używam teraz AIX, a fuser
dostępne w tym systemie również nie mają takiej -i
opcji.
fuser
nie lsof
pracowali dla mnie na gościu virtualbox. Ta odpowiedź mnie uratowała.
Odpowiedź @ jim jest poprawna - fuser
tego chcesz.
Dodatkowo (lub alternatywnie) możesz użyć, lsof
aby uzyskać więcej informacji, w tym nazwę użytkownika, na wypadek, gdybyś potrzebował pozwolenia (bez konieczności uruchamiania dodatkowego polecenia), aby zabić proces. (Chociaż oczywiście, jeśli zabijanie procesu jest tym, czego chcesz, fuser
możesz to zrobić za pomocą jego -k
opcji. Możesz fuser
użyć innych sygnałów z-s
opcją - sprawdź stronę podręcznika po szczegóły.)
Na przykład z tail -F /etc/passwd
uruchomionym w jednym oknie:
ghoti@pc:~$ lsof | grep passwd
tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd
Zauważ, że możesz również użyć, lsof
aby dowiedzieć się, jakie procesy używają określonych gniazd. Doskonałe narzędzie, które możesz mieć w swoim arsenale.
lsof | head -1
aby zobaczyć wszystkie nagłówki.
lsof | grep -E "PID|<your_process_name>"
pokazuje zarówno pierwszy wiersz, jak i proces, o który chcesz zapytać.
tree
czyta cokolwiek ze stdin? Jeśli tak, co robi z tymi danymi wejściowymi?
tree
, nie lsof
. O ile rozumiem, tree
nie czyta ze standardowego wejścia, dlatego wyjście lsof
jest odrzucane po uruchomieniu lsof | tree ...
. Jeśli to prawda, to lsof | tree MyFold
jest to samo co tree MyFold
, które wyświetla tylko zawartość, ale nie wyświetla plików otwieranych przez jakiś proces.