Я установил lsof linux , чтобы за считанные секунды увидеть, какой процесс держит открытым какой файл, сокет или порт. Так я выявляю заблокированные журналы, занятые Порты и без лишних хлопот работаю с заблокированными файлами, а также целенаправленно устраняю сбои.
Центральные пункты
Чтобы начало прошло успешно, я кратко изложу самые важные Аспекты вкратце.
- Ресурсы отображать: процессы, файлы, каталоги, устройства, каналы, сокеты.
- Фильтры использовать: по имени процесса (-c), PID (-p), пользователю (-u), файлу, каталогу (+d/+D), порту (-i).
- Ошибка ограничить: найти заблокированные файлы, устранить конфликты портов, определить зависшие службы.
- Сеть проверка: быстрое выявление активных соединений и занятых портов.
- Рабочий процесс оптимизировать: сначала сузить круг, затем провести целенаправленную проверку, а после этого принять меры.
Почему lsof важен в повседневной жизни
Я использую lsof, если служба не запускается, файл возвращает статус „busy“ или порт уже занят. Этот инструмент связывает файл, процесс, пользователя и сеть в единую четкую Посмотреть. Я сразу вижу, какой PID удерживает доступ и с какого момента. Таким образом, я действую, а не гадаю, и завершаю нужный процесс, вместо того чтобы случайно остановить не тот сервис. Особенно на рабочих серверах это позволяет мне сэкономить от нескольких минут до нескольких часов, поскольку я могу определить причину непосредственно по процессу. Такой подход сокращает количество заявок в службу поддержки, уменьшает количество сбоев и обеспечивает надежную работу системы. Выводы.
Понимание основного синтаксиса и вывода
Основная форма звучит так: lsof [опции] и без параметров возвращает все открытые в данный момент объекты. На системах с высокой нагрузкой я фильтрую вывод, вместо того чтобы просматривать тысячи строк. Важно, что в Linux понятие „файл“ трактуется широко: к нему относятся каталоги, устройства, библиотеки и сетевыеРозетки. В выводе полезны такие столбцы, как COMMAND, PID, USER, FD, TYPE, NAME. В первую очередь я обращаю внимание на FD (дескриптор файла), TYPE (REG, DIR, IPv4/6) и NAME с указанием пути или порта. Прочитав эти столбцы, можно быстро понять текущее состояние системы и четко распределить ресурсы Процессы.
Установка и права доступа на практике
Во многих дистрибутивах lsof не предустановлено. Поэтому я устанавливаю его заранее через менеджер пакетов (apt install lsof, dnf install lsof, yum install lsof или pacman -S lsof), чтобы в случае инцидента он был сразу доступен. Для получения полной картины я обычно запускаю lsof с судо , поскольку без расширенных прав многие записи завершаются сообщением „permission denied“ или вовсе отсутствуют. Тем не менее я сознательно начинаю работу без root-прав, проверяю, как далеко я смогу зайти, и повышаю права только в случае необходимости. В системах с SELinux или AppArmor я учитываю, что контексты безопасности могут ограничивать доступ к информации; в зависимости от сборки отображается lsof Добавляю контексты. При массовых запросах я подавляю предупреждения с помощью -w, чтобы скрипты оставались отказоустойчивыми.
Безопасное чтение полей и типов FD
Колонка FD — это мой ключ к пониманию. Типичные значения:
cwd: текущий рабочий каталог процесса.txt: исполняемый файл (текстовый сегмент) процесса.mem: загруженные общие библиотеки и отображенные файлы (отображение в памяти).0u, 1w, 2w: Стандартные дескрипторы (stdin, stdout, stderr) с режимомr(читать),w(запись) илиu(чтение/запись).- более высокие цифры, такие как
3u,7r: обычные открытые дескрипторы, часто представляющие собой файлы, сокеты или каналы.
Из ТИП Я читаю класс объекта: REG (обычный файл), DIR (каталог), CHR/BLK (устройство для рисования/блоков), FIFO (труба), IPv4/IPv6 (сеть), UNIX (сокет домена Unix). В ИМЯ указывается путь или, в случае сокетов, конечная точка, например:. TCP *:80 (LISTEN) или UDP 127.0.0.1:123. Если я (удалено) В итоге я вижу, что файл был удалён, но по-прежнему удерживается PID — типичная причина „исчезновения“ места на диске.
Целевая фильтрация: файлы, каталоги, порты
Сначала я определю контекст, а затем начну с подходящего Фильтры. Для каталога я использую lsof +D /var/log (рекурсивно) или lsof +d /var/log (только сама папка). Отдельные файлы я проверяю напрямую, например lsof /var/log/syslog, чтобы просматривать процессы записи. Для портов я устанавливаю lsof -i:80, lsof -i:443 или в общем смысле lsof -i . Я люблю сочетать это с -nP, чтобы lsof не преобразовывал IP-адреса и порты и работал быстрее. Таким образом, из запутанного состояния системы в кратчайшие сроки формируется четкая картина Изображение.
Объединение и уточнение фильтров
Для получения воспроизводимых результатов анализа я использую фильтры в сочетании с -a логически связаны. Таким образом, я получаю только записи, которые соответствуют всем условиям. Примеры:
lsof -a -p 1234 -d cwd,txt,mem– только рабочий каталог, двоичный файл и загруженные библиотеки процесса.lsof -a -iTCP -sTCP:ESTABLISHED -p 1234– только установленные TCP-соединения с определенным PID.lsof -a -u www-data +d /var/www– Файлы, расположенные в каталоге /var/www, которые удерживают открытыми процессы пользователя www-data.
С -d я фильтрую по дескрипторам (числам или названиям, таким как cwd, mem). -U позволяет целенаправленно выводить в вывод Unix-доменные сокеты, когда мне нужно исследовать проблемы с локальным межпроцессным взаимодействием. Таким образом я уменьшаю количество лишней информации и вижу именно то, что имеет отношение к вопросу.
Быстрое сопоставление процессов и пользователей
Если я знаю название службы, то lsof -c nginx все открытые файлы веб-сервера, включая Библиотеки, конфигурации и сокеты. Для точного анализа я часто использую PID: lsof -p 1234 отображает все дескрипторы конкретного процесса. Проверки, связанные с пользователем, я выполняю с помощью lsof -u mysql или другой учетной записью, чтобы отобразить ресурсы, открытые учетной записью службы. В более подробных анализах я дополняю представление процессов с помощью Учёт производственных процессов и вижу, как часто и как долго программы используют ресурсы. Такое сочетание данных о процессах, пользователях и действиях позволяет мне быстро разобраться в сложных явлениях Причина.
Особые случаи: удаленные файлы, Logrotate и файлы, занимающие много места
Если „не хватает“ места на диске, я часто нахожу причину с помощью lsof +L1: В нём отображаются файлы, которые уже удалены, но по-прежнему удерживаются открытыми процессами. Типичными примерами являются ротированные журналы, большие временные файлы или дампы отладки. Вместо того чтобы в спешке увеличивать размер раздела, я целенаправленно завершаю отображаемые PID или посылаю стандартный сигнал для перезагрузки. Для служб ведения журналов я предпочитаю выполнять чистую перезагрузку соответствующей службы, чтобы дескрипторы были открыты заново. Временные решения, такие как truncate или непосредственное удаление без перезапуска процесса лишь откладывает решение проблемы.
При работе с длинными потоками данных я дополнительно проверяю столбец SIZE/OFF (отображается в зависимости от сборки), чтобы определить, не привязан ли какой-либо процесс к очень большому смещению. Это объясняет, почему дескриптор занимает столько памяти, хотя файл помечен как удаленный.
Систематическое устранение типичных неисправностей
Заблокированные файлы я удаляю после того, как lsof показал мне, как правильно это сделать. Вместо того чтобы бессистемно останавливать службы, я целенаправленно завершаю процесс по PID или перезапускаю именно эту службу. Конфликты портов я устраняю с помощью lsof -i:, просматриваю PID, к которому он привязан, и настраиваю порт, службу или брандмауэр соответственно. Если процесс завис, я проверяю его открытые дескрипторы с помощью lsof -p и определить, ожидает ли он файла, канала или сокета. Для углубленного анализа я дополняю этот вид следующим образом: целенаправленное использование strace, чтобы в режиме реального времени отслеживать системные вызовы. Так я надежно устраняю повторяющиеся сбои и документирую последовательность действий для будущих Инциденты.
Учитывать контейнеры и пространства имён
Объяснение в контексте контейнерных сред (например, с собственными сетевыми пространствами имён) lsof у меня возникают несоответствия между хостом и контейнером. Я либо запускаю lsof непосредственно в контейнере, либо с хоста вхожу в пространство имён целевого процесса. Так я понимаю, почему порт в контейнере находится в состоянии LISTEN, а на хосте выглядит „свободным“: они находятся в разных пространствах имён. Аналогичным образом я поступаю с пространствами имён монтирования: привязанные монтирования и накладные файловые системы отображаются в столбце NAME с их реальными путями и помогают находить неправильно настроенные тома. Кроме того, я сортирую открытые дескрипторы по пользователям и Cgroup, если управляю сервисами с помощью супервизоров или решений для оркестрации.
Анализ сети с помощью команды lsof -i
С lsof -i я отслеживаю активные соединения и прослушиваю занятые Порты. Фильтры, такие как lsof -iTCP -sTCP:LISTEN целенаправленно прослушивает службы, находящиеся в состоянии LISTEN. Для отдельных протоколов я использую lsof -iUDP или определённых портов, таких как lsof -i:25 для почтовых серверов. Кроме того, я проверяю, не держит ли PID открытыми несколько сокетов, что может свидетельствовать об утечках или бесконечных циклах. При проверке безопасности я сравниваю ожидаемые службы с результатами вывода и выявляю посторонние или забытые Услуги. Такой обзор сети позволяет сэкономить время, так как мне не нужно одновременно запрашивать данные из нескольких инструментов, а вся информация отображается в одном месте.
Углубленное изучение сведений о сети
Для особо целенаправленных запросов я использую синтаксис адресов и портов из -i: Я ограничиваю поиск исходными или целевыми адресами (lsof [email protected]) или укажи адрес и порт (lsof [email protected]:443). С -sTCP:ESTABLISHED я вижу продуктивные сессии, в то время как -sTCP:LISTEN выводит только прослушиватели. Анализ UDP я использую для выявления служб с большим количеством кратковременных сокетов (DNS, Syslog, NTP). Кроме того, я проверяю, не подвергаются ли процессы излишнему риску в сети (например, прослушиватели на 0.0.0.0 (вместо локального интерфейса). Это позволяет сократить объем работ по укреплению безопасности на более поздних этапах.
Обзор таблицы: часто используемые параметры
Я очень часто использую несколько основных настроек и настраиваю их в зависимости от Сценарий. В приведенной ниже таблице собраны основные переключатели с кратким пояснением и примером. Так я быстрее нахожу подходящую форму и не трачу время на просмотр длинных выводов справки. Я использую эти опции модульно, что позволяет мне сохранять гибкость. Освоив этот базовый набор, можно решать многие задачи с помощью одного-единственного призыв.
| Вариант | Назначение | Пример |
|---|---|---|
| -i | Отобразить сетевые подключения и занятые порты | lsof -i:443 |
| -c ИМЯ | Фильтрация по названиям процессов (соответствие префикса) | lsof -c nginx |
| -p PID | Все открытые файлы с данным PID | lsof -p 1234 |
| -u ПОЛЬЗОВАТЕЛЬ | Открытые ресурсы пользователя | lsof -u mysql |
| +d DIR | Только указанный каталог | lsof +d /var/log |
| +D DIR | Рекурсивный обход каталога | lsof +D /var/log |
| -nP | Без поиска DNS и имен портов (быстрее) | lsof -nP -i |
| -t | Выводить только PID (удобно для скриптов) | lsof -t -i:80 |
| +L1 | Показать удаленные, но все еще открытые файлы | lsof +L1 |
Я использую -t часто используется для прямой передачи PID в скрипты, например, в kill или systemctl. С +L1 я нахожу процессы, которые продолжают удерживать удаленные файлы в открытом состоянии и тем самым занимают место на диске. В сочетании с -r (повторяю) я наблюдаю изменения в течение короткого расстояния. Проводя тестирование поэтапно, можно избежать ошибочных интерпретаций и обеспечить последовательность в работе. Таким образом, диагноз остается воспроизводимым и поддающимся оценке очистить.
Эффективная дальнейшая обработка вывода
Я сразу же форматирую вывод, чтобы быстрее получить результаты использовать. С lsof -t -i:80 | xargs -r kill -TERM я, например, завершаю все процессы, использующие порт 80. Для отчетов я использую lsof -nP -i | grep LISTEN вернуться и целенаправленно отфильтровать состояния. Также awk помогает: lsof -nP | awk '{print $1,$2,$3,$9}' ограничивает отображение до имени, PID, пользователя и пути. Я документирую работающие однострочные команды, чтобы позже не пришлось Поиск по подходящим образцам. Такие маленькие помощники, как watch 'lsof -nP -i:443' отражают изменения в режиме реального времени и помогают быстрее принять решение.
Автоматизация и вывод данных, пригодных для синтаксического анализа
Для повторяющихся проверок я использую машиночитаемый формат lsof с -F. Я выбираю только те поля, которые мне нужны (например, «Процесс», «Команда», «Пользователь», «FD», «Имя»), и продолжаю их стабильно анализировать. Примеры:
lsof -Fn -Fp -Fc -Fu -t -i:443– минималистичные поля для скриптов, которым требуются только PID или имена.lsof -Fpcun -a -iTCP -sTCP:LISTEN– Сбор данных о слушателях и их целенаправленная обработка.
С -r 2 я создаю „живой“ снимок каждые две секунды и сравниваю снимки. В конвейерах я объединяю изменения (сортировать, uniq, diff), чтобы обнаруживать появление или исчезновение дескрипторов. Я специально предусматриваю таймауты, чтобы запросы не зависали при высокой нагрузке, а задания мониторинга корректно завершались.
Передовой опыт и вопросы безопасности
Я запускаю анализы с минимальными правами и повышаю их только в том случае, если корневой, если у меня нет необходимых прав доступа. Так я снижаю риски и обеспечиваю четкость журналов. Я проверяю регулярные сканирования с помощью lsof -i в отличие от тех сервисов, которые я обычно использую для обнаружения необычных слушателей или подключений. Затем я целенаправленно проверяю подозрительные PID, анализируя файлы, библиотеки и Розетки. Во время окон технического обслуживания я слежу за тем, чтобы удаленные, но все еще открытые файлы не занимали место. Те, кто серьезно относится к безопасности, включают lsof в контрольные списки и реагируют на аномалии с помощью заранее определенных Шаги.
Распространенные проблемы и эффективные решения
- Не все записи отображаются: Без прав root мне часто не хватает процессов других пользователей или дескрипторов, связанных с ядром. Я целенаправленно использую
судо. - Медленная выдача: Я отключаю разрешения с помощью
-nP, отказаться от рекурсии и ограничить с помощью-aсильно. - +D слишком дорого: Рекурсивный обход каталогов может занимать очень много времени. Я начну с
+dили конкретные пути и расширяю их только по мере необходимости. - Порт занят, процесс неясен: Я сочетаю
lsof -i: -nPс-tдля PID и перейдите кlsof -pглубже. - „Не хватает “свободного» места:
lsof +L1находит открытые, но удаленные файлы. После этого целенаправленно перезапустите или завершите процесс. - Контейнеры/пространства имён: Я проверяю запрос в соответствующем пространстве имён, иначе могу увидеть неверные прослушиватели или пропустить открытые файлы.
Понимание эффективности и ограничений
На очень крупных системах полная запись с помощью lsof занимает много времени и приводит к заметным Загрузить. Поэтому я включаю фильтры на ранних этапах и переключаюсь с помощью -nP все разрешения. При большом количестве ручек я параллельно проверяю Ограничения на количество файловых дескрипторов и, при необходимости, обновите их. В скриптах следует предусматривать таймауты и использовать -t передаю только PID, чтобы сократить объем данных. Я фиксирую исключения и встраиваю повторяющиеся проверки в автоматизированные процессы. Таким образом, диагностика остается надежной и понятной даже при высокой нагрузке управляемый.
Практический рабочий процесс: от симптома к причине
Начну с вопроса: речь идет о файле, процессе или Порт? После этого я выбираю подходящее вступление, например lsof /путь/к/файлу, lsof -p или lsof -i:. Я проверяю USER, FD, TYPE и NAME и фиксирую, что выглядит ожидаемо, а что удивляет. Затем принимаю меры: перезапускаю процесс, корректирую конфигурацию, снимаю ограничение или открываю порт. В случае неопределённости я фиксирую текущее состояние, сохраняю журналы и повторяю измерение после внесения изменений. Такой подход помогает мне сохранять концентрацию и обеспечивает чёткий Цепочка доказательств.
Список: быстрые рецепты на каждый день
- Кто блокирует файл?
lsof /путь/к/файлу– Считать PID, целенаправленно перезапустить или завершить процесс. - Какая служба занимает этот порт?
lsof -nP -i:– Устранить конфликт, изменить порт или адрес привязки. - Куда исчезает место для парковки?
lsof +L1– найти открытые и удаленные файлы, перезапустить соответствующие PID. - Процесс завис из-за операций ввода-вывода?
lsof -p– обращайте внимание на каналы, сокеты или файлы; при необходимости дополняйте с помощью strace. - Какие листеры действительно работают?
lsof -nP -iTCP -sTCP:LISTEN– сверить со списком ожиданий. - Какие ресурсы использует служебная учетная запись?
lsof -u– Выявление отклонений по каждому аккаунту.
Краткое руководство для повседневной жизни
lsof показывает, кто блокирует какой файл, какой каталог или какой порт. С помощью -c, -p, -u, +d/+D и -i Я быстро сужаю круг поиска. Я разблокирую заблокированные файлы, выявляю конфликты портов и обнаруживаю необычные Соединения. В сочетании с -nP Я работаю оперативно и слежу за тем, чтобы объем вывода оставался понятным. Для более глубокого анализа я использую дополнительные инструменты, документирую работающие однострочные команды и встраиваю повторяющиеся проверки в автоматизированные процессы. Таким образом, диагностика с помощью lsof остается прямой, надежной и поддающейся оценке эффективно.


