Сначала нужно определить, для чего это нужно. Сказать "физические файлы" - это слишком общее. lsof выдаст вам файлы, которые были открыты с помощью файлового дескриптора. это даст вам файлы, которые были открыты как отображенные в памяти файлы потоками. это даст вам файлы библиотеки, которые были открыты процессами. все это физические файлы, но способ их использования отличается.
Майкл Мартинес
Ответы:
37
Просто просмотрел несколько справочных страниц, похоже, вы используете команду:
sudo lsof /
Это перечислит все открытые файлы в каталоге /, который является всем в файловой системе Linux. Только что протестировал и показывает только REG и DIR.
Больше примеров:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999 ограничивает его файлами с номером дескриптора файла.
Красиво и просто. Если вам нужен только последний столбец, вы можете добавить | awk {'print $ 9'} Интересно. Я не получаю FIFO в моем выводе либо. Fedora 12 и CentOS 5.3
egorgry
CentOS 5.2 и Ubuntu 9.04 возвращают мне данные fifo, это может быть изменением, но вы уверены, что есть fifo? Я бы сначала попробовал и удостоверился, что он есть, а потом попробую/
Кайл Брандт
Кроме того, я просто придираюсь, кажется, он просто не хочет шума, и, вероятно, не будет очень много пятерки.
Кайл Брандт
4
lsof / включает только файлы в корневой файловой системе. Если у вас смонтировано несколько файловых систем, они не появятся в выводе. Я считаю, что лучший способ - просто использовать grep.
Джеймс
9
Возможно, есть переключатель, но если вы не против фильтровать его через grep, вы можете сделать это sudo lsof | egrep 'REG|DIR', предполагая, что под «физическими файлами» вы подразумеваете обычные файлы и каталоги.
См. Раздел OUTPUT :: TYPE страницы man lsofруководства для всех типов, которые могут быть в этом столбце.
Там может быть переключатель, но man-страница читается как чья-то кандидатская диссертация ... :)
Cawflands
1
Да ... Ибо человека чрезвычайно трудно читать ...; p)
Владислав Раструсный
+1 этот комментарий. :)
egorgry
на vpn-сервере с достаточным количеством клиентов lsof не вернется, поэтому greping для меня не вариант
Охад Коэн,
@OhadCohen lsof вернется, если вы ограничите то, что он ищет. См. «FD» на странице руководства (mem, cwd, pd и т. Д.)
Майкл Мартинес,
2
Это то, что я сделал, что отлично сработало для меня:
lsof -F n -p 12501| grep ^n/| cut -c2-| sort -u
-F nОпция lsofзаставит его только распечатать имена из открытых файлов. Каждая выходная строка с именем открытого файла начинается с одного символа n, за которым сразу следует имя . Обычные файлы всегда будут абсолютным, полностью определенным именем файла. Команда grep ^n/будет выбирать только те строки, имя которых начинается с /(означает абсолютное полное имя файла); таким образом исключая такие вещи, как открытые порты, сокеты, канал (например, FIFO) и т. д. При cut -c2-этом удаляется первый символ n, оставляя только имя файла. Затем, наконец, sort -uбудут удалены любые повторяющиеся записи.
Одно предупреждение, это будет включать в себя файлы, которые не являются регулярными, если их имя начинается с /. Например, будут включены все файлы, начинающиеся со следующего:
Ответы:
Просто просмотрел несколько справочных страниц, похоже, вы используете команду:
Это перечислит все открытые файлы в каталоге /, который является всем в файловой системе Linux. Только что протестировал и показывает только REG и DIR.
Больше примеров:
0-999 ограничивает его файлами с номером дескриптора файла.
источник
/
Возможно, есть переключатель, но если вы не против фильтровать его через grep, вы можете сделать это
sudo lsof | egrep 'REG|DIR'
, предполагая, что под «физическими файлами» вы подразумеваете обычные файлы и каталоги.См. Раздел OUTPUT :: TYPE страницы
man lsof
руководства для всех типов, которые могут быть в этом столбце.источник
Это то, что я сделал, что отлично сработало для меня:
-F n
Опцияlsof
заставит его только распечатать имена из открытых файлов. Каждая выходная строка с именем открытого файла начинается с одного символа n, за которым сразу следует имя . Обычные файлы всегда будут абсолютным, полностью определенным именем файла. Командаgrep ^n/
будет выбирать только те строки, имя которых начинается с/
(означает абсолютное полное имя файла); таким образом исключая такие вещи, как открытые порты, сокеты, канал (например, FIFO) и т. д. Приcut -c2-
этом удаляется первый символn
, оставляя только имя файла. Затем, наконец,sort -u
будут удалены любые повторяющиеся записи.Одно предупреждение, это будет включать в себя файлы, которые не являются регулярными, если их имя начинается с
/
. Например, будут включены все файлы, начинающиеся со следующего:И могут быть другие в зависимости от вашей ОС.
источник