Назад | Перейти на главную страницу

lsof - ограничить вывод только физическими файлами - как?

Как мне сообщить 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 удалит любые повторяющиеся записи.

Одно предостережение, это будут файлы, которые не регулярный пока их имя начинается с /. Например, будут включены все файлы, начинающиеся со следующих:

  • / dev
  • / proc
  • / sys

И могут быть другие в зависимости от вашей ОС.

это отлично работает на Mac OS:

$ lsof /

Мне это нравится, потому что это быстро. это быстрее, если вы укажете -p

$ lsof -a -p <comma,sep,pids> /