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