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

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

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

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

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 анализируемом формате

  • как создать отдельный процесс в фоновом режиме при запуске переднего плана
  • Избегайте передачи переменной среды в скрипт python
  • Hotmail не получает письма от скрипта, но работает с сервера
  • Каковы могут быть причины, по которым сценарии оболочки убивают себя?
  • Написание программы для редактирования .txt данных - Python или Unix?
  • Процесс Python не может создать файл в каталоге, продолжает получать `разрешение отказано` IOError
  • Как установить последнюю версию Python на Debian отдельно или обновить?
  • Репликация столбца в однострочном файле CSV
  • Ошибка Subprocess.call () и gunzip
  • Как включить скрипт python внутри сценария bash
  • Как запустить скрипт Python в Makefile
  • Interesting Posts

    Есть ли какая-либо командная строка, общий HTTP-прокси (например, Squid)?

    Bash – Как использовать переменную в имени переменной

    Не удается выполнить приложение в crontab

    ddrescue: перечитывать только хорошие сектора?

    Постоянный скрипт, чтобы проверить, работает ли мой веб-сервер с низким бюджетом vps?

    Будет ли автолог создавать проблемы с удаленной безопасностью?

    Как отобразить результат df каждые 30 секунд?

    Можно ли использовать gcc для компиляции двоичных файлов в FreeBSD 10?

    изменить строку и удалить тег, используя perl из xml-файла?

    Как отбросить пакет, если запись conntrack отсутствует

    BunsenLabs (Deerrivative) не отключится (не удалось запустить poweroff.target: транзакция разрушительна)

    Странное поведение «ps -o pgid»

    Как редактировать / etc / inittab?

    Динамически переформатированные страницы пользователя при изменении размеров терминала

    Установка альтернативных устройств (с различными вариантами крепления) в одной точке подключения

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