👪 Команда lsof Linux учебник для начинающих |

👪 Команда lsof Linux учебник для начинающих

Мануал

lsof – это уникальный инструмент сисадминов / безопасников.

Я использую его чаще всего для получения информации о сетевом подключении в системе, но это только начало для этого мощного и слишком малоизвестного приложения.

Инструмент точно называется lsof, потому что он «выводит список открытых файлов».

И помните, в UNIX почти все (включая сетевой сокет) является файлом.

Интересно, что lsof также является командой Linux / Unix с большинством переключателей.

У него их так много, что нужно использовать как минусы, так и плюсы.

usage: [-?abhlnNoOPRstUvV] [+|-c c] [+|-d s] [+D D] [+|-f[cgG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+|-M] [-o [o]]
 [-p s] [+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]

Как видите, у lsof действительно потрясающее количество опций.

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

Для меня lsof полностью заменяет netstat и ps.

В нем есть все, что я могу получить от этих инструментов, и многое, многое другое.

Итак, давайте посмотрим на некоторые из его основных возможностей:

Ключевые параметры

Важно понять несколько ключевых моментов о том, как работает lsof.

Наиболее важно, когда вы передаете ему параметры, по умолчанию используется все результаты (ИЛИ).

Поэтому, если вы выбираете список портов с -i, а также список процессов с -p, вы по умолчанию получите оба результата.

Вот еще несколько подобных моментов:

по умолчанию: без параметров lsof выводит список всех открытых файлов для активных процессов
группировка: можно группировать параметры, например, -abC, но вы должны следить за тем, какие опции принимают параметры
-a: И результаты (вместо ИЛИ)
-l: показать идентификатор пользователя вместо имени пользователя в выводе
-h: получить помощь
-t: получить только идентификаторы процессов
-U: получить адрес сокета UNIX
-F: вывод готов к другой команде, которую можно отформатировать различными способами, например, -F pcfn (для идентификатора процесса, имени команды, дескриптора файла и имени файла с нулевым терминатором)

Получение информации о сети

Как я уже сказал, один из моих основных вариантов использования lsof – это получение информации о том, как моя система взаимодействует с сетью.

Вот несколько основных моментов для получения этой информации:

Показать все соединения с -i

Некоторым нравится использовать netstat для получения сетевых подключений, но я предпочитаю использовать для этого lsof.

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

lsof -i

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
dhcpcd 6061 root 4u IPv4 4510 UDP *:bootpc
sshd 7703 root 3u IPv6  6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u IPv6  6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

Получить только трафик IPv6 с -i 6

lsof -i 6

Показать только TCP-соединения (работает так же для UDP)

Вы также можете отображать только соединения TCP или UDP, указав протокол сразу после -i.

lsof -iTCP

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
sshd 7703 root 3u IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

Показать сеть, связанную с определенным портом, используя -i: порт

lsof -i :22

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
sshd 7703 root 3u  IPv6 6499 TCP *:ssh (LISTEN)
sshd 7892 root 3u  IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

Показать соединения с конкретным хостом, используя @host

Это очень полезно, когда вы проверяете, есть ли у вас открытые соединения с данным хостом в сети или в Интернете.

lsof -i@172.16.12.5

sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->172.16.12.5:49901 (ESTABLISHED)

Показать соединения на основе хоста и порта, используя @host: port

Вы также можете комбинировать отображение информации по хосту и порту.

lsof -i@172.16.12.5:22

sshd 7892 root 3u IPv6 6757 TCP 10.10.1.5:ssh->192.168.1.5:49901 (ESTABLISHED)

Найти прослушиваемые порты

Найдите порты, ожидающие соединения.

lsof -i -sTCP:LISTEN

Вы также можете сделать это, набрав «LISTEN».

lsof -i | grep -i LISTEN

iTunes     400 daniel   16u  IPv4 0x4575228  0t0 TCP *:daap (LISTEN)

Найти установленные соединения

Вы также можете показать любые соединения, которые уже закреплены.

lsof -i -sTCP:ESTABLISHED

Вы также можете сделать это, просто выполнив поиск «ESTABLISHED» в выводе с помощью grep.

lsof -i | grep -i ESTABLISHED

firefox-b 169 daniel  49u IPv4 0t0 TCP 1.2.3.3:1863->1.2.3.4:http (ESTABLISHED)

Информация о пользователе

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

lsof -u daniel

-- snipped --
Dock 155 daniel  txt REG   14,2   2798436   823208 /usr/lib/libicucore.A.dylib
Dock 155 daniel  txt REG   14,2   1580212   823126 /usr/lib/libobjc.A.dylib
Dock 155 daniel  txt REG   14,2   2934184   823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 daniel  txt REG   14,2    132008   823505 /usr/lib/libgcc_s.1.dylib
Dock 155 daniel  txt REG   14,2    212160   823214 /usr/lib/libauto.dylib
-- snipped -

Показать, что делают все пользователи, кроме определенного пользователя, используя -u ^ user

lsof -u ^daniel

-- snipped --
Dock 155 jim  txt REG   14,2   2798436   823208 /usr/lib/libicucore.A.dylib
Dock 155 jim  txt REG   14,2   1580212   823126 /usr/lib/libobjc.A.dylib
Dock 155 jim  txt REG   14,2   2934184   823498 /usr/lib/libstdc++.6.0.4.dylib
Dock 155 jim  txt REG   14,2    132008   823505 /usr/lib/libgcc_s.1.dylib
Dock 155 jim  txt REG   14,2    212160   823214 /usr/lib/libauto.dylib
-- snipped --

Остановить “убить” все, что делает данный пользователь

Приятно иметь возможность уничтожать все, что запускается данным пользователем.

kill -9 `lsof -t -u daniel`

Команды и процессы

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

Вот несколько вариантов:

lsof -c syslog-ng

COMMAND    PID USER   FD   TYPE     DEVICE    SIZE       NODE NAME
syslog-ng 7547 root  cwd    DIR    3,3    4096   2 /
syslog-ng 7547 root  rtd    DIR    3,3    4096   2 /
syslog-ng 7547 root  txt    REG    3,3  113524  1064970 /usr/sbin/syslog-ng
-- snipped --

Посмотрите, что у данного идентификатора процесса открытj, используя -p

lsof -p 10075

-- snipped --
sshd    10068 root  mem    REG    3,3   34808 850407 /lib/libnss_files-2.4.so
sshd    10068 root  mem    REG    3,3   34924 850409 /lib/libnss_nis-2.4.so
sshd    10068 root  mem    REG    3,3   26596 850405 /lib/libnss_compat-2.4.so
sshd    10068 root  mem    REG    3,3  200152 509940 /usr/lib/libssl.so.0.9.7
sshd    10068 root  mem    REG    3,3   46216 510014 /usr/lib/liblber-2.3
sshd    10068 root  mem    REG    3,3   59868 850413 /lib/libresolv-2.4.so
sshd    10068 root  mem    REG    3,3 1197180 850396 /lib/libc-2.4.so
sshd    10068 root  mem    REG    3,3   22168 850398 /lib/libcrypt-2.4.so
sshd    10068 root  mem    REG    3,3   72784 850404 /lib/libnsl-2.4.so
sshd    10068 root  mem    REG    3,3   70632 850417 /lib/libz.so.1.2.3
sshd    10068 root  mem    REG    3,3    9992 850416 /lib/libutil-2.4.so
-- snipped --

Опция -t возвращает только PID

lsof -t -c Mail

350

Файлы и каталоги

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

lsof /var/log/messages/

COMMAND    PID USER   FD   TYPE DEVICE   SIZE   NODE NAME
syslog-ng 7547 root    4w   REG    3,3 217309 834024 /var/log/messages

Показать все, что взаимодействует с данным файлом

lsof /home/daniel/firewall_whitelist.txt

Расширенное использование

Подобно tcpdump, мощность lsof действительно проявляется, когда вы начинаете комбинировать запросы.

lsof -u daniel -i @1.1.1.1

bkdr   1893 daniel 3u  IPv6 3456 TCP 10.10.1.10:1234->1.1.1.1:31337 (ESTABLISHED)

Совместное использование параметров -t и -c для процессов HUP

kill -HUP `lsof -t -c sshd`

Показать открытые соединения с диапазоном портов

lsof -i @fw.google.com:2150=2180

Заключение

Эти примеры просто нацарапывают на поверхности функциональности lsof.

Для полной справки, запустите man lsof или проверьте онлайн-версию.

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

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий