В Linux команда lsof
(LiSt Open Files) позволяет выводить список всех открытых файлов, а в Linux файлами является всё.
Применение этой утилиты крайне полезно при необходимости размонтирования диска, на котором ряд файлов ещё используется.
Содержание
- Синтаксис
- Использование команды lsof в Linux
- Список всех открытых файлов
- Список открытых файлов конкретного пользователя
- Процессы, запущенные на определённом порту
- Список IPv4 и IPv6 открытых файлов
- Список открытых файлов TCP-портов 1-1024
- Исключение пользователя
- Наблюдение за работой конкретного пользователя
- Список всех сетевых подключений
- Поиск по PID
- Убиваем активности конкретного пользователя
- Заключение
Синтаксис
lsof [опция][имя_пользователя]
Использование команды lsof в Linux
Список всех открытых файлов
В данном случае команда запускается без опций:
oleg@mobile:~:$ sudo lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
lsof 50808 root cwd DIR 8,8 20480 18874369 /home/oleg
lsof 50808 root rtd DIR 8,6 4096 2 /
lsof 50808 root txt REG 8,6 175648 1458779 /usr/bin/lsof
lsof 50808 root mem REG 8,6 3387904 1471186 /usr/lib/locale/locale-archive
lsof 50808 root mem REG 8,6 59704 1445231 /usr/lib/libresolv.so.2
lsof 50808 root mem REG 8,6 22200 1453661 /usr/lib/libkeyutils.so.1.10
lsof 50808 root mem REG 8,6 55352 1453870 /usr/lib/libkrb5support.so.0.1
lsof 50808 root mem REG 8,6 18304 1449241 /usr/lib/libcom_err.so.2.1
lsof 50808 root mem REG 8,6 182128 1453826 /usr/lib/libk5crypto.so.3.1
lsof 50808 root mem REG 8,6 882552 1453867 /usr/lib/libkrb5.so.3.3
lsof 50808 root mem REG 8,6 344160 1453815 /usr/lib/libgssapi_krb5.so.2.2
lsof 50808 root mem REG 8,6 1953112 1445176 /usr/lib/libc.so.6
lsof 50808 root mem REG 8,6 182696 1453938 /usr/lib/libtirpc.so.3.0.0
lsof 50808 root mem REG 8,6 216192 1445160 /usr/lib/ld-linux-x86-64.so.2
lsof 50808 root 4r FIFO 0,13 0t0 185603 pipe
lsof 50808 root 7w FIFO 0,13 0t0 185604 pipe
oleg@mobile:~:$
Здесь выведена лишь незначительная часть списка, так как он весьма велик.
Рассмотрим подробнее два столбца FD
и TYPE
.
FD
(дескриптор файла) может иметь следующие значения:
- cwd
- Текущий рабочий каталог
- rtd
- Корневой каталог
- txt
- Текст программы (код и данные)
- mem
- Файл памяти
- r
- Режим доступа для чтения
- w
- Режим доступа для записи
- u
- Режим чтения и записи
TYPE
— тип файлов и их идентификация:
- DIR
- Каталог
- REG
- Обычный файл
- CHR
- Специальный символьный файл.
- FIFO
- First In First Out
Список открытых файлов конкретного пользователя
В данном случае утилита используется с опцией -u
:
oleg@mobile:~:$ lsof -u oleg
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
lsof 53390 oleg 6r FIFO 0,13 0t0 192702 pipe
lsof 53391 oleg cwd DIR 8,8 20480 18874369 /home/oleg
lsof 53391 oleg rtd DIR 8,6 4096 2 /
lsof 53391 oleg txt REG 8,6 175648 1458779 /usr/bin/lsof
lsof 53391 oleg mem REG 8,6 3387904 1471186 /usr/lib/locale/locale-archive
lsof 53391 oleg mem REG 8,6 59704 1445231 /usr/lib/libresolv.so.2
lsof 53391 oleg mem REG 8,6 22200 1453661 /usr/lib/libkeyutils.so.1.10
lsof 53391 oleg mem REG 8,6 55352 1453870 /usr/lib/libkrb5support.so.0.1
lsof 53391 oleg mem REG 8,6 18304 1449241 /usr/lib/libcom_err.so.2.1
lsof 53391 oleg mem REG 8,6 182128 1453826 /usr/lib/libk5crypto.so.3.1
lsof 53391 oleg mem REG 8,6 882552 1453867 /usr/lib/libkrb5.so.3.3
lsof 53391 oleg mem REG 8,6 344160 1453815 /usr/lib/libgssapi_krb5.so.2.2
lsof 53391 oleg mem REG 8,6 1953112 1445176 /usr/lib/libc.so.6
lsof 53391 oleg mem REG 8,6 182696 1453938 /usr/lib/libtirpc.so.3.0.0
lsof 53391 oleg mem REG 8,6 216192 1445160 /usr/lib/ld-linux-x86-64.so.2
lsof 53391 oleg 4r FIFO 0,13 0t0 192701 pipe
lsof 53391 oleg 7w FIFO 0,13 0t0 192702 pipe
oleg@mobile:~:$
Процессы, запущенные на определённом порту
Для вывода процессов, запущенных на определённом порту, утилита запускается с опцией -i
. Выводим процессы, запущенные на порту 22
:
oleg@mobile:~:$ sudo lsof -i TCP:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 355 root 3u IPv4 17746 0t0 TCP *:ssh (LISTEN)
sshd 355 root 4u IPv6 17748 0t0 TCP *:ssh (LISTEN)
oleg@mobile:~:$
Список IPv4 и IPv6 открытых файлов
В этом случае указываются порты 4
(IPv4) и 6
(IPv6):
oleg@mobile:~:$ sudo lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
NetworkMa 347 root 24u IPv4 17923 0t0 UDP mobile:bootpc->_gateway:bootps
sshd 355 root 3u IPv4 17746 0t0 TCP *:ssh (LISTEN)
nginx 367 root 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 368 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 369 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
mariadbd 391 mysql 22u IPv4 17922 0t0 TCP *:mysql (LISTEN)
chromium 13650 oleg 177u IPv4 58330 0t0 UDP 224.0.0.251:mdns
chromium 13700 oleg 22u IPv4 204153 0t0 UDP mobile:45726->sof02s31-in-f2.1e100.net:https
chromium 13700 oleg 26u IPv4 194785 0t0 TCP mobile:38656->mc.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 27u IPv4 203752 0t0 UDP mobile:36409->sof04s07-in-f10.1e100.net:https
chromium 13700 oleg 44u IPv4 84307 0t0 TCP mobile:43248->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 47u IPv4 148309 0t0 TCP mobile:53348->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 55u IPv4 149507 0t0 TCP mobile:59400->bs.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 64u IPv4 148315 0t0 TCP mobile:59386->bs.yandex.ru:https (ESTABLISHED)
oleg@mobile:~:$
oleg@mobile:~:$ sudo lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 355 root 4u IPv6 17748 0t0 TCP *:ssh (LISTEN)
mariadbd 391 mysql 26u IPv6 17924 0t0 TCP *:mysql (LISTEN)
oleg@mobile:~:$
Список открытых файлов TCP-портов 1-1024
Вывод списка открытых портов в диапазоне 1-1024
осуществляется так:
oleg@mobile:~:$ sudo lsof -i TCP:1-1024
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 355 root 3u IPv4 17746 0t0 TCP *:ssh (LISTEN)
sshd 355 root 4u IPv6 17748 0t0 TCP *:ssh (LISTEN)
nginx 367 root 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 368 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 369 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
chromium 13700 oleg 26u IPv4 194785 0t0 TCP mobile:38656->mc.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 44u IPv4 84307 0t0 TCP mobile:43248->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 47u IPv4 148309 0t0 TCP mobile:53348->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 55u IPv4 149507 0t0 TCP mobile:59400->bs.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 64u IPv4 148315 0t0 TCP mobile:59386->bs.yandex.ru:https (ESTABLISHED)
oleg@mobile:~:$
Исключение пользователя
Для исключения пользователя в запускаемой команде используется символ ^
. Исключаем пользователя root
:
oleg@mobile:~:$ sudo lsof -i -u^root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 368 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 369 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
mariadbd 391 mysql 22u IPv4 17922 0t0 TCP *:mysql (LISTEN)
mariadbd 391 mysql 26u IPv6 17924 0t0 TCP *:mysql (LISTEN)
chromium 13650 oleg 177u IPv4 58330 0t0 UDP 224.0.0.251:mdns
chromium 13700 oleg 22u IPv4 209135 0t0 TCP mobile:53766->sof02s18-in-f14.1e100.net:https (ESTABLISHED)
chromium 13700 oleg 26u IPv4 194785 0t0 TCP mobile:38656->mc.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 27u IPv4 208940 0t0 TCP mobile:55728->185.65.148.89:https (ESTABLISHED)
chromium 13700 oleg 33u IPv4 209885 0t0 UDP mobile:36603->sof04s02-in-f10.1e100.net:https
chromium 13700 oleg 41u IPv4 209141 0t0 TCP mobile:60226->104.16.89.20:https (ESTABLISHED)
chromium 13700 oleg 44u IPv4 84307 0t0 TCP mobile:43248->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 47u IPv4 148309 0t0 TCP mobile:53348->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 50u IPv4 209062 0t0 TCP mobile:34824->93.186.225.194:https (ESTABLISHED)
chromium 13700 oleg 55u IPv4 149507 0t0 TCP mobile:59400->bs.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 64u IPv4 148315 0t0 TCP mobile:59386->bs.yandex.ru:https (ESTABLISHED)
oleg@mobile:~:$
Наблюдение за работой конкретного пользователя
Наблюдаем за просмотром файлов и использованием команд пользователем oleg
:
oleg@mobile:~:$ sudo lsof -i -u^root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
chromium 59280 oleg 34r REG 0,18 0 209042 /proc/59280/statm
chromium 59280 oleg 35r REG 0,18 0 209041 /proc/59280/status
sleep 61320 oleg cwd DIR 8,8 20480 18874369 /home/oleg
sleep 61320 oleg rtd DIR 8,6 4096 2 /
sleep 61320 oleg txt REG 8,6 30872 1454803 /usr/bin/sleep
sleep 61320 oleg mem REG 8,6 3387904 1471186 /usr/lib/locale/locale-archive
sleep 61320 oleg mem REG 8,6 1953112 1445176 /usr/lib/libc.so.6
sleep 61320 oleg mem REG 8,6 216192 1445160 /usr/lib/ld-linux-x86-64.so.2
sleep 61320 oleg 0r CHR 1,3 0t0 4 /dev/null
sleep 61320 oleg 1u unix 0x0000000023ce2b14 0t0 17706 type=STREAM (CONNECTED)
sleep 61320 oleg 2u unix 0x0000000023ce2b14 0t0 17706 type=STREAM (CONNECTED)
sleep 61320 oleg 3w REG 8,6 82983 531092 /var/log/slim.log
oleg@mobile:~:$
Список всех сетевых подключений
В данном случае утилита просто запускается с опцией -i
:
oleg@mobile:~:$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
NetworkMa 347 root 24u IPv4 17923 0t0 UDP mobile:bootpc->_gateway:bootps
sshd 355 root 3u IPv4 17746 0t0 TCP *:ssh (LISTEN)
sshd 355 root 4u IPv6 17748 0t0 TCP *:ssh (LISTEN)
nginx 367 root 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 368 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
nginx 369 http 16u IPv4 18689 0t0 TCP *:http (LISTEN)
mariadbd 391 mysql 22u IPv4 17922 0t0 TCP *:mysql (LISTEN)
mariadbd 391 mysql 26u IPv6 17924 0t0 TCP *:mysql (LISTEN)
chromium 13650 oleg 177u IPv4 58330 0t0 UDP 224.0.0.251:mdns
chromium 13700 oleg 26u IPv4 194785 0t0 TCP mobile:38656->mc.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 44u IPv4 84307 0t0 TCP mobile:43248->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 47u IPv4 148309 0t0 TCP mobile:53348->yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 55u IPv4 149507 0t0 TCP mobile:59400->bs.yandex.ru:https (ESTABLISHED)
chromium 13700 oleg 64u IPv4 148315 0t0 TCP mobile:59386->bs.yandex.ru:https (ESTABLISHED)
oleg@mobile:~:$
Поиск по PID
Ищем по PID
391
:
oleg@mobile:~:$ sudo lsof -p 391
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mariadbd 391 mysql cwd DIR 8,6 4096 526449 /var/lib/mysql
mariadbd 391 mysql rtd DIR 8,6 4096 2 /
mariadbd 391 mysql txt REG 8,6 25373560 1476291 /usr/bin/mariadbd
...
mariadbd 391 mysql 104u REG 8,6 114688 531971 /var/lib/mysql/svastiru/users.ibd
mariadbd 391 mysql 105u REG 8,6 98304 531973 /var/lib/mysql/svastiru/users_data.ibd
mariadbd 391 mysql 106u REG 8,6 180224 531975 /var/lib/mysql/svastiru/users_field_data.ibd
mariadbd 391 mysql 107u REG 8,6 327680 531977 /var/lib/mysql/svastiru/watchdog.ibd
mariadbd 391 mysql 108u REG 8,6 638976 531979 /var/lib/mysql/svastiru/xmlsitemap.ibd
oleg@mobile:~:$
Убиваем активности конкретного пользователя
Приводимая команда убьёт все процессы пользователя oleg
:
oleg@mobile:~:$ sudo kill -9 `lsof -t -u oleg`
Заключение
В данной статье была приведена незначительная часть возможностей команды lsof
в Linux. Эта утилита, выводящая список открытых файлов, очень полезна. Для ознакомления с полным списком её опций достаточно набрать lsof --help
.