Jak powiedzieć lsof, że muszę wyświetlić tylko pliki fizyczne (nie gniazda, nie połączenia TCP / IP, tylko pliki fizyczne)?
Jak powiedzieć lsof, że muszę wyświetlić tylko pliki fizyczne (nie gniazda, nie połączenia TCP / IP, tylko pliki fizyczne)?
Odpowiedzi:
Właśnie przejrzałem niektóre strony podręcznika, wygląda na to, że używasz polecenia:
sudo lsof /
Spowoduje to wyświetlenie listy wszystkich otwartych plików w katalogu /, czyli wszystkiego w systemie plików Linux. Właśnie przetestowane i pokazuje tylko REG i DIR.
Więcej przykładów:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 ogranicza go do plików o numerze deskryptora pliku.
/
Może istnieć przełącznik, ale jeśli nie masz nic przeciwko filtrowaniu go przez grep, możesz to zrobić sudo lsof | egrep 'REG|DIR'
, zakładając, że przez „pliki fizyczne” masz na myśli zwykłe pliki i katalogi.
Zobacz sekcję WYJŚCIE :: TYP na stronie man lsof
podręcznika dla wszystkich typów, które mogą znajdować się w tej kolumnie.
Oto co zrobiłem, co działało idealnie dla mnie:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
-F n
Opcja lsof
spowoduje to tylko wydrukować nazwiska z otwartych plików. Każdy wiersz wyjściowy, który ma nazwę otwartego pliku, rozpocznie się od pojedynczego znaku n, po którym bezpośrednio następuje nazwa . Zwykłe pliki zawsze będą bezwzględną, w pełni kwalifikowaną nazwą pliku. grep ^n/
Wybierze tylko te linie z nazwy od A /
(czyli absolutną, pełną nazwę pliku); eliminując w ten sposób rzeczy takie jak otwarte porty, gniazda, potok (jak FIFO) itp. cut -c2-
Eliminuje pierwszy znak n
, pozostawiając tylko nazwę pliku. W końcu sort -u
wyeliminuje wszelkie zduplikowane wpisy.
Jedno zastrzeżenie, będzie to obejmować pliki, które nie są regularne, o ile ich nazwa zaczyna się od /
. Na przykład uwzględnione zostaną wszystkie pliki zaczynające się na następujące:
I mogą być inne, w zależności od systemu operacyjnego.