lsof - обмежити вихід лише на фізичні файли - як?


30

Як мені сказати, якщо мені потрібно перераховувати лише фізичні файли (не сокети, не TCP / IP-з'єднання, лише фізичні файли)?


Спочатку потрібно визначити, для чого це потрібно. Сказати "фізичні файли" занадто загально. lsof надасть вам файли, відкриті дескриптором файлів. це дасть вам файли, які були відкриті у вигляді файлів, відображених у пам'яті, за потоками. він надасть вам бібліотечні файли, відкриті процедурами. все це фізичні файли, але спосіб їх використання різний.
Майкл Мартінес

Відповіді:


37

Щойно переглянувши кілька чоловічих сторінок, здається, ви використовуєте команду:

sudo lsof /

Тут буде перераховано всі відкриті файли у / директорії, що є всіма файловими системами Linux. Тільки тестований і він показує лише REG і DIR.

Більше прикладів:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 обмежує його на файли з номером дескриптора файлу.


2
Також будуть включені FIFO.
Кайл Брандт

1
Приємно і просто. Якщо вам потрібен лише останній стовпець, ви можете додати | awk {'print $ 9'} Цікаво. Я також не отримую фіфо в своєму виході. Fedora 12 та CentOS 5.3
egorgry

CentOS 5.2 і Ubuntu 9.04 повертають фіфо-файли для мене, це може бути зміною, але ви впевнені, що є фіфос? Я б попрощався спочатку і переконався, що він там є, ніж спробуйте/
Кайл Брандт,

Крім того, я просто заїдав, це здається, що він просто не хоче шуму, і, мабуть, не буде дуже багато фіфосів.
Кайл Брандт

4
lsof / включає лише файли в кореневій файловій системі. Якщо у вас встановлено кілька файлових систем, вони не з’являться у висновку. Я вважаю найкращим способом просто використовувати grep.
Джеймс

9

Може бути комутатор, але якщо ви не проти відфільтрувати його через grep, ви могли б зробити це sudo lsof | egrep 'REG|DIR', припускаючи, що під "фізичними файлами" ви маєте на увазі звичайні файли та каталоги.

Дивіться розділ OUTPUT :: TYPE на підручній сторінці man lsofдля всіх типів, які можуть бути в цьому стовпці.


24
Можливо, буде перемикач, але сторінка написана як чиясь дипломна робота ... :)
Cawflands

1
Так ... lsof людині надзвичайно важко читати ...; p)
Владислав Раструсний

Поставив +1 цей коментар. :)
egorgry

на сервері vpn з достатньою кількістю клієнтів, lsof не повернеться, тому поздоровлення для мене не є варіантом
Охад Коен

@OhadCohen lsof повернеться, якщо ви обмежите те, що шукає. Дивіться "FD" на сторінці (mem, cwd, pd тощо)
Michael Martinez

2

Ось що я зробив, який працював ідеально для мене:

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

-F nОпція lsofзмусить його тільки роздрукувати імена з відкритих файлів. Кожен рядок виводу, що має ім'я відкритого файлу, починатиметься з одного символу n, після якого одразу слід імені . Регулярні файли завжди будуть абсолютним повноцінним іменем файлу. grep ^n/Буде вибирати тільки ті рядки з ім'ям , що починається з /(тобто абсолютним, повним ім'ям файлу); таким чином, усуваючи такі речі, як відкриті порти, сокети, труби (як FIFO) тощо. Це cut -c2-усуне перший символ - n, залишивши лише ім'я файлу. Потім, нарешті, sort -uзастереження усуне всі повторювані записи.

Одне застереження, це включає файли, які не є регулярними , доки їх ім'я починається з /. Наприклад, усі файли, що починаються з наступного, будуть включені:

  • / дев
  • / проц
  • / сис

А можуть бути й інші, залежно від вашої ОС.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.