Top.Mail.Ru

lsof: Как найти открытые файлы и сетевые соединения в Linux

lsof: Как найти открытые файлы и сетевые соединения в Linux

Команды:

lsof (list of open files - список открытых файлов)

lsof +D /home/it-skills/

lsof -i (internet - интернет-соединения)

lsof -i (internet - интернет-соединения) -n (numeric - числовой формат) -P (Port - порт)

sudo lsof -i -n -P | grep -v usr1cv8

 

Далее, утилита lsof расшифровывается как LiSt of Open Files или список открытых файлов. Это один из ключевых инструментов администратора для анализа того, какие процессы используют какие файлы, в том числе обычные файлы, сокеты, устройства и сетевые порты.

lsof (list of open files - список открытых файлов)

lsof

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

Допустим, я хочу узнать, кто сейчас работает с файлом mtr_report.txt

Terminal ubuntu-srv:

less /home/it-skills/mtr_report.txt

 

SSH ubuntu-srv:

lsof | grep mtr

less      5867    it-skills    4r      REG              253,0     3452     396315 /home/it-skills/mtr_report.txt

либо перейти в директорию с файлом и запросить, кто его использует

cd /home/it-skills

lsof mtr_report.txt

COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
less    5867 it-skills    4r   REG  253,0     3452 396315 mtr_report.txt

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

lsof +D /home/it-skills/

COMMAND    PID      USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
pipewire  1080 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
pipewire- 1081 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
dbus-daem 1185 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
bash      1186 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
bash      4709 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
bash      5846 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
less      5867 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
less      5867 it-skills    4r   REG  253,0     3452 396315 /home/it-skills/mtr_report.txt
lsof      6258 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills
lsof      6259 it-skills  cwd    DIR  253,0     4096 394794 /home/it-skills

Так мы можем увидеть информацию обо всех файлах, относительно директории /home/it-skills/ и её подкаталогов, которые открыты и используются.

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

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

lsof -i (internet - интернет-соединения)

lsof -i

sudo !!

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

Помните, в прошлом видео мы определились, что у нас много соединений использует порт 1541? Так вот, из этого вывода, мы можем понять, что эти соединения инициализировал пользователь usr1cv8, что говорит нам о том, что они связанны с работой сервера 1С.

Все процессы, запущенные от имени данного пользователя связаны с работой сервера 1С.

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

nmbd        919            root   15u  IPv4  33858      0t0  UDP ubuntu-srv:netbios-ns

поэтому добавим ключи:

lsof -i -n (numeric) -P (Port)

sudo lsof -i -n -P

COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r  764 systemd-resolve   13u  IPv4  31703      0t0  UDP 127.0.0.53:53
ragent     841         usr1cv8    7u  IPv4  69845      0t0  TCP 127.0.0.1:35266->127.0.1.1:1541 (ESTABLISHED)
postgres   868        postgres    7u  IPv4  33514      0t0  TCP *:5432 (LISTEN)
nmbd       905            root   13u  IPv4  33973      0t0  UDP *:137
sshd       949            root    3u  IPv4  33496      0t0  TCP *:2222 (LISTEN)
apache2   1004            root    4u  IPv6  33820      0t0  TCP *:80 (LISTEN)
rmngr     1310         usr1cv8   11u  IPv6  35027      0t0  TCP *:1541 (LISTEN)
rphost    1416         usr1cv8    5u  IPv4  70023      0t0  TCP 127.0.0.1:36270->127.0.1.1:1541 (ESTABLISHED)
dbda      1465         usr1cv8    8u  IPv4  35195      0t0  TCP *:1562 (LISTEN)
apache2   3848        www-data    4u  IPv6  33820      0t0  TCP *:80 (LISTEN)
sshd      4606            root    4u  IPv4  49563      0t0  TCP 192.168.0.14:2222->192.168.1.253:52277 (ESTABLISHED)
sshd      4707       it-skills    4u  IPv4  49563      0t0  TCP 192.168.0.14:2222->192.168.1.253:52277 (ESTABLISHED)

Давайте оставим только те соединения, которые работают от пользователя usr1cv8

sudo lsof -i -n -P | grep usr1cv8

И исключим упоминание порта 1541

sudo lsof -i -n -P | grep usr1cv8 | grep -v 1541

Таким образом, мы видим, какие порты использует 1С, помимо порта 1541

Давайте исключим из вывода соединения запущенные от пользователя usr1cv8, чтобы посмотреть, кто еще работает с сетью, помимо 1С

sudo lsof -i -n -P | grep -v usr1cv8

COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r  764 systemd-resolve   13u  IPv4  31703      0t0  UDP 127.0.0.53:53
systemd-r  764 systemd-resolve   14u  IPv4  31704      0t0  TCP 127.0.0.53:53 (LISTEN)
postgres   868        postgres    7u  IPv4  33514      0t0  TCP *:5432 (LISTEN)
postgres   868        postgres    8u  IPv6  33524      0t0  TCP *:5432 (LISTEN)
nmbd       905            root   13u  IPv4  33973      0t0  UDP *:137
nmbd       905            root   14u  IPv4  33974      0t0  UDP *:138
nmbd       905            root   15u  IPv4  33985      0t0  UDP 192.168.0.14:137
nmbd       905            root   16u  IPv4  33986      0t0  UDP 192.168.0.255:137
nmbd       905            root   17u  IPv4  33987      0t0  UDP 192.168.0.14:138
nmbd       905            root   18u  IPv4  33988      0t0  UDP 192.168.0.255:138
sshd       949            root    3u  IPv4  33496      0t0  TCP *:2222 (LISTEN)
sshd       949            root    4u  IPv6  33507      0t0  TCP *:2222 (LISTEN)
sshd       979            root    4u  IPv4  33710      0t0  TCP 192.168.0.14:2222->192.168.1.253:58164 (ESTABLISHED)
apache2   1004            root    4u  IPv6  33820      0t0  TCP *:80 (LISTEN)
smbd      1068            root   44u  IPv6  34170      0t0  TCP *:445 (LISTEN)
smbd      1068            root   45u  IPv6  34171      0t0  TCP *:139 (LISTEN)
smbd      1068            root   46u  IPv4  34172      0t0  TCP *:445 (LISTEN)
smbd      1068            root   47u  IPv4  34173      0t0  TCP *:139 (LISTEN)
sshd      1184       it-skills    4u  IPv4  33710      0t0  TCP 192.168.0.14:2222->192.168.1.253:58164 (ESTABLISHED)
apache2   3848        www-data    4u  IPv6  33820      0t0  TCP *:80 (LISTEN)
apache2   3849        www-data    4u  IPv6  33820      0t0  TCP *:80 (LISTEN)
sshd      4606            root    4u  IPv4  49563      0t0  TCP 192.168.0.14:2222->192.168.1.253:52277 (ESTABLISHED)
sshd      4707       it-skills    4u  IPv4  49563      0t0  TCP 192.168.0.14:2222->192.168.1.253:52277 (ESTABLISHED)

В общем, используя различные фильтры, мы можем более детально анализировать вывод.