4 мин для чтения7 примеров команды lsof в linux

Утилиты для получения помощи и информации

Источники получения помощи в UNIX системах. Ниже text обозначает что вы вводите — обычно команду или имя файла.

  • whatis text — показывает описания справочных страниц. В начале каждой справочной страницы есть её краткое описание. whatis осуществляет поиск в названиях справочных страниц и отображает описания всех страниц, подходящих под название. В названии могут содержаться шаблоны (-w) или это может быть регулярное выражение (-r). При использовании этих параметров, может потребоваться указывать название в кавычках или экранировать (\) специальные символы для того, чтобы оболочка командной строки не обрабатывала их. При поиске используются индексные базы данных, которые обновляются с помощью программы mandb. Для обновления баз в зависимости от установки, её можно периодически запускать из задания cron или вручную после установки новых справочных страниц. Примеры использования:
    # whatis top
    top (1)              - display Linux tasks
    
    # Вывести информацию для всех бинарных файлов текущего каталога
    # whatis *
    bin: ничего подходящего не найдено.
    boot (7)             - General description of boot sequence
    etc: ничего подходящего не найдено.
    initrd.img: ничего подходящего не найдено.
    proc (5)             - process information pseudo-file system
  • apropos text — поиск в именах справочных страниц и кратких описаниях, выводит всё, что содержит строку text в базе whatis. Внутри каждой справочной страницы есть краткое описание о чём эта страница. apropos выполняет поиск ключевого слова в этом описании. Ключевое слово может представлять собой регулярное выражение (-r), шаблон (-w) или точное искомое ключевое слово (-e). При использовании этих параметров может потребоваться указывать ключевое слово в кавычках или экранировать (\) специальные символы для того, чтобы избежать их интерпретации оболочкой командной строки. Например:
    # apropos пароль
    expiry (1)           - проверяет и изменяет пароль согласно срокам действия
    passwd (1)           - изменяет пароль пользователя
  • man text — это навигатор справочных страниц ОС. Каждый параметр страница, переданный man, обычно является названием программы, утилиты или функции. По каждому из этих параметров выполняется поиск и вывод связанной с ним справочной страницы. Если указан параметр раздел, то это заставляет man выполнять поиск только в этом справочном разделе. Действием по умолчанию является поиск во всех доступных разделах в заранее определённом порядке и показ только первой найденной страницы, даже если существуют страницы в нескольких разделах. Для выяснения всех возможностей выполните:
    # man man
  • which text — выводит пусть к бинарному файлу. Например:
    # which htop
    /usr/bin/htop
  • whereis text — ищет файл с названием text в бинарных, исходных и man -файлах и выдаёт полный путь.
    # whereis htop
    htop: /usr/bin/htop /usr/share/man/man1/htop.1.gz
  • locate text — выводит пути ко всем файлам, в названии которых содержится строка text.

Список всех сетевых подключений

Следующая команда с опцией ‘-i‘ показывает список всех сетевых соединений ‘LISTENING & ESTABLISHED’.

# lsof -i

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
cupsd     1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd      1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
master    1551    root   12u  IPv4  12896      0t0  TCP localhost:smtp (LISTEN)
master    1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd      1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd     1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd     1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)
clock-app 2362   narad   21u  IPv4  22591      0t0  TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome    2377   narad   61u  IPv4  25862      0t0  TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome    2377   narad   80u  IPv4  25866      0t0  TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

Environment variables.

«Art, like morality, consists in drawing the line somewhere» ~ Gilbert K. Chesterton

Related linux commands:

lsof FAQ — full documentation.awk — Find and Replace text.fuser — Identify/kill the process that is accessing a file.kill — Stop a process from running.mount — Mount a file system.ps — Process status.strace — Trace system calls and signals.uname — Print system information.
access(2), crash(1), fattach(3C), ff(1), fstat(8),
gethostname(2), isprint(3), lstat(2), netstat(1), readlink(2)
Equivalent Windows command: psfile

 
Copyright 1999-2020 SS64.com
Some rights reserved

Значение столбцов lsof

