Утилиты для получения помощи и информации
Источники получения помощи в 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. 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