Как мне сообщить lsof, что мне нужно отображать только физические файлы (не сокеты, не соединения 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
заставит его распечатать только имена открытых файлов. Каждая строка вывода, имеющая имя открытого файла, будет начинаться с одного символа п сразу после этого название. Обычный files всегда будет абсолютным полным именем файла. В grep ^n/
выберет только те строки, имя которых начинается с /
(имеется в виду абсолютное полное имя файла); таким образом устраняются такие вещи, как открытые порты, сокеты, каналы (например, FIFO) и т. д. cut -c2-
удалит первый символ, n
, оставив только имя файла. Затем, наконец, sort -u
удалит любые повторяющиеся записи.
Одно предостережение, это будут файлы, которые не регулярный пока их имя начинается с /
. Например, будут включены все файлы, начинающиеся со следующих:
И могут быть другие в зависимости от вашей ОС.
это отлично работает на Mac OS:
$ lsof /
Мне это нравится, потому что это быстро. это быстрее, если вы укажете -p
$ lsof -a -p <comma,sep,pids> /