Пользовательский вывод lsof

Мне нужен список открытых файлов, портов и т. Д. Процессом. Теперь, когда я использую lsof -p <PID> я могу разобрать вывод в скрипте python, но проблема в том, что иногда я получаю несколько столбцов, которые пусты. Поэтому при анализе результатов я получаю плохие результаты.

Я знаю, что я могу вручную искать FD в / proc для каждого процесса, но это должно быть в стандарте POSIX. Итак, мой вопрос: есть ли вообще сделать lsof print только список открытых файлов и ничего больше?

Я думаю о чем-то вроде, например, конкретной команды ps ( ps -eopid,user,comm,command ), где мы можем указать, какие команды поступают в выход. В этом случае я хочу указать только столбцы «Имя» в lsof -p <PID> .

  • Почему установка пакета python-minimal также захватывает пакет python на Debian?
  • Как вручную удалить urllib, urllib2, запрашивает пакеты python?
  • Установите wicd на Slackware 14.1
  • Python 26 pkg отсутствует в CentOS 5
  • Как выполнить эту команду оболочки из Python?
  • обрабатывать непрерывный вывод synclient
  • Как установить библиотеку pylzma python в Linux?
  • символические ссылки python (также для себя) в usr / bin
  • One Solution collect form web for “Пользовательский вывод lsof”

    lsof имеет формат вывода после обработки с опцией -F (см. раздел OUTPUT FOR OTHER PROGRAMS в руководстве).

     lsof -nPMp "$pid" -Fn | sed ' \|^n/|!d s/ type=STREAM$//; t end s/ type=DGRAM$//; t end s/ type=SEQPACKET$// : end s|^n||' 

    Перечислит открытые файлы, которые разрешают путь к файловой системе.

    • -nPM отключает часть обработки, которую lsof делает по умолчанию, и которую мы здесь не заботимся, например, разрешаем IP-адреса, имена портов или rpc.
    • -p "$pid" , укажите процесс, чьи открытые файлы в список
    • -Fn : по выходу. Попросите его.
    • | sed | sed post process с sed чтобы выбрать только интересующую нас деталь:
    • \|^n/|!d : пропустить все, что не начинается с n/
    • s/ type=...$/;t end : удалите эти строки в конце строки и, если удастся, перейдите к end метке.
    • : end : end метка.
    • s|^n|| : удалить ведущий символ n который lsof вставляет, чтобы идентифицировать выводимое поле.

    Однако обратите внимание, что непечатаемые символы в именах файлов закодированы (например, \n для новой строки, ^[ для ESC …) неоднозначно (как в ^[ может означать либо ^[ и ESC]).

    Кроме того, для удаленных файлов по крайней мере на Linux вы все равно получите путь к файлу, но с добавлением (deleted) . Опять же, нет возможности различать удаленный файл и файл, чье имя заканчивается (deleted) . Глядя на счет ссылки, не обязательно поможет, поскольку удаленный файл может быть связан в другом месте.

    См. Также удаление type=* которое мы делаем для сокетов домена Unix, которые могли иметь место в имени файла.

    Это означает, что, хотя он будет работать в большинстве случаев, вы не можете постпроизвести этот вывод надежно в общем случае.

    Не говоря уже о том, что сам lsof может не правильно проанализировать информацию, возвращаемую ядром, или что ядро ​​может не предоставить эту информацию в lsof анализируемом формате

    Linux и Unix - лучшая ОС в мире.