Як мені сказати, якщо мені потрібно перераховувати лише фізичні файли (не сокети, не TCP / IP-з'єднання, лише фізичні файли)?
Як мені сказати, якщо мені потрібно перераховувати лише фізичні файли (не сокети, не TCP / IP-з'єднання, лише фізичні файли)?
Відповіді:
Щойно переглянувши кілька чоловічих сторінок, здається, ви використовуєте команду:
sudo lsof /
Тут буде перераховано всі відкриті файли у / директорії, що є всіма файловими системами Linux. Тільки тестований і він показує лише REG і DIR.
Більше прикладів:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 обмежує його на файли з номером дескриптора файлу.
/
Може бути комутатор, але якщо ви не проти відфільтрувати його через grep, ви могли б зробити це sudo lsof | egrep 'REG|DIR'
, припускаючи, що під "фізичними файлами" ви маєте на увазі звичайні файли та каталоги.
Дивіться розділ OUTPUT :: TYPE на підручній сторінці man lsof
для всіх типів, які можуть бути в цьому стовпці.
Ось що я зробив, який працював ідеально для мене:
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
-F n
Опція lsof
змусить його тільки роздрукувати імена з відкритих файлів. Кожен рядок виводу, що має ім'я відкритого файлу, починатиметься з одного символу n, після якого одразу слід імені . Регулярні файли завжди будуть абсолютним повноцінним іменем файлу. grep ^n/
Буде вибирати тільки ті рядки з ім'ям , що починається з /
(тобто абсолютним, повним ім'ям файлу); таким чином, усуваючи такі речі, як відкриті порти, сокети, труби (як FIFO) тощо. Це cut -c2-
усуне перший символ - n
, залишивши лише ім'я файлу. Потім, нарешті, sort -u
застереження усуне всі повторювані записи.
Одне застереження, це включає файли, які не є регулярними , доки їх ім'я починається з /
. Наприклад, усі файли, що починаються з наступного, будуть включені:
А можуть бути й інші, залежно від вашої ОС.