lsof - ograniczenie danych wyjściowych tylko do plików fizycznych - jak?


30

Jak powiedzieć lsof, że muszę wyświetlić tylko pliki fizyczne (nie gniazda, nie połączenia TCP / IP, tylko pliki fizyczne)?


Najpierw musisz ustalić, do czego potrzebujesz. Powiedzenie „plików fizycznych” jest zbyt ogólne. lsof da ci pliki, które zostały otwarte za pomocą deskryptora pliku. da ci pliki, które zostały otwarte jako pliki zmapowane w pamięci przez wątki. da ci pliki bibliotek, które zostały otwarte przez procesy. wszystkie są plikami fizycznymi, ale sposób ich użycia jest inny.
Michael Martinez,

Odpowiedzi:


37

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.


2
Obejmie również FIFO.
Kyle Brandt

1
Ładne i proste. Jeśli potrzebujesz tylko ostatniej kolumny, możesz dołączyć | awk {'print 9 $'} Ciekawe. Nie dostaję też fifo w moich wynikach. Fedora 12 i CentOS 5.3
egorgry

CentOS 5.2 i Ubuntu 9.04 zwracają mi fifo, może to być zmiana, ale czy jesteś pewien, że są fifo? Chciałbym najpierw podziękować za to i upewnić się, że tam jest, niż spróbować/
Kyle Brandt

Poza tym po prostu dręczyłem, wygląda na to, że on po prostu nie chce hałasu i prawdopodobnie nie będzie bardzo wielu piątek.
Kyle Brandt

4
lsof / zawiera tylko pliki w głównym systemie plików. Jeśli masz zamontowanych wiele systemów plików, nie pojawią się one na wyjściu. Uważam, że najlepszym sposobem jest po prostu użycie grep.
James

9

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 lsofpodręcznika dla wszystkich typów, które mogą znajdować się w tej kolumnie.


24
Może być przełącznik, ale strona podręcznika brzmi jak
czyja

1
Tak ... ten człowiek jest wyjątkowo trudny do odczytania ...; p)
Vladislav Rastrusny

Daj +1 temu komentarzowi. :)
egorgry

na serwerze VPN z wystarczającą liczbą klientów, lsof nie wróci, więc greping nie jest dla mnie opcją
Ohad Cohen

@OhadCohen lsof powróci, jeśli ograniczysz to, czego szuka. Zobacz „FD” na stronie podręcznika (mem, cwd, pd itp.)
Michael Martinez,

2

Oto co zrobiłem, co działało idealnie dla mnie:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

-F nOpcja lsofspowoduje 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 -uwyeliminuje 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:

  • / dev
  • / proc
  • / sys

I mogą być inne, w zależności od systemu operacyjnego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.