ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

7 примеров команды lsof в Linux

7 примеров команды lsof в Linux

В этой статье вы узнаете, как вывести список открытых файлов пользователем или процессом с помощью команды lsof в Linux.

Мы думаем, что в какой-то момент вы задавались вопросом, есть ли способ показать открытые файлы процесса или пользователя. Хорошо, что ответ на этот вопрос это команда lsof.

Вы, наверное, уже знаете, что команда ls – это сокращение от «list». lsof обозначает «Список открытых файлов». И это именно то, что он делает, перечисляет открытые файлы по процессам, пользователям и идентификаторам процессов.

Позвольте нам показать вам наиболее распространенное использование команды lsof.

 

Примеры команды lsof

Если вы используете команду lsof без каких-либо параметров и аргументов, она выведет список всех открытых файлов всеми процессами в системе.

Lsof

 

Вывод должен быть таким:

COMMAND     PID   TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1                   root  cwd       DIR              252,1      4096          2 /
systemd       1                   root  rtd       DIR              252,1      4096          2 /
systemd       1                   root  txt       REG              252,1   1595792      17384 /lib/systemd/systemd
systemd       1                   root  mem       REG              252,1   1700792       2077 /lib/x86_64-linux-gnu/libm-2.27.so

 

Выводы в основном говорят сами за себя, но вы все еще можете задаться вопросом о столбцах FD и TYPE.

FD означает файловый дескриптор. Некоторые из общих значений для FD:

TYPE это не просто. Он определяет тип файла. Вот некоторые примеры:

Доверьтесь нам. Вы не захотите запускать команду lsof без аргументов.

Почему мы это говорим? Потому что он начнет заполнять ваш экран тысячами результатов.

Если мы запускаем команду lsof на сервере Ubuntu и подсчитываем количество строк с помощью команды wc, вот результат.

lsof | wc -l
11432

 

Да! Вот так. В системе открыто более одиннадцати тысяч файлов, открытых различными процессами.

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

Если вы не вошли в систему как root, вывод команды lsof будет очень ограничен. Рекомендуется использовать sudo, если вы вошли в систему как пользователь без полномочий root.

 

1. Перечислите все процессы, которые открыли файл

Это просто Вам просто нужно указать путь к файлу.

lsof <path_to_file>

 

2. Список всех файлов, открытых пользователем

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

lsof -u <user_name>

 

Вы также можете указать более одного пользователя, как это:

lsof -u user1, user2

 

или вот так:

lsof -u user1 -u user2

 

3. Список всех открытых файлов в каталоге

Если вам интересно, какие из файлов были открыты в определенном каталоге, вы можете использовать команду lsof с опцией + D.

lsof +D <path_to_directory>

 

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

4. Перечислите все открытые файлы процессом

В этом случае вам нужно знать идентификатор процесса (pid). Если вы знаете идентификатор процесса, вы можете использовать опцию -p команды lsof, чтобы найти файлы, открытые им.

lsof -p <pid>

 

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

lsof -p pid1, pid2, pid3

 

5. Список всех файлов, открытых командой

Это особенно полезно при отладке. Предположим, вы хотите увидеть, какие файлы используются демоном http, вам просто нужно указать имя команды (httpd в нашем примере).

lsof -c <command>

 

6. Найти открытый пользователем и командой или процессом

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

lsof -a -u user_name -c command_name

 

7. Перечислите сетевые соединения и порты с помощью команды lsof

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

Вы можете подать все виды открытых портов с опцией -i:

lsof -i

 

Вывод может выглядеть так:

lsof -i
 COMMAND     PID            USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
 sshd        920            root    3u  IPv4    20507      0t0  TCP *:ssh (LISTEN)
 sshd        920            root    4u  IPv6    20535      0t0  TCP *:ssh (LISTEN)
 docker-pr  1163            root    4u  IPv6    21687      0t0  TCP *:https (LISTEN)
 docker-pr  1175            root    4u  IPv6    21717      0t0  TCP *:http (LISTEN)
 sshd       7528            root    3u  IPv4 39506588      0t0  TCP testing:ssh->212.91.91.19:58904 (ESTABLISHED)
 systemd-r 10993 systemd-resolve   12u  IPv4 20901990      0t0  UDP localhost:domain 
 systemd-r 10993 systemd-resolve   13u  IPv4 20901991      0t0  TCP localhost:domain (LISTEN)

 

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

lsof -i tcp

 

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

lsof -i :<port_number>

 

Бонусный совет: использование оператора отрицания с lsof

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

Например, вы хотите перечислить все файлы, открытые пользователем, отличным от root, используйте его следующим образом:

lsof -u ^root

 

Команда lsof становится еще более полезной, когда вы используете ее с командой grep.

Мы надеемся, что вы узнали что-то новое с этой статьей. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.

Exit mobile version