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

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

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

  • avconv / ffmpeg через / dev / ttyAMA0
  • загрузка python при загрузке ядра Linux
  • Случайный выбор файлов в файловой системе
  • В AIX, как я могу получить полный путь к программе, связанной с портом?
  • Можно ли как-то сказать, переносится ли ноутбук в сценарий bash или python?
  • Запуск Python на ChromeOS
  • Я думаю о чем-то вроде, например, конкретной команды ps ( ps -eopid,user,comm,command ), где мы можем указать, какие команды поступают в выход. В этом случае я хочу указать только столбцы «Имя» в lsof -p <PID> .

  • Почему нет API-интерфейса Unix?
  • Проверка среды рабочего стола из командной строки
  • Созданные новые файлы и папки автоматически наследуют те же разрешения, что и родительская папка
  • Является ли синтаксис «$ {PS1-}» и чем он отличается от простого «$ PS1»?
  • Требует ли Posix каких-либо устройств?
  • Почему lsof сообщает о большем количестве открытых файлов пользователя, чем то, что говорит ulimit?
  • 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 - лучшая ОС в мире.