18 быстрых примеров команды lsof для любителей Linux
lsof — это утилита командной строки для всех Unix и Linux подобных операционных систем для проверки « списка открытых файлов » Само название «lsof» происходит от этой функции. Команда lsof в основном используется для получения информации о файлах, которые открываются различными процессами. Открытые файлы в системе могут быть разных типов, например, дисковые файлы, сетевые сокеты, именованные каналы и устройства. Эта отличительная особенность позволяет лучше отлаживать и понимать операционную систему Linux.
Когда мы выполняем минимальную установку CentOS / RHEL / Ubuntu / OpenSUSE , lsof не является частью установки по умолчанию, поэтому используйте следующую команду для установки команды или утилиты lsof
Для системы CentOS / RHEL,
~] # yum install lsof -y
Системы на основе Debian (Ubuntu / Linux Mint)
~] # apt install lsof -y
Для системы OpenSUSE,
~] # zypper install lsof
Команда «lsof» имеет множество опций и переключателей. Будет очень интересно изучить некоторые из этих важных. В этой статье мы обсудим 18 полезных примеров команды lsof для гиков Linux.
Пример: 1) Список всех открытых файлов вашей системы (lsof)
Выполнение команды lsof без каких-либо параметров выведет список всех открытых файлов вашей системы, принадлежащих всем активным процессам.
Просто набрав команду «lsof» без каких-либо параметров в командной строке, вы получите следующий результат:
Примечание . — Поскольку вывод lsof предоставляет много информации для STDOUT, лучше использовать вертикальную черту «|» операция, чтобы просмотреть этот вывод постранично.
~]# lsof | more
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 128 /
systemd 1 root rtd DIR 253,0 4096 128 /
systemd 1 root txt REG 253,0 1489960 50674818 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20032 33628284 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 252704 33745961 /usr/lib64/libblkid.so.1.1.0
Приведенный выше вывод команды, если вы внимательно его изучите, предоставляет много информации со многими параметрами. Например, процесс « systemd » (который является процессом демона) имеет идентификатор процесса ( PID ) «1», пользователь — « root », файловый дескриптор ( FD ) — « cwd » и т. Д. FD предлагает множество values, поскольку известно, что дескриптор файла создается для любых открытых файлов автоматически в системах Linux. Ниже приведены некоторые из хорошо известных значений «FD», используемых для команд lsof.
Примечание . В некоторых случаях за «mem» следует число и различные символы, такие как «r», «u», «w» и т. Д. Эти символы: «r» для чтения, «w» для записи, «u» для прочти и напиши.
Наконец, « Type » в выводе команды указывает тип файла. Ниже приведены стандартные типы файлов в системах Linux.
Другие поля, которые отображаются вместе с этим, следующие:
- DEVICE –> Идентификатор устройства
- SIZE/OFF –> Фактический размер этого процесса (взятый во время выполнения)
- NODE –> Обычно номер inode каталога или родительского каталога
- NAME –> Путь или ссылка
Пример: 2) Список открытых файлов определенной файловой системы (/ proc)
Как вы знаете, « /proc » будет существовать только в течение срока службы ОС Linux, этот каталог содержит много важной информации, связанной с процессами. Выполнение «lsof» в / proc даст нам интересный результат для изучения,
~]# lsof /proc
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 9r REG 0,3 0 6690 /proc/1/mountinfo
systemd 1 root 11r REG 0,3 0 4026532018 /proc/swaps
systemd-j 462 root 10r REG 0,3 0 6936 /proc/sys/kernel/hostname
lsof 5186 root 3r DIR 0,3 0 1 /proc
lsof 5186 root 6r DIR 0,3 0 28890 /proc/5186/fd
~]#
Как упоминалось ранее, здесь фиксируется «lsof» самого «lsof», и отображаются все подробности. Помимо «lsof» существуют другие процессы, такие как systemd и rsyslogd, которые являются демонами, используемыми для свопинга, монтирования и т. Д.
Точно так же мы можем перечислить открытые файлы другой файловой системы, например /var/log,
~]# lsof /var/log/
Команда lsof становится очень удобной в ситуации, когда команды df и du показывают разное использование диска одной и той же файловой системы, с помощью команды lsof мы можем найти файлы, которые были удалены, когда они были открыты и использовались каким-то процессом,
~]# lsof /var/log | grep -i "deleted"
Вышеупомянутая команда предоставит вам pid файлов, которые были удалены, но все еще существуют в системе в удаленном состоянии. Итак, чтобы освободить место в файловой системе, мы можем безопасно убить процесс по его pid.
Пример: 3) Список открытых файлов для команды «lsof»
Само «lsof» выдает сообщение об ошибке,
~]# lsof lsof
lsof: status error on lsof: No such file or directory
lsof 4.87
Пример: 4) Список открытых файлов для пользователей (lsof -u <user_name>)
«Lsof» можно использовать для всех пользователей, вошедших в систему Linux. В этом случае «lsof» отобразит все открытые файлы для соответствующего пользователя.
Список всех открытых файлов для пользователя root
~]# lsof -u root | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 128 /
systemd 1 root rtd DIR 253,0 4096 128 /
systemd 1 root txt REG 253,0 1620416 51034677 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20032 33628284 /usr/lib64/libuuid.so.1.3.0
systemd 1 root mem REG 253,0 252704 33745961 /usr/lib64/libblkid.so.1.1.0
systemd 1 root mem REG 253,0 90632 33628275 /usr/lib64/libz.so.1.2.7
systemd 1 root mem REG 253,0 153192 33618596 /usr/lib64/liblzma.so.5.0.99
systemd 1 root mem REG 253,0 19888 33656455 /usr/lib64/libattr.so.1.1.0
…………………………………………………………
Список открытых файлов для пользователей без полномочий root, давайте посмотрим все открытые файлы для пользователя infoit,
~]# lsof -u infoit | more Или ~]# lsof -l -u infoit | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2657 infoit cwd DIR 253,0 4096 128 / sshd 2657 infoit rtd DIR 253,0 4096 128 / sshd 2657 infoit txt REG 253,0 815520 34698340 /usr/sbin/sshd sshd 2657 infoit DEL REG 0,4 23850 /dev/zero sshd 2657 infoit mem REG 253,0 15472 33831639 /usr/lib64/security/pam_lastlog.so sshd 2657 infoit mem REG 253,0 68192 33628305 /usr/lib64/libbz2.so.1.0.6 sshd 2657 infoit mem REG 253,0 153192 33618596 /usr/lib64/liblzma.so.5.0.99 sshd 2657 infoit mem REG 253,0 91496 33628319 /usr/lib64/libelf-0.163.so sftp-serv 2661 infoit mem REG 253,0 14608 33618582 /usr/lib64/libutil-2.17.so sftp-serv 2661 infoit mem REG 253,0 61856 33863972 /usr/lib64/liblber-2.4.so.2.10.3 sftp-serv 2661 infoit mem REG 253,0 344224 33863974 /usr/lib64/libldap-2.4.so.2.10.3 sftp-serv 2661 infoit mem REG 253,0 19512 33618298 /usr/lib64/libdl-2.17.so sftp-serv 2661 infoit mem REG 253,0 2516624 33657314 /usr/lib64/libcrypto.so.1.0.2k sftp-serv 2661 infoit mem REG 253,0 164432 33618285 /usr/lib64/ld-2.17.so sftp-serv 2661 infoit 0r FIFO 0,8 0t0 24046 pipe sftp-serv 2661 infoit 1w FIFO 0,8 0t0 24047 pipe sftp-serv 2661 infoit 2w FIFO 0,8 0t0 24048 pipe bash 2670 infoit cwd DIR 253,0 79 17157147 /home/infoit ………………………………………………………………………
Чтобы вывести список всех открытых файлов, кроме пользователя root, используйте ^ (символ каретки) перед пользователем root (lsof -u ^ root),
~]# lsof -u ^root | more
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dbus-daem 1662 dbus cwd DIR 253,0 4096 128 /
dbus-daem 1662 dbus rtd DIR 253,0 4096 128 /
dbus-daem 1662 dbus txt REG 253,0 441176 17133533 /usr/bin/dbus-daemon
dbus-daem 1662 dbus mem REG 253,0 57824 33618566 /usr/lib64/libnss_files-2.17.so
dbus-daem 1662 dbus mem REG 253,0 19512 33618298 /usr/lib64/libdl-2.17.so
dbus-daem 1662 dbus mem REG 253,0 398272 33628261 /usr/lib64/libpcre.so.1.2.0
dbus-daem 1662 dbus mem REG 253,0 2107816 33618292 /usr/lib64/libc-2.17.so
……………………………………………………………………………………………………………
Пример: 5) Список всех открытых файлов Интернета и домена UNIX (lsof -i -U)
Используйте параметр «-i -U» в команде lsof для вывода списка всех открытых файлов Интернета и домена UNIX в вашей системе, пример показан ниже.
~]# lsof -i -U
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 12u unix 0xffff8800b8baab40 0t0 11075 /run/systemd/cgroups-agent
systemd 1 root 13u unix 0xffff8800b8bab2c0 0t0 11077 /run/systemd/private
systemd 1 root 42u IPv4 16576 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 43u IPv4 16577 0t0 UDP *:sunrpc
rpcbind 1633 rpc 3u unix 0xffff8800bab8cf00 0t0 16574 /var/run/rpcbind.sock
rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1633 rpc 5u IPv4 16577 0t0 UDP *:sunrpc
rpcbind 1633 rpc 6u IPv6 16578 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1633 rpc 7u IPv6 16579 0t0 UDP *:sunrpc
rpcbind 1633 rpc 10u IPv4 16649 0t0 UDP *:960
sshd 2532 root 3u IPv4 21120 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED)
sshd 2532 root 4u unix 0xffff8800bbef3a40 0t0 21260 socket
sshd 2532 root 8u unix 0xffff8800b8afd680 0t0 21298 /tmp/ssh-QHz9BdtRvt/agent.2532
sshd 2536 root 3u IPv4 21191 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED)
sshd 2536 root 4u unix 0xffff8800b8afd2c0 0t0 21363 socket
………………………………………………………………………………………………………………
Пример: 6) Список всех открытых сетевых файлов IPv4 (lsof -i 4)
Используйте опцию «-i -4» в команде lsof, чтобы вывести список всех открытых сетевых файлов для IPv4,
~]# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 42u IPv4 16576 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 43u IPv4 16577 0t0 UDP *:sunrpc
rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN)
sshd 2258 root 3u IPv4 19493 0t0 TCP *:ssh (LISTEN)
master 2360 root 13u IPv4 20087 0t0 TCP localhost:smtp (LISTEN)
dhclient 2494 root 6u IPv4 20983 0t0 UDP *:bootpc
dhclient 2494 root 20u IPv4 20951 0t0 UDP *:24884
dhclient 2514 root 6u IPv4 20866 0t0 UDP *:bootpc
sshd 2532 root 3u IPv4 21120 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED)
sshd 2536 root 3u IPv4 21191 0t0 TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED)
sshd 2621 root 3u IPv4 23506 0t0 TCP 192.168.1.6:ssh->192.168.1.9:65422 (ESTABLISHED)
sshd 2655 root 3u IPv4 23863 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED)
sshd 2657 infoit 3u IPv4 23795 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49990 (ESTABLISHED)
sshd 2660 infoit 3u IPv4 23863 0t0 TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED)
~]#
Чтобы перечислить все открытые сетевые файлы IPv4, используемые определенным процессом, чей идентификатор процесса «any_number», приведены ниже.
Предположим, мы хотим перечислить все сетевые файлы IPv4 для процесса rpcbind.
Синтаксис : # lsof i 4 -a -p {process_pid}
~]# lsof -i 4 -a -p 1633
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1633 rpc 4u IPv4 16576 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1633 rpc 5u IPv4 16577 0t0 UDP *:sunrpc
rpcbind 1633 rpc 10u IPv4 16649 0t0 UDP *:960
~]#
Пример: 7) Список всех открытых сетевых файлов для IPv6 (lsof -i 6)
Предполагая, что домен ipv6 поддерживается, вывод lsof будет примерно таким, как показано ниже:
~]# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 44u IPv6 16578 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 46u IPv6 16579 0t0 UDP *:sunrpc
rpcbind 1633 rpc 6u IPv6 16578 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1633 rpc 7u IPv6 16579 0t0 UDP *:sunrpc
rpcbind 1633 rpc 11u IPv6 16650 0t0 UDP *:960
sshd 2258 root 4u IPv6 19504 0t0 TCP *:ssh (LISTEN)
master 2360 root 14u IPv6 20088 0t0 TCP localhost:smtp (LISTEN)
dhclient 2494 root 21u IPv6 20952 0t0 UDP *:16498
dhclient 2514 root 21u IPv6 20823 0t0 UDP *:34955
httpd 2594 root 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2595 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2596 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2597 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2598 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2599 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
~]#
Пример: 8) Список всех процессов TCP и UDP, запущенных на определенном порту (lsof -i TCP / UDP: порт)
Предположим, мы хотим вывести список всех TCP-процессов, запущенных на 80-м порту, используйте следующую команду
~]# lsof -i TCP:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2594 root 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2595 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2596 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2597 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2598 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
httpd 2599 apache 4u IPv6 22703 0t0 TCP *:http (LISTEN)
~]#
Чтобы вывести список всех открытых файлов на TCP-порту из диапазона портов (от 1 до 1048), используйте следующую команду
~]# lsof -i TCP:1-1048
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 41u IPv4 16863 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 44u IPv6 16865 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1663 rpc 4u IPv4 16863 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1663 rpc 6u IPv6 16865 0t0 TCP *:sunrpc (LISTEN)
sshd 2294 root 3u IPv4 19949 0t0 TCP *:ssh (LISTEN)
sshd 2294 root 4u IPv6 19965 0t0 TCP *:ssh (LISTEN)
master 2433 root 13u IPv4 21026 0t0 TCP localhost:smtp (LISTEN)
master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN)
sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
sshd 2663 root 3u IPv4 22123 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED)
httpd 2837 root 4u IPv6 26112 0t0 TCP *:http (LISTEN)
httpd 2838 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN)
httpd 2839 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN)
httpd 2840 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN)
httpd 2841 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN)
httpd 2842 apache 4u IPv6 26112 0t0 TCP *:http (LISTEN)
sshd 2891 root 3u IPv4 26896 0t0 TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED)
sshd 2895 infoit 3u IPv4 26896 0t0 TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED)
~]#
Чтобы вывести список всех процессов UDP, запущенных на определенном порту, используйте следующую команду
~]# lsof -i UDP:16498
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dhclient 2494 root 21u IPv6 20952 0t0 UDP *:16498
~]#
Примечание . Чтобы вывести список всех открытых процессов UDP в вашей системе Linux, используйте команду « lsof -i UDP ».
Пример: 9) Список всех открытых файлов для определенного устройства (lsof <device_name>)
Следующая команда может использоваться для вывода списка всех открытых файлов на / dev / vda1.
Примечание: в этом случае тип устройства является виртуальным, обычно это может быть тип / dev / hd <number> / sd {number}
~]# lsof /dev/vda1 | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,1 4096 2 /
systemd 1 root rtd DIR 253,1 4096 2 /
systemd 1 root txt REG 253,1 1577264 262271 /lib/systemd/systemd
systemd 1 root mem REG 253,1 18976 262252 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd 1 root mem REG 253,1 262408 262245 /lib/x86_64-linux-gnu/libblkid.so.1.1.0
systemd 1 root mem REG 253,1 14608 266364 /lib/x86_64-linux-gnu/libdl-2.23.so
systemd 1 root mem REG 253,1 456632 262207 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
systemd 1 root mem REG 253,1 1868984 266362 /lib/x86_64-linux-gnu/libc-2.23.so
systemd 1 root mem REG 253,1 138696 266361 /lib/x86_64-linux-gnu/libpthread-2.23.so
systemd 1 root mem REG 253,1 286824 261756 /lib/x86_64-linux-gnu/libmount.so.1.1.0
Пример: 10) Список процессов с открытыми файлами в файловой системе NFS
Бывают ситуации, когда вы смонтировали файловую систему nfs на свой Linux-сервер, но сервер nfs недоступен и вы хотите вывести список всех процессов с открытыми файлами в этой файловой системе nfs,
~]# lsof -b <nfs-share-mount-point>
Пример: 11) Список открытых файлов, связанных с терминалом (lsof / dev / tty {number})
Следующая команда используется для всех открытых файлов на / dev / tty1.
Примечание . В этом случае тип терминала — «tty1». Также можно использовать любой другой тип терминала, например / dev / tty <number>
~]# lsof /dev/tty1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2442 root 0u CHR 4,1 0t0 4689 /dev/tty1
bash 2442 root 1u CHR 4,1 0t0 4689 /dev/tty1
bash 2442 root 2u CHR 4,1 0t0 4689 /dev/tty1
bash 2442 root 255u CHR 4,1 0t0 4689 /dev/tty1
~]#
Пример: 12) Список PID, имени команды, дескриптора файла, номера устройства и номера индексного дескриптора файла (lsof -FpcfDi)
Один из интересных вариантов в «lsof» для получения вывода поля PID (P) и имени команды (c) для каждого процесса, дескриптора файла (f), номера файлового устройства (D) и номера индексного дескриптора файла (i) для каждого файла. Пример каждого процесса показан ниже
~]# lsof -FpcfDi | more
p1
csystemd
fcwd
D0xfd00
i128
frtd
D0xfd00
i128
ftxt
D0xfd00
i51034677
fmem
D0xfd00
i33628284
………………
Примечание. Отображается длинный список вывода, но он сокращен для экономии места.
Пример: 13) Список всех сетевых подключений (lsof -i)
Используйте опцию «-i» в команде lsof, чтобы вывести список всех связанных с сетью процессов или команд, пример показан ниже,
~]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 41u IPv4 16863 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 43u IPv4 16864 0t0 UDP *:sunrpc
rpcbind 1663 rpc 4u IPv4 16863 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1663 rpc 5u IPv4 16864 0t0 UDP *:sunrpc
rpcbind 1663 rpc 11u IPv6 17051 0t0 UDP *:988
sshd 2294 root 3u IPv4 19949 0t0 TCP *:ssh (LISTEN)
sshd 2294 root 4u IPv6 19965 0t0 TCP *:ssh (LISTEN)
rpc.statd 2300 rpcuser 10u IPv6 19974 0t0 UDP *:48486
rpc.statd 2300 rpcuser 11u IPv6 20045 0t0 TCP *:39334 (LISTEN)
rpc.mount 2311 root 7u IPv4 19897 0t0 UDP *:mountd
rpc.mount 2311 root 8u IPv4 19911 0t0 TCP *:mountd (LISTEN)
master 2433 root 13u IPv4 21026 0t0 TCP localhost:smtp (LISTEN)
master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN)
dhclient 2563 root 6u IPv4 21589 0t0 UDP *:bootpc
dhclient 2583 root 21u IPv6 21365 0t0 UDP *:10368
sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
~]#
Пример: 14) Найдите файл сокета IPv4 / IPv6
Чтобы найти файл сокета IPv4, используйте следующую команду, замените IP-адрес на IP-адрес вашей системы.
~]# lsof -i@192.168.1.3
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 2600 root 3u IPv4 21737 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd 2659 root 3u IPv4 22056 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
sshd 2663 root 3u IPv4 22123 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED)
sshd 2724 root 3u IPv4 25004 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED)
sshd 2728 infoit 3u IPv4 25004 0t0 TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED)
~]#
Чтобы найти файл сокета IP версии 6 по соответствующему числовому адресу в форме двоеточия, в котором есть ряд нулей — например, адрес обратной связи (127.0.0.1), используйте команду и параметры ниже:
~]# lsof -i@[::1]
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master 2433 root 14u IPv6 21027 0t0 TCP localhost:smtp (LISTEN)
~]#
Пример: 15) Список всех процессов или команд, принадлежащих идентификатору процесса (lsof -p <pid>)
Предположим, мы хотим перечислить все процессы или команды, принадлежащие определенному идентификатору процесса. Пример показан ниже.
~]# lsof -p 2842 | more
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2842 apache cwd DIR 253,0 4096 128 /
httpd 2842 apache rtd DIR 253,0 4096 128 /
httpd 2842 apache txt REG 253,0 523680 34641136 /usr/sbin/httpd
httpd 2842 apache mem REG 253,0 110808 33618576 /usr/lib64/libresolv-2.17.so
httpd 2842 apache mem REG 253,0 27512 33618564 /usr/lib64/libnss_dns-2.17.so
httpd 2842 apache mem REG 253,0 57824 33618566 /usr/lib64/libnss_files-2.17.so
httpd 2842 apache mem REG 253,0 27808 17080385 /usr/lib64/httpd/modules/mod_cgi.so
httpd 2842 apache mem REG 253,0 68192 33628305 /usr/lib64/libbz2.so.1.0.6
………………………………………………
Пример: 16) Убить все процессы, принадлежащие определенному пользователю.
Команда lsof становится очень удобной, когда мы хотим убить весь процесс, принадлежащий определенному пользователю, в приведенном ниже примере будет уничтожен весь процесс, принадлежащий пользователю infoit.
~]# kill -9 `lsof -t -u infoit`
~]#
Пример: 17) Список всех открытых файлов в определенном каталоге (lsod + D <directory-path>)
Предположим, мы хотим перечислить все открытые файлы в каталоге / var / log, а затем использовать следующую команду lsof,
~]# lsof +D /var/log/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
auditd 1635 root 4w REG 253,0 1177238 51031316 /var/log/audit/audit.log
wpa_suppl 1840 root 3w REG 253,0 240 392280 /var/log/wpa_supplicant.log
tuned 2295 root 3w REG 253,0 6000 17713597 /var/log/tuned/tuned.log
rsyslogd 2296 root 6w REG 253,0 7118 392279 /var/log/cron
rsyslogd 2296 root 7w REG 253,0 449328 338975 /var/log/messages
rsyslogd 2296 root 8w REG 253,0 26038 338976 /var/log/secure
rsyslogd 2296 root 9w REG 253,0 1576 338977 /var/log/maillog
rsyslogd 2296 root 10w REG 253,0 9458 138 /var/log/boot.log
httpd 2837 root 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2837 root 7w REG 253,0 0 34824416 /var/log/httpd/access_log
httpd 2838 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2838 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log
httpd 2839 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2839 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log
httpd 2840 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2840 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log
httpd 2841 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2841 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log
httpd 2842 apache 2w REG 253,0 2829 34768157 /var/log/httpd/error_log
httpd 2842 apache 7w REG 253,0 0 34824416 /var/log/httpd/access_log
~]#
Примечание: в приведенной выше команде, если мы используем опцию + D, то lsof будет рекурсивно перечислять все открытые файлы каталога, и если вы не хотите рекурсивно перечислять открытые файлы каталога, используйте опцию «+ d».
Пример: 18) «lsof», чтобы проверить, кто открыл файл журнала (чтобы найти PID)
Следующая опция команды используется, чтобы узнать, кто открыл файл /var/log/httpd/access.log и каков PID этого процесса. А затем с помощью команды «ps -ef» мы можем найти точного пользователя
~]# lsof -t /var/log/httpd/access_log 3109 3110 3111 3112 3113 3114 ~]# ~]# ps -ef | grep -E "3109|3110|3111|3112|3113|3114" | grep -v grep or ~]# ps -fp "$(lsof -t /var/log/httpd/access_log | xargs echo)" root 3109 1 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3110 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3111 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3112 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3113 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 3114 3109 0 03:36 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND ~]#
Многие параметры команды «lsof» можно комбинировать для различных целей, как показано ниже, некоторые комбинации флагов «-c», «-u» и «-I». Для получения более подробной информации обратитесь к странице руководства.
Приведенная ниже комбинация команд каждую секунду будет выводить информацию о домашнем каталоге «infoit», который все файлы открывались повторно.
~]# lsof -u infoit -c init -a -r1
=======
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
inita.sh 2971 infoit cwd DIR 8,1 4096 393218 /home/infoit
inita.sh 2971 infoit rtd DIR 8,1 4096 2 /
inita.sh 2971 infoit txt REG 8,1 83344 524367 /bin/dash
inita.sh 2971 infoit mem REG 8,1 1434567 1443695 /lib/i386-linux-gnu/libc-2.13.so
……………………………………………………………………………
Заключение:
Как упоминалось во вводном разделе, «lsof» — очень мощная и полезная команда в дистрибутивах на базе Linux. Эту команду и перечисленные параметры можно использовать для различных целей, таких как отладка, устранение неполадок и сортировка процессов Linux. Упомянутые варианты и комбинации, если попробуете, помогут установить полное понимание команды «lsof». Другие команды, такие как lstat , stat и ls, также можно использовать в сочетании с командой «lsof».