Как мне сказать, нужно ли мне перечислять только физические файлы (не сокеты, не соединения 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
будут удалены любые повторяющиеся записи.
Одно предупреждение, это будет включать в себя файлы, которые не являются регулярными, если их имя начинается с /
. Например, будут включены все файлы, начинающиеся со следующего:
И могут быть другие в зависимости от вашей ОС.