Типов открытых файлов много, и далеко не все столбцы применимы к каждому из них. Поэтому если для каких-то файлов некоторые столбцы не заполнены данными, то это нормально.

  • COMMAND: Имя команды, связанной с процессом, который открыл файл.
  • PID: Идентификационный номер процесса, который открыл файл.
  • TID: Идентификационный номер задачи (потока) . Пустой столбец означает, что это не задача; это процесс.
  • TASKCMD: это имя команды задачи. Обычно это будет то же самое, что и процесс, названный в столбце COMMAND, но некоторые реализации задач (например, Linux) позволяют задаче изменить имя своей команды.
  • USER: это идентификационный номер пользователя или логин пользователя, которому принадлежит процесс, обычно то же самое, что сообщает ps. Однако в Linux USER — это идентификационный номер пользователя или логин, который владеет каталогом в /proc, где lsof находит информацию о процессе. Обычно это то же самое значение, которое сообщает ps, но может отличаться, если процесс изменил свой эффективный идентификатор пользователя (также смотрите Что такое файловая система /proc в Linux)
  • FD: показывает файловый дескриптор файла. Файловые дескрипторы описаны ниже.
  • TYPE: тип узла, связанного с файлом. Виды данных типов описаны ниже.
  • DEVICE: содержит номера устройств, разделённые запятыми, для специальных символьных, специальных блочных, обычных файлов, каталогов или NFS. Также может отображаться базовый адрес или имя устройства с сокетом Linux AX.25.
  • SIZE/OFF: Показывает размер файла или смещение файла в байтах.
  • NODE: Показывает номер узла локального файла или номер узла NFS-файла на хосте сервера или тип интернет-протокола. Может отображаться STR для потока, IRQ или номер инода устройства с сокетом Linux AX.25.
  • NAME: для обычных файлов показывает имя точки монтирования и файловой системы, в которой находится файл. Для других типов файлов здесь указываются специфичные для них данные, подробности будут даны ниже.

Как комбинировать условия поиска lsof (логические И и ИЛИ)

Давайте выведем файлы, которые были открыты пользователем mial и которые связаны с процессами systemd. Мы знаем, что можем предоставить более одного элемента поиска в командной строке, поэтому это должно быть легко.

sudo lsof -u mial -c systemd

Теперь давайте посмотрим на вывод lsof. Это не выглядит правильно; в выводе есть записи, которые были запущены пользователем root.

Это не то что мы ожидали. Что произошло?

Если вы предоставите несколько поисковых терминов, lsof вернёт любой файл, который соответствует первому поисковому запросу или второму поисковому запросу и так далее. Другими словами, она выполняет поиск ИЛИ.

Чтобы lsof выполняла поиск И, используйте опцию -a. Это означает, что будут перечислены только те файлы, которые соответствуют первому поисковому запросу, второму поисковому запросу и т. д.

Давайте попробуем это снова и используем опцию -a.

sudo lsof -u mial -c systemd -a

Теперь каждый файл в списке — это файл, который был открыт пользователем mial или от его имени и связан с systemd.

Обратите внимание, что два условия, одно из которых содержит отрицание (^) обрабатываются как логическое И:

sudo lsof +D /home -u ^mial

Но если требуется логическое И, то лучше взять за правило всегда использовать опцию -a, поскольку так команда становиться более однозначной:

sudo lsof +D /home -u ^mial -a

и в случае добавления третьего условия поиска она будет работать как ожидается:

sudo lsof -u mial +D /home/mial -c^chromium -a

Исключение пользователя с помощью символа ‘^’

Здесь мы исключили пользователя root. Вы можете исключить любого пользователя, используя команду ‘^‘ как показано выше.

# lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)

8.5. Утилита iotop

Утилита работает аналогично утилите , но упорядочивает процессы в зависимости от интенсивности операций ввода-вывода, а не от нагрузки на центральный процессор.

По умолчанию утилита будет выводить информацию обо всех процессах. В данном примере используется параметр для вывода информации исключительно о тех процессах, которые осуществляют операции ввода-вывода.

