- lsof — поиск и устранение проблем в Linux
- Команда lsof
- Что такое открытые файлы?
- Почему нам это важно?
- Принцип работы lsof?
- Что еще интересного?
- Полезные параметры lsof
- Учебное пособие по команде Linux lsof для начинающих (15 примеров)
- О команде lsof
- Установить линукс командой lsof
- 1. Как вывести список всех открытых файлов
- 2. Как составить список файлов, открытых процессами, принадлежащими конкретному пользователю
- 3. Как составить список файлов на основе их интернет-адреса
- 4. Как вывести список всех файлов по имени приложения
- 5. Как составить список файлов, специфичных для процесса
- 6. Как составить список идентификаторов процессов, открывших определенный файл
- 7. Как вывести список всех открытых файлов в каталоге
- 8. Как составить список всех файлов Интернета и сетевых файлов x.25 (HP-UX)
- 9. Узнайте, какая программа использует порт
- 10. Как вывести список открытых файлов на основе диапазона портов
- 11. Как составить список открытых файлов в зависимости от типа соединения (TCP или UDP)
- 12. Как сделать lsof список родительских PID процессов
- 13. Как найти сетевую активность пользователя
- 14. Список всех отображаемых в память файлов
- 15. Список всех файлов NFS
- Заключение
lsof — поиск и устранение проблем в Linux
Статьи по тематике устранение неисправностей связаны с определенным набором решений проблем. В случае с Linux и Unix полезно иметь некое руководство по доступным инструментам, облегчающим работу по поиску и устранению проблем. Это такой документ, который содержит основные важные команды, позволяющие облегчить жизнь администраторам Linux/Unix при возникновении проблем.
Команда «list open files» или команда lsof выглядит достаточно просто, но ее использование в качестве инструмента для устранения неполадок не так очевиден, как кажется на первый взгляд. Например, если у неизвестного процесса открыто несколько файлов, знание того, какие они есть, может помочь определить, является ли процесс легитимным.
В первой статье рассмотрим множество вариантов использования команды lsof.
Во второй статье рассмотрены рекомендации о том, как исправлять проблемы этим множеством вариаций данной команды.
Контрольные вопросы, которые следует задать себе при диагностике проблем, является предметом нашей третьей статьи. Это поможет навести порядок в хаосе, который создают некоторые проблемы.
Работа с базами данных Oracle — обычная задача администратора, и немного узнать о них и о том, как тестировать соединения с ними, — ценный инструмент, описанный в четвертой статье. Если проблема связана с подключением, отпадает потребность в вызове администратора баз данных.
В завершении нашего руководства приведена статья с инструкциями по командам, необходимым для управления дисками и разбиения их на разделы.
Команда lsof
Команда lsof — это нечто большее, чем вы можете себе представить. Узнайте обо всех возможностях ее применения для поиска и устранения неполадок.
lsof — команда Unix/Linux, которая отображает все открытые файлы или идентифицирует процессы, открытые конкретными файлами. Удобная для оценки безопасности ИС, а также для устранения проблем lsof предлагает широкий спектр параметров, позволяющие использовать её различными способами — иногда даже превосходя команду ps для просмотра процессов и команду netstat для исследования сетевых интерфейсов.
Что такое открытые файлы?
Для начала давайте рассмотрим, что такое открытые файлы и почему они вам могут быть интересны. Открытые файлы — это файлы, которые использует какой-либо процесс. Этот процесс может быть командой, которую вы выполняете, или приложением, запущенным на сервере, которым вы управляете. Открытые файлы могут включать файлы данных и библиотеки, которые предоставляют общие процедуры. Многие файлы открываются каждый раз, когда вы входите в систему. Вы можете быть удивлены их количеством. Если вам интересно, сколько файлов у вас открыто прямо сейчас, попробуйте эту команду:
И если вы когда-нибудь слышали, что для Unix все является файлом, вы, возможно, не слишком удивитесь, узнав, что lsof работает с такими вещами, как сетевые интерфейсы, которые большинство из нас обычно не считают файлами.
Почему нам это важно?
Иногда появляется необходимость узнать об открытых файлах, потому что вы пытаетесь удалить файл и обнаруживаете, что он уже используется. Может быть, он заполняет ваше дисковое пространство. Вам необходимо узнать, каким файлом какой процесс открыт, чтобы можно было остановить его и очистить файл. В других случаях вам понадобится узнать, что делает неизвестный подозрительный процесс, и только изучение файлов, которые открыл подозрительный процесс, может предоставить ценную информацию.
Принцип работы lsof?
При применении команды lsof без параметров в терминале выводятся все файлы, которые открыты (используются) в вашей системе. Если вы запустите lsof от своего имени, вы получите длинный список файлов, но выходные данные будут включать в себя множество сообщений об отказе в разрешении — многие из них представляют открытые файлы в файловой системе /proc, которые вам не разрешено видеть. Запустите команду от имени root, и вы увидите больше выходных данных.
Что еще интересного?
Беглый взгляд на довольно большой справочник lsof отобразит вам, что мы увидели только меньшую ее часть возможностей. lsof имеет обширный список опций.
В этой статье мы разберем наиболее полезные.
Чтобы начать работу со всеми этими параметрами, вам необходимо о том знать о возможности использования более одной опции. Для этого используйте слово OR. Таким образом, вы получаете список, объединяющий результаты указанных вами параметров. Помимо этого вы можете выбрать вариант, со служебным словом AND. В этом случае ваши опции будут применяться вместе. Другими словами, вы увидите те файлы, процессы и т. д., которые соответствуют всем указанным вами параметрам. Для применения объединения AND, добавьте в свою команду параметр -a.
Полезные параметры lsof
Примеры использования lsof с параметрами, отображены на скриншотах ниже. Они демонстрируют наиболее полезные вещи, которые вы можете применить с данной командой.
На скриншоте ниже lsof, перечисляет все процессы, у которых открыт конкретный файл:
На этом скриншоте выводится список всех процессов, у которых есть открытые файлы в определенном каталоге:
На этом скриншоте показаны файлы, открытые bash:
На этом скриншоте, но с использованием подстроки вместо полного имени процесса:
На этом скриншоте перечислены открытые файлы для определенного идентификатора процесса:
lsof помогает изучить сетевые подключения:
На скриншоте показан пример просмотра портов и/или установленных соединений.
Также можно сетевые подключения для одного конкретного источника.
Просмотр файлов пользователем
На этом скриншоте lsof просматриваем открытые файлы для конкретного пользователя:
Для просмотра открытых файлов всех пользователей, кроме определенного (здесь это root), используйте знак ^:
Перечислить идентификаторы процессов для процессов, запускаемых конкретным пользователем:
$ sudo lsof -t -u froggy 15352 15353
Завершить все процессы, принадлежащие конкретному пользователю:
$ sudo kill lsof -t -u froggy
Используйте параметр -a для использования оператора AND для объединения ваших опций вместе, помня, что это ограничивает вывод только тем, что соответствует всем указанным условиям:
Учебное пособие по команде Linux lsof для начинающих (15 примеров)
Команда Linux lsof показывает в своих выходных данных информацию о файлах, открытых процессом. В этой статье мы обсудим инструмент Linux lsof на 15 простых для понимания примерах. Обратите внимание, что все примеры, упомянутые в этом руководстве, были протестированы на Ubuntu 22.04 LTS, но они будут работать и в других дистрибутивах Linux, таких как Debian, Fedora и CentOS.
О команде lsof
Если вы хотите быстро увидеть имена файлов, которые были открыты определенным процессом (или всеми процессами), команда lsof позволит вам сделать это. Открытый файл может быть обычным файлом или каталогом, библиотекой, специальным файлом или блочным устройством, символьным специальным файлом, исполняемой текстовой ссылкой или даже потоком или сетевым файлом. Вы также можете перечислить процессы по номеру порта. Если вы не вошли в систему как пользователь root, возможно, вам придется добавить sudo к командам.
Установить линукс командой lsof
Большинство дистрибутивов Linux поставляются с предустановленным lsof. Если он еще не установлен в вашей системе, используйте следующие команды для установки lsof:
1. Как вывести список всех открытых файлов
Чтобы вывести список всех открытых файлов, запустите команду lsof без каких-либо аргументов:
Например, вот снимок экрана части вывода, полученного вышеприведенной командой в моей системе:
Первый столбец представляет процесс, а последний столбец содержит имя файла. Для получения подробной информации обо всех столбцах перейдите на справочную страницу команд.
2. Как составить список файлов, открытых процессами, принадлежащими конкретному пользователю
Инструмент также позволяет вам перечислять файлы, открытые процессами, принадлежащими определенному пользователю. Доступ к этой функции можно получить с помощью параметра командной строки -u.
3. Как составить список файлов на основе их интернет-адреса
Инструмент позволяет составлять список файлов на основе их интернет-адреса. Это можно сделать с помощью параметра командной строки -i. Например, если вы хотите, вы можете отображать файлы IPv4 и IPv6 отдельно. Для IPv4 выполните следующую команду:
Аналогично, для IPv6 выполните следующую команду:
4. Как вывести список всех файлов по имени приложения
Параметр командной строки -c позволяет получить все файлы, открытые по имени программы.
Вам не обязательно использовать полное имя программы, так как показаны все программы, начинающиеся со слова apache. Так что в нашем случае в нем будут перечислены все процессы приложения apache2.
Опция -c — это просто ярлык для двух команд:
5. Как составить список файлов, специфичных для процесса
Инструмент также позволяет отображать открытые файлы на основе идентификационных номеров процессов (PID). Это можно сделать с помощью параметра командной строки -p.
Двигаясь дальше, вы также можете исключить определенные PID из вывода, добавив перед ними символ ^. Чтобы исключить определенный PID, вы можете запустить следующую команду:
Как видно на скриншоте выше, процесс с id 1 исключен из списка.
6. Как составить список идентификаторов процессов, открывших определенный файл
Инструмент позволяет вам перечислить идентификаторы процессов, которые открыли определенный файл. Это можно сделать с помощью параметра командной строки -t.
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
7. Как вывести список всех открытых файлов в каталоге
При желании вы также можете выполнить lsof поиск всех открытых экземпляров каталога (включая все содержащиеся в нем файлы и каталоги). Доступ к этой функции можно получить с помощью параметра командной строки +D.
8. Как составить список всех файлов Интернета и сетевых файлов x.25 (HP-UX)
Это возможно с помощью параметра командной строки -i, который мы описали ранее. Просто вы должны использовать его без каких-либо аргументов.
9. Узнайте, какая программа использует порт
Переключатель -i команды позволяет вам найти процесс или приложение, которое прослушивает определенный номер порта. В приведенном ниже примере я проверил, какая программа использует порт 80.
Вместо номера порта вы можете использовать имя службы, указанное в файле /etc/services. Пример проверки того, какое приложение прослушивает порт HTTPS (443):
В приведенных выше примерах будут проверяться как TCP, так и UDP. Если вы хотите проверить только TCP или UDP, добавьте слово tcp или udp. Например, какое приложение использует порт 25 TCP:
или какое приложение использует UDP-порт 53:
10. Как вывести список открытых файлов на основе диапазона портов
Утилита также позволяет составлять список открытых файлов на основе определенного порта или диапазона портов. Например, чтобы отобразить открытые файлы для порта 1-1024, используйте следующую команду:
11. Как составить список открытых файлов в зависимости от типа соединения (TCP или UDP)
Инструмент позволяет составлять список файлов в зависимости от типа подключения. Например, для определенных файлов UDP используйте следующую команду:
Точно так же вы можете заставить lsof отображать файлы, специфичные для TCP.
12. Как сделать lsof список родительских PID процессов
Существует также параметр, который заставляет lsof отображать номер идентификатора родительского процесса (PPID) в выходных данных. Рассматриваемый вариант — -R.
Чтобы получить информацию о PPID для определенного PID, вы можете запустить следующую команду:
13. Как найти сетевую активность пользователя
Используя комбинацию параметров командной строки -i и -u, мы можем искать все сетевые подключения пользователя Linux. Это может быть полезно, если вы проверяете систему, которая могла быть взломана. В этом примере мы проверяем всю сетевую активность пользователя www-data:
14. Список всех отображаемых в память файлов
Эта команда выводит список всех отображаемых в память файлов в Linux.
15. Список всех файлов NFS
Опция -N показывает вам список всех файлов NFS (сетевая файловая система).
Заключение
Хотя lsof предлагает множество опций, тех, которые мы обсуждали здесь, должно быть достаточно для начала работы. После того, как вы попрактикуетесь с ними, перейдите на справочную страницу инструментов, чтобы узнать больше об этом. О, и если у вас есть какие-либо сомнения и вопросы, оставьте комментарий ниже.