👪 Команда 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

COMMANDPID USER FD TYPE DEVICE SIZE NODE NAMEdhcpcd 6061 root 4u IPv4 4510 UDP *:bootpcsshd 7703 root 3u IPv66499 TCP *:ssh (LISTEN)sshd 7892 root 3u IPv66757 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

COMMANDPID USER FD TYPE DEVICE SIZE NODE NAMEsshd 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

COMMANDPID USER FD TYPE DEVICE SIZE NODE NAMEsshd 7703 root 3uIPv6 6499 TCP *:ssh (LISTEN)sshd 7892 root 3uIPv6 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 16uIPv4 0x45752280t0 TCP *:daap (LISTEN)

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

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

# lsof -i -sTCP:ESTABLISHED

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

# lsof -i | grep -i ESTABLISHED

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

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

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

# lsof -u daniel

-- snipped --Dock 155 danieltxt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylibDock 155 danieltxt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylibDock 155 danieltxt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylibDock 155 danieltxt REG 14,2132008 823505 /usr/lib/libgcc_s.1.dylibDock 155 danieltxt REG 14,2212160 823214 /usr/lib/libauto.dylib-- snipped -

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

# lsof -u ^daniel

-- snipped --Dock 155 jimtxt REG 14,2 2798436 823208 /usr/lib/libicucore.A.dylibDock 155 jimtxt REG 14,2 1580212 823126 /usr/lib/libobjc.A.dylibDock 155 jimtxt REG 14,2 2934184 823498 /usr/lib/libstdc++.6.0.4.dylibDock 155 jimtxt REG 14,2132008 823505 /usr/lib/libgcc_s.1.dylibDock 155 jimtxt REG 14,2212160 823214 /usr/lib/libauto.dylib-- snipped --

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

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

# kill -9 `lsof -t -u daniel`

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

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

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

# lsof -c syslog-ng

COMMANDPID USER FD TYPE DEVICESIZE NODE NAMEsyslog-ng 7547 rootcwdDIR3,34096 2 /syslog-ng 7547 rootrtdDIR3,34096 2 /syslog-ng 7547 roottxtREG3,31135241064970 /usr/sbin/syslog-ng-- snipped --

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

# lsof -p 10075

-- snipped --sshd10068 rootmemREG3,3 34808 850407 /lib/libnss_files-2.4.sosshd10068 rootmemREG3,3 34924 850409 /lib/libnss_nis-2.4.sosshd10068 rootmemREG3,3 26596 850405 /lib/libnss_compat-2.4.sosshd10068 rootmemREG3,3200152 509940 /usr/lib/libssl.so.0.9.7sshd10068 rootmemREG3,3 46216 510014 /usr/lib/liblber-2.3sshd10068 rootmemREG3,3 59868 850413 /lib/libresolv-2.4.sosshd10068 rootmemREG3,3 1197180 850396 /lib/libc-2.4.sosshd10068 rootmemREG3,3 22168 850398 /lib/libcrypt-2.4.sosshd10068 rootmemREG3,3 72784 850404 /lib/libnsl-2.4.sosshd10068 rootmemREG3,3 70632 850417 /lib/libz.so.1.2.3sshd10068 rootmemREG3,39992 850416 /lib/libutil-2.4.so-- snipped --

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

# lsof -t -c Mail

350

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

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

# lsof /var/log/messages/

COMMANDPID USER FD TYPE DEVICE SIZE NODE NAMEsyslog-ng 7547 root4w REG3,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 3uIPv6 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 или проверьте онлайн-версию.

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

Отправка комментария

0 Комментарии