# iotop -o
Total DISK READ: 8.63 M/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER  DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
15000 be/4 root     2.43 M/s    0.00 B/s  0.00 % 14.60 % tar cjf /srv/di...
25000 be/4 root     6.20 M/s    0.00 B/s  0.00 %  6.15 % tar czf /srv/di...
24988 be/4 root     0.00 B/s    7.21 M/s  0.00 %  0.00 % gzip
25003 be/4 root     0.00 B/s 1591.19 K/s  0.00 %  0.00 % gzip
25004 be/4 root     0.00 B/s  193.51 K/s  0.00 %  0.00 % bzip2

Используйте параметр для задействования режима вывода данных утилиты в форме журнала (вместо стандартного интерактивного режима вывода данных).

# iotop -bod 10
Total DISK READ: 12.82 M/s | Total DISK WRITE: 5.69 M/s
  TID  PRIO USER  DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
25153 be/4 root    2.05 M/s    0.00 B/s  0.00 %  7.81 % tar cjf /srv/di...
25152 be/4 root   10.77 M/s    0.00 B/s  0.00 %  2.94 % tar czf /srv/di...
25144 be/4 root  408.54 B/s    0.00 B/s  0.00 %  0.05 % python /usr/sbi...
12516 be/3 root    0.00 B/s 1491.33 K/s  0.00 %  0.04 % [jbd2/sdc1-8]
12522 be/3 root    0.00 B/s   45.48 K/s  0.00 %  0.01 % [jbd2/sde1-8]
25158 be/4 root    0.00 B/s    0.00 B/s  0.00 %  0.00 % 
25155 be/4 root    0.00 B/s  493.12 K/s  0.00 %  0.00 % bzip2
25156 be/4 root    0.00 B/s    2.81 M/s  0.00 %  0.00 % gzip
25159 be/4 root    0.00 B/s  528.63 K/s  0.00 %  0.00 % 

А это пример использования утилиты для отслеживания операций дискового ввода-вывода, осуществляемых в течение каждых десяти секунд от лица пользователя с именем (средствами единственного процесса, запущенного данным пользователем, но данное обстоятельство не принципиально и может не рассматриваться). Параметр позволяет накапливать статистические данные об операциях ввода-вывода.

# iotop -q -a -u vagrant -b -p 5216 -d 10 -n 10
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
5216  be/4 vagrant       0.00 B      0.00 B  0.00 %  0.00 % gzip
Total DISK READ: 818.22 B/s | Total DISK WRITE: 20.78 M/s
5216  be/4 vagrant       0.00 B    213.89 M  0.00 %  0.00 % gzip
Total DISK READ: 2045.95 B/s | Total DISK WRITE: 23.16 M/s
5216  be/4 vagrant       0.00 B    430.70 M  0.00 %  0.00 % gzip
Total DISK READ: 1227.50 B/s | Total DISK WRITE: 22.37 M/s
5216  be/4 vagrant       0.00 B    642.02 M  0.00 %  0.00 % gzip
Total DISK READ: 818.35 B/s | Total DISK WRITE: 16.44 M/s
5216  be/4 vagrant       0.00 B    834.09 M  0.00 %  0.00 % gzip
Total DISK READ: 6.95 M/s | Total DISK WRITE: 8.74 M/s
5216  be/4 vagrant       0.00 B    920.69 M  0.00 %  0.00 % gzip
Total DISK READ: 21.71 M/s | Total DISK WRITE: 11.99 M/s

Для чего служит команда lsof

Относительно
lsof справка man
как раз сообщает, что lsof
есть сокращение от LiSt of Open Files, и что утилита эта служит для
вывода информации о том, какие файлы используются теми или иными
процессами. Причем утилита эта имеется в очень многих версиях и
диалектах UNIX, включая Linux версии 2.1.72 и выше, а также в HP-UX,
AIX, NextStep, Apple Darwin для Power Macintosh, SCO UnixWare,
Solaris, FreeBSD, NetBDS, OpenBSD и так
далее.

Создателем программа lsof является Victor A. Abell,
его домашняя страничка расположена по адресу
, где
вы можете найти исходные коды программы. Их можно также скачать с FTP-сайта
ftp://vic.cc.purdue.edu/pub/tools/unix/lsof.
О том, как скомпилировать и установить программу, вы можете прочитать
в статье .

Если запустить эту утилиту без параметров, выдается информация о всех
работающих процессах и открытых ими файлах. Даже в моей системе с
одним пользователем эта команда выдала 2344 строки текста. Попробуй
проанализируй эту массу информации! Но давайте взглянем хотя бы на
несколько строк ее вывода, чтобы на этом примере понять, какую же
информацию она выдает.

Кстати, если вы будете экспериментировать, имейте в виду, что будучи
запущенной простым пользователем, эта команда выдает информацию
только о процессах, запущенных этим пользователем. Поэтому во многих
случаях вы можете не получить от нее никакого ответа. Если вы хотите
получить вразумительный ответ на любой свой запрос, ее необходимо
запускать от имени root-а (можно воспользоваться следующей формой
запуска sudo lsof). Кроме того, команда
отрабатывает достаточно медленно, так что будьте терпеливы и не
щелкайте раньше времени <Ctrl>+<C> — программа не
зависла, просто идет поиск информации.

А теперь смотрим листинг 1 (или результат работы программы на вашем
экране).

Листинг 1.
Вывод команды lsof.

COMMAND     PID    USER   FD   TYPE     DEVICE     SIZE       NODE NAME
init          1    root  cwd    DIR        3,3     4096          2 /
init          1    root  txt    REG        3,3    27036     161176 /sbin/init
init          1    root  mem    REG        3,3   103044     160493 /lib/ld-2.3.2.so
init          1    root   10u  FIFO        3,3               71954 /dev/initctl
portmap    1528     rpc    3u  IPv4       1656                 UDP *:sunrpc 
xinetd     1649    root    0r   CHR        1,3               65970 /dev/null
rpc.mount  1682    root    5u  unix 0xc34cea80               10311 socket
nmbd       1790    root    6u  IPv4       2456                 UDP *:netbios-ns 
sh        23252     kos    4u   CHR        5,0               70758 /dev/tty
sh        23252     kos    6u   CHR      136,3                   5 /dev/pts/3
sh        23252     kos    8w  FIFO        0,5              840800 pipe
sh        23253     kos  cwd    DIR        3,3     4096     160487 /usr/share/man
sh        23253     kos  rtd    DIR        3,3     4096          2 /
sh        23253     kos  txt    REG        3,3   626028     160664 /bin/bash

Как видите, один и тот же процесс открывает много файлов, каждому из
которых соответствует строка в выводе lsof
. В начале строки указывается имя процесса, его идентификатор, имя
пользователя, запустившего процесс. В столбце FD стоит номер
файлового дескриптора или одна из следующих буквенных комбинаций (я
не берусь корректно перевести на русский язык некоторых из
расшифровок этих сокращений, так что привожу их в том виде, как они
выдаются справочной системой):

  • cwd — текущий рабочий каталог;
  • ltx — текст разделяемой библиотеки;
  • mxx — hex memory-mapped type number xx.
  • m86 — DOS Merge mapped file;
  • mem — файл, загруженный в память (memory-mapped file), чаще всего – библиотека,
  • mmap — memory-mapped device;
  • pd — родительский каталог;
  • rtd — корневой каталог;
  • txt – текст программы (код и данные);
  • v86 — VP/ix mapped file.

Номер
файлового дескриптора сопровождается символом, указывающим режим, в
котором файл был открыт:

  • r
    — файл открыт для чтения;
  • w
    – файл открыт для записи;
  • u
    — файл открыт для чтения и для записи;
  • пробел
    – режим доступа неизвестен и файл не блокирован;
  • ‘-’
    — режим доступа неизвестен, но на файл установлена блокировка.

В
последнем случае за дефисом следует еще один символ, определяющий тип
блокировки (подробнее смотри man
lsof).

В
следующем столбце указан тип файла. Чаще других встречаются файлы
одного из следующих типов: REG — обычный файл, DIR — каталог, BLK —
файл блочного устройства, CHR — файл символьного устройства, LINK —
файл символической ссылки, INET – Internet-сокет, UNIX –
доменный сокет UNIX. Но на справочной странице список типов гораздо
обширнее.

Вслед за типом указывается
устройство, на котором расположен файл, размер файла, номер
индексного дескриптора и имя файла.

Опции команды

Поскольку просматривать
вывод команды lsof, запущенной без параметров, достаточно неудобно,
можно сократить объем выдаваемых данных, конкретизировав ваш запрос,
что достигается за счет использования опций. Опций у этой утилиты
довольно много и большинство из них действует по принципу ограничения
вывода. Если вы указываете, например, опцию -U, то будут выведены
только данные о сокетах UNIX, а все другие файлы игнорируются. Если
указать две или более опций, то их действие определяется правилом
ИЛИ, то есть выводится информация, определяемая каждой из опций.
Например, команда

/usr/sbin/lsof
-U -u kos

выдаст
данные о всех открытых UNIX-сокетах и всех файлах, принадлежащих
процессам, запущенным пользователем “kos”.

Если
же необходимо скомбинировать действие опций по принципу логического
И, то это делается путем специальной опции -a. Например, команда

/usr/sbin/lsof
-a -U -u kos

выдаст
список только сокетов UNIX, принадлежащих процессам, владельцем
которых является пользователь “kos”’

Обратите внимание
на то, что опция -a стоит не между объединяемыми ею другими опциями.
Впрочем, ее можно ставить где угодно, все равно все перечисленные в
командной строке опции будут работать по принципу “логическое
И”

Но если
указывается, например, несколько однотипных опций, то вначале к ним
применяется операция логического ИЛИ, а затем уже работает опция -a.
Пример: по команде

/usr/sbin/lsof
-i@aaa.bbb -i@ccc.ddd -a -ufff,ggg

будет
выведен список файлов, принадлежащих ЛИБО пользователю “fff”,
ЛИБО пользователю “ggg” И имеющих сетевые соединения ЛИБО
к хосту aaa.bbb ЛИБО к хосту ccc.ddd.

Опции
команды lsof можно записывать одну
за другой без пробелов, предваряя это список всего одним дефисом, то
есть вместо

/usr/sbin/lsof -a -b -C

можно указать просто

/usr/sbin/lsof -abC

Однако при этом надо побеспокоиться о том, чтобы не было неоднозначности в
интерпретации опций. Но я не буду детально рассматривать возможные
причины неоднозначности, если у вас возникает желание использовать
эту возможность, смотрите соответствующую man-страницу.

Отмечу только, что существует ряд опций, которые позволяют
изменить вывод программы lsof. Например, опция -R заставляет lsof
дополнительно выводить данные об идентификаторе родительского
процесса. Очень интересной может оказаться опция -F. Запущенная с
этой опцией утилита lsof выдает информацию не в виде таблицы, а в
виде последовательности отдельных строк. В таком случае вывод можно
перенаправить на вход другой программы, которая будет каким-либо
образом обрабатывать полученную информацию. После опции -F можно
указать, какие именно поля будут присутствовать в выводе. Например,
если командная строка имела вид

$ /usr/sbin/lsof -F pcfn

в выводе lsof будет присутствовать
идентификатор процесса (p), имя команды (c), файловый дескриптор (f)
и ися файла.

Help: I Discover an Open Port Which I Don’t Recognize At All

The file /etc/services is used to map port numbers and protocols to service names. Try matching port numbers: Sample outputs:

https		443/tcp				# http protocol over TLS/SSL
https		443/udp

Check For rootkit

I strongly recommend that you find out which processes are really running, especially servers connected to the high speed Internet access. You can look for rootkit which is a program designed to take fundamental control (in Linux / UNIX terms “root” access, in Windows terms “Administrator” access) of a computer system, without authorization by the system’s owners and legitimate managers. See how to detecting / checking rootkits under Linux.

8.1. Утилита lsof

С помощью утилиты вы можете получить список открытых файлов.

При использовании утилиты без параметров будет выводиться список, содержащий все открытые файлы. В данном списке вы можете обнаружить строку команды (в данном случае это команда init), идентификатор созданного процесса в столбце PID (1), а также имя пользователя (root), с привилегиями которого была открыта корневая директория и файл . Данные из столбца FD (содержащего информацию о дескрипторе файла) говорят о том, что директория / являлась как корневой директорией (rtd), так и текущей рабочей директорией (cwd) при исполнении команды /sbin/init. В столбце FD может содержаться строка , указывающая на то, что директория является корневой директорией, строка , указывающая на то, что директория является текущей рабочей директорией и строка , указывающая не то, что открыт файл (включая файлы с данными и кодом).

root@debian7:~# lsof | head -4
COMMAND PID  TID   USER   FD    TYPE     DEVICE SIZE/OFF      NODE NAME
init      1        root  cwd     DIR      254,0     4096         2 /
init      1        root  rtd     DIR      254,0     4096         2 /
init      1        root  txt     REG      254,0    36992    130856 /sbin/init

В остальных случаях в столбце FD приводятся числовые значения дескрипторов с символами, соответствующими режимам открытия файлов, причем символ w соответствует режиму записи данных, r — режиму чтения данных, а u — режиму чтения и записи данных. Вы можете вывести список файлов, открытых в рамках процесса с определенным идентификатором PID, воспользовавшись командой . Для процесса данная команда будет выглядеть следующим образом:

lsof -p 1

В приведенном ниже примере показана простая методика использования утилиты для доказательства того, что текстовый редактор хранит файл с расширением в открытом состоянии (даже в том случае, если исполнение соответствующего процесса приостанавливается в фоновом режиме) при работе с нашей недавно смонтированной файловой системой.

# df -h | grep sdb
/dev/sdb1                     541M   17M  497M   4% /srv/project33
# vi /srv/project33/busyfile.txt
+  Stopped                 vi /srv/project33/busyfile.txt
# lsof /srv/*
COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
vi      3243 root   3u  REG   8,17   4096   12 /srv/project33/.busyfile.txt.swp

А здесь мы видим, что демон открывает несколько файлов журналов для записи (как указано в строке FD).

root@debian7:~# lsof /var/log/*

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
rsyslogd 2013 root    1w   REG  254,0   454297 1308187 /var/log/syslog
rsyslogd 2013 root    2w   REG  254,0   419328 1308189 /var/log/kern.log
rsyslogd 2013 root    5w   REG  254,0   116725 1308200 /var/log/debug
rsyslogd 2013 root    6w   REG  254,0   309847 1308201 /var/log/messages
rsyslogd 2013 root    7w   REG  254,0    17591 1308188 /var/log/daemon.log
rsyslogd 2013 root    8w   REG  254,0   101768 1308186 /var/log/auth.log

Вы можете указать имя интересующего вас пользователя в рамках команды . В данном примере выводится информация о текущих рабочих директориях нескольких программ с интерфейсом командной строки, запущенных от лица пользователя paul.

$ lsof -u paul | grep home
bash    3302 paul  cwd    DIR  253,0     4096  788024 /home/paul
lsof    3329 paul  cwd    DIR  253,0     4096  788024 /home/paul
grep    3330 paul  cwd    DIR  253,0     4096  788024 /home/paul
lsof    3331 paul  cwd    DIR  253,0     4096  788024 /home/paul

Совместно с параметром -u утилиты также может быть использовать символ ^, соответствующий логической операции ‘не’. Исходя из этого, команда для получения информации обо всех открытых файлах, за исключением тех файлов, которые открыты пользователем root, будет выглядеть следующим образом:

lsof -u^root

Version history

27/03/2019 — Version 2.8

  • New Dark Mode friendly template icons for Mojave
  • Multiple items can now be selected and copied
  • Info Panel now shows which processes are connected to each other via unix pipes & domain sockets
  • Info Panel now also shows file system info such as device name & inode
  • Cmd-L menu action to show selected item
  • Minor performance improvements
  • Sparkle update framework now has Mojave Dark Mode-compatible appearance
  • No longer shows hidden volumes in Volumes filter
  • Fixed issue with mangled process names
  • Fixed issue with pipe icon on non-retina displays
  • Fixed minor memory leak
  • More graceful error handling when file descriptor lookup fails in lsof

