10 примеров команд lsof (список открытых файлов) в Linux
Это наша постоянная серия команд Linux, и в этой статье мы рассмотрим команду lsof с практическими примерами. lsof, что означает LiSt Open Files, используется для определения того, какие файлы каким процессом Linux открыты.
Как мы все знаем, Linux/Unix рассматривает всё как файл (каналы, сокеты, каталоги, устройства и т. д.). Одна из причин использования команды lsof заключается в том, что диск не может быть отключен, поскольку он говорит, что файлы используются. С помощью команды lsof мы можем легко определить используемые файлы.
1. Перечислите все открытые файлы с помощью команды lsof.
В приведенном ниже примере будет показан длинный список открытых файлов, некоторые из них извлечены для лучшего понимания, в котором отображаются такие столбцы, как Command, PID, USER<., FD, ТИП и т. д.
lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 145180 147164 /sbin/init
init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
init 1 root 0u CHR 1,3 0t0 3764 /dev/null
init 1 root 1u CHR 1,3 0t0 3764 /dev/null
init 1 root 2u CHR 1,3 0t0 3764 /dev/null
init 1 root 3r FIFO 0,8 0t0 8449 pipe
init 1 root 4w FIFO 0,8 0t0 8449 pipe
init 1 root 5r DIR 0,10 0 1 inotify
init 1 root 6r DIR 0,10 0 1 inotify
init 1 root 7u unix 0xc1513880 0t0 8450 socket
Разделы и их значения говорят сами за себя. Однако мы рассмотрим столбцы FD & TYPE более подробно.
FD – обозначает дескриптор файла и может принимать некоторые значения:
- cwd текущий рабочий каталог
- rtd корневой каталог
- txt текст программы (код и данные)
- mem файл, отображенный в памяти
Также номера столбцов FD, например 1u, представляют собой фактический дескриптор файла, за которым следуют u, r, w. его режима как:
- r для доступа на чтение.
- w для доступа на запись.
- u для доступа на чтение и запись.
ТИП – файлов и их идентификация.
- DIR – каталог.
- REG – обычный файл.
- CHR – специальный символьный файл.
- FIFO – «первым пришел – первым ушел»
2. Список открытых файлов пользователя.
Команда ниже отобразит список всех открытых файлов пользователя tecmint.
lsof -u tecmint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1838 tecmint cwd DIR 253,0 4096 2 /
sshd 1838 tecmint rtd DIR 253,0 4096 2 /
sshd 1838 tecmint txt REG 253,0 532336 188129 /usr/sbin/sshd
sshd 1838 tecmint mem REG 253,0 19784 190237 /lib/libdl-2.12.so
sshd 1838 tecmint mem REG 253,0 122436 190247 /lib/libselinux.so.1
sshd 1838 tecmint mem REG 253,0 255968 190256 /lib/libgssapi_krb5.so.2.2
sshd 1838 tecmint mem REG 253,0 874580 190255 /lib/libkrb5.so.3.3
3. Найдите процессы, работающие на определенном порту.
Чтобы узнать все запущенные процессы Linux на определенном порту, просто используйте следующую команду с опцией -i. В приведенном ниже примере будут перечислены все запущенные процессы порта 22.
lsof -i TCP:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)
4. Перечислите только открытые файлы IPv4 и IPv6.
В приведенном ниже примере показаны только сетевые файлы IPv4 и IPv6, открываемые отдельными командами.
lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)
5. Список открытых файлов TCP-портов в диапазоне 1–1024.
Чтобы перечислить все запущенные процессы открытия файлов TCP, порт находится в диапазоне 1-1024.
lsof -i TCP:1-1024
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)
master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd 1838 tecmint 3u IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd 1871 root 3r IPv4 15842 0t0 TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)
6. Исключить пользователя с символом «^»
Здесь мы исключили пользователя root. Вы можете исключить конкретного пользователя, используя ’^’ с помощью команды, как показано выше.
lsof -i -u^root
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc
rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
rpc.statd 1277 rpcuser 5r IPv4 11836 0t0 UDP *:soap-beep
rpc.statd 1277 rpcuser 8u IPv4 11850 0t0 UDP *:55146
rpc.statd 1277 rpcuser 9u IPv4 11854 0t0 TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
7. Узнайте, кто какие файлы и команды просматривает?
В приведенном ниже примере показано, что пользователь tecmint использует такие команды, как ping и /etc.
lsof -i -u tecmint
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1839 tecmint cwd DIR 253,0 12288 15 /etc
ping 2525 tecmint cwd DIR 253,0 12288 15 /etc
8. Перечислите все сетевые подключения.
Следующая команда с опцией '-i' отображает список всех сетевых подключений «ПРИСЫЛЕНИЕ И УСТАНОВЛЕНИЕ».
lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc
rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954
rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN)
avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns
avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600
rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)
cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)
cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN)
sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN)
master 1551 root 12u IPv4 12896 0t0 TCP localhost:smtp (LISTEN)
master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN)
sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN)
httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)
clock-app 2362 narad 21u IPv4 22591 0t0 TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome 2377 narad 61u IPv4 25862 0t0 TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome 2377 narad 80u IPv4 25866 0t0 TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)
9. Поиск по PID
В приведенном ниже примере показано, чей PID равен 1 [One].
lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 253,0 4096 2 /
init 1 root rtd DIR 253,0 4096 2 /
init 1 root txt REG 253,0 145180 147164 /sbin/init
init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so
init 1 root mem REG 253,0 142472 189970 /lib/ld-2.12.so
10. Уничтожить всю активность конкретного пользователя.
Иногда вам может потребоваться завершить все процессы для конкретного пользователя. Приведенная ниже команда уничтожит все процессы пользователя tecmint.
kill -9 `lsof -t -u tecmint`
Примечание. Здесь невозможно привести примеры всех доступных опций, это руководство предназначено только для того, чтобы показать, как можно использовать команду lsof. Вы можете обратиться к справочной странице команды lsof, чтобы узнать больше об этом. Пожалуйста, поделитесь ею, если вы считаете эту статью полезной, через поле для комментариев ниже.