10/02/2019 — Version 2.7

  • Info Panel now shows file Uniform Type Identifier
  • Fixed crash bug on macOS 10.9 and earlier
  • Various minor bug fixes and interface improvements

02/06/2018 — Version 2.5

  • Fixed critical lsof output parsing bug introduced in 2.4
  • New «Authenticate on launch» option in Preferences
  • Various minor interface refinements

10/05/2018 — Version 2.4

  • Now defaults to showing Mac-friendly process names (e.g. «Safari Web Content» instead of «com.apple.WebKit.WebContent»)
  • Unix process names no longer truncated to 32 characters
  • Search filter can now be used to filter by IP protocol (e.g. TCP or UDP) or IP version (e.g. IPv4 or IPv6)
  • Now shows TCP socket state (e.g. LISTEN, ESTABLISHED) in list and Info Panel
  • Info Panel now shows file descriptor integer
  • Info Panel now shows additional info for character devices
  • Info Panel now shows Carbon Process Serial Number (PSN) for processes, if available
  • Much improved IPv6 socket handling
  • DNS to IP and port name resolution in Info Panel when DNS/port lookup enabled in Prefs
  • Minor user interface enhancements

16/04/2018 — Version 2.3

  • Now supports access mode filtering (e.g. read, write, read/write)
  • Search filter now also filters by PID
  • DNS and port name lookup for IP Sockets in Info Panel
  • Info Panel now identifies standard I/O stream character devices
  • New Search Filter menu with case sensitivity and regex options
  • New application icon
  • Fixed bug where Volumes filter wouldn’t work
  • Minor interface improvements

07/03/2018 — Version 2.2

  • Now defaults to excluding process binaries, shared libraries and current working directories in listing
  • DNS and port name lookup now disabled by default for faster execution (can be enabled in Preferences)
  • Info Panel now displays file access mode and process owner
  • New sort option: User ID
  • Info Panel now shows IP socket protocol and version
  • New Preferences window
  • New high-resolution pipe and socket icons
  • Fixed bug where sort settings were not respected on launch

12/02/2018 — Version 2.1

  • Copying a file path now creates a file representation in clipboard in addition to text
  • File paths are now red in colour if selected file does not exist at path
  • Uniform Type Identifier now used to identify app bundles instead of .app suffix
  • Fixed issue with Info Window’s handling of moved or non-existent files
  • Minor interface refinements

01/10/2017 — Version 2.0

  • New Volumes filter
  • New «Sort By» submenu under View in main menu
  • Sorting by PID now correctly does numerical sort instead of alphabetic

07/06/2017- Version 1.9

  • Files can now be dragged and dropped
  • Cmd-F now focuses on filter field
  • File representations can now be copied to the clipboard
  • Cmd-double-click now reveals file in Finder
  • Fixed various minor user interface bugs
  • Fixed collapse all bug with Info Panel open
  • New compact interface size option
  • Fixed broken permissions display for non-bundle processes in Info Panel

24/02/2016 — Version 1.6

  • Asynchronous refresh
  • Much improved performance
  • UI improvements
  • New filtering options
  • Smarter regex filtering
  • Load results as root without relaunching application
  • Expanded sorting options
  • Migrated project to ARC, modern Objective-C and Xcode 7
  • Now requires OS X 10.8 or later

29/05/2009 — Version 1.4

  • Regular expressions in search filter
  • New «Relaunch as root» option
  • Fixed bug in Mac OS X 10.5
  • Now built for Mac OS X 10.4 or later

05/03/2004 — Version 1.3

  • Live update for search filter
  • Sorting by column now works
  • Performance improvements
  • Lots of code replaced by Cocoa bindings thanks to Bill Bumgarner

27/02/2004 — Version 1.2

  • Filter search field now tries to match all fields when filtering
  • Added auto-refresh timer option
  • lsof binary and kill signal type can now be set in Preferences
  • New application icon
  • Added Icelandic and Japanese localizations
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: