ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Нужно знать: утилита lsof в Linux
List Of Opened Files
В этой статье мы объясним, как узнать, кто использует тот или иной файл в Linux. Это поможет вам узнать системного пользователя или процесс, который использует открытый файл.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Как узнать, кто использует файл в Linux?
Мы можем использовать команду lsof (которая является аббревиатурой от List Of Opened Files), чтобы узнать, использует ли кто-то файл, и если да, то кто. Он читает память ядра в поиске открытых файлов и перечисляет все открытые файлы. В этом случае открытый файл может быть обычным файлом, каталогом, специальным файлом блока, специальным файлом символов, потоком, сетевым файлом и многими другими, поскольку в Linux все является файлом.
Lsof используется в файловой системе, чтобы определить, кто использует какие-либо файлы в этой файловой системе. Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах для процессов, использующих файл, как показано в следующих выходных данных.
Список всех открытых файлов в Linux
Чтобы вывести список файлов, открытых для конкретного пользователя, выполните следующую команду: замените merionet вашим именем пользователя.
Список файлов, открытых пользователем:
Процессы, прослушивающие порт:
Примечание: поскольку lsof читает память ядра при поиске открытых файлов, быстрые изменения в памяти ядра могут привести к непредсказуемым результатам. Это один из основных недостатков использования команды lsof.
Для получения дополнительной информации, смотрите справку lsof:
На этом все! В этой статье мы объяснили, как узнать, кто использует тот или иной файл в Linux.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Удивительно полезный инструмент: lsof
Я привык искать проблемы в коде или в системе, пользуясь логами или показателями мониторинга, которые выводятся на симпатичных панелях управления с простым и понятным интерфейсом. Однако, если по какой-то причине данные на панель управления не поступают, или логи какой-нибудь службы недоступны, отладка усложняется. Теперь подобных проблем немного, встречаются они редко, но они, всё же, случаются. Поэтому и в наше время весьма ценно знание инструментов, которые помогают понять, что не так с неким процессом на каком-нибудь компьютере.
Когда я отлаживаю нечто, для чего нет логов или показателей мониторинга, я подключаюсь к удалённому компьютеру по ssh. Конечно, это подход ограниченный, он не так уж и прост, не соответствует модным веяниям DevOps, или всем тем современным штучкам, которых можно начитаться в интернете, но он на удивление хорошо подходит мне для того, чтобы быстро проанализировать ситуацию.
Это, на самом деле, похоже на использование команды print при отладке программ. Тут мне сразу хотелось бы уточнить, что я не SRE и не инженер по эксплуатации в сфере IT. Основная сфера моей деятельности — разработка.
Если бы то, что вы сейчас читаете, было бы выступлением Раймонда Геттингера, ведущего разработчика CPython, тут настал бы момент, когда аудитория ждёт фразы: «должен быть лучший способ».
Утилита lsof (её название звучит как el-soff, хотя некоторым больше нравится нечто вроде liss-off или даже el-es-o-eff) — это невероятно полезная команда, которая выводит список всех открытых файлов (LiSts all Open Files).
Опции lsof
Ветеран SRE, который занимался этим делом за десятилетия до того, как появился термин «SRE», однажды сказал мне: «Я перестал изучать опции lsof как только узнал все те, которые мне нужны. Изучи самое важное, и это будет всем, что тебе когда-либо понадобится».
Утилита lsof имеет обширный набор опций.
Если вы хотите изучит их все — man вам в помощь. Здесь же мне хотелось бы рассказать о тех, которыми обычно пользуюсь я.
Вот ещё интересный пример. Например, имеется некоторое количество процессов Python 2.7 и Python 3.6, при этом надо выяснить, какие файлы открыты процессами, которые не являются процессами Python 2.7. Сделать это можно так:
▍Опция +d
Опция +d позволяет выяснить, какие папки и файлы открыты в некоей директории (но не в её поддиректориях).
Список исключается из вывода, если все записи в наборе начинаются со знака «^». Список будет включён в вывод, если ни одна запись не начинается с «^». Смешивание записей разных видов не разрешается.
Вывод по нескольким номерам дескрипторов файлов объединяется в соответствии с правилами логического ИЛИ, в один набор, прежде чем к ним будет применена операция логического И.
Когда в наборе встречаются и включаемые и исключаемые члены, lsof сообщает об ошибке и завершает работу с ненулевым кодом возврата.
Например, вот как в Ubuntu выглядит вывод информации обо всех файлах, открытых процессом, скажем, с PID 1.
Вот что выводится на моём MacBook Air.
С помощью lsof можно, например, посмотреть на TCP-соединения, открытые клиентом Slack или Dropbox. Ради интереса попробуйте посмотреть, сколько соединений открывают вкладки Chrome, каждая из которых является отдельным процессом. Посмотрим на соединения, открытые Slack:
Вывод сведений о соединениях, которые открыл Slack
А вот что с помощью lsof можно узнать о TCP-сокетах, открытых клиентом Dropbox:
Вывод сведений о соединениях, которые открыл Dropbox
Вывод сведений об UDP-соединениях
Вывод сведений об IPv6-соединениях
Комбинирование опций
Конечно, есть несколько исключений из этого правила, тут, как обычно, рекомендовано взглянуть на документацию, но если в двух словах, то работает это так:
История большой победы
Пожалуй, я тут немного преувеличиваю, «победа» была не такой уж и большой, но когда случилось то, о чём пойдёт речь, lsof оказался очень кстати.
Пару недель назад мне нужно было поднять один экземпляр нового сервиса в тестовом окружении. Тестовый сервис, о котором идёт речь, не был подключён к рабочей инфраструктуре мониторинга. Я попытался выяснить, почему процесс, который был только что запущен, не зарегистрировал себя в Consul, как результат, его не могли обнаружить другие сервисы. «Так, не знаю, в чём дело, но взгляну-ка я на логи», — подумал я. Если что-то работает не так, как ожидается, я смотрю логи сервиса, работу которого пытаюсь наладить, и в большинстве случаев логи сразу указывают на корень проблемы.
Просмотр другого файла тут же позволил выяснить, почему процесс давал сбой (при этом circus перезапускал его после сбоя, что приводило к бесконечному циклу сбоев-перезапусков).
Итоги
Уважаемые читатели! Какими средствами командной строки Linux, которые не особенно широко известны, вы пользуетесь чаще всего?
7 примеров команды lsof в Linux
В этой статье вы узнаете, как вывести список открытых файлов пользователем или процессом с помощью команды lsof в Linux.
М ы думаем, что в какой-то момент вы задавались вопросом, есть ли способ показать открытые файлы процесса или пользователя. Хорошо, что ответ на этот вопрос это команда lsof.
Вы, наверное, уже знаете, что команда ls – это сокращение от «list». lsof обозначает «Список открытых файлов». И это именно то, что он делает, перечисляет открытые файлы по процессам, пользователям и идентификаторам процессов.
Позвольте нам показать вам наиболее распространенное использование команды lsof.
Примеры команды l sof
Если вы используете команду lsof без каких-либо параметров и аргументов, она выведет список всех открытых файлов всеми процессами в системе.
Вывод должен быть таким:
Выводы в основном говорят сами за себя, но вы все еще можете задаться вопросом о столбцах FD и TYPE.
FD означает файловый дескриптор. Некоторые из общих значений для FD:
TYPE это не просто. Он определяет тип файла. Вот некоторые примеры:
Доверьтесь нам. Вы не захотите запускать команду lsof без аргументов.
Почему мы это говорим? Потому что он начнет заполнять ваш экран тысячами результатов.
Если мы запускаем команду lsof на сервере Ubuntu и подсчитываем количество строк с помощью команды wc, вот результат.
Да! Вот так. В системе открыто более одиннадцати тысяч файлов, открытых различными процессами.
Не беспокойтесь, команда lsof очень полезна при отладке, потому что вы можете видеть, какие процессы открывают, какие файлы и какой файл открывается каким процессом.
Если вы не вошли в систему как root, вывод команды lsof будет очень ограничен. Рекомендуется использовать sudo, если вы вошли в систему как пользователь без полномочий root.
1. Перечислите все процессы, которые открыли файл
Это просто Вам просто нужно указать путь к файлу.
2. Список всех файлов, открытых пользователем
Это удобно в многопользовательской среде. Вы можете перечислить все файлы, открытые определенным пользователем, следующим образом:
Вы также можете указать более одного пользователя, как это:
3. Список всех открытых файлов в каталоге
Если вам интересно, какие из файлов были открыты в определенном каталоге, вы можете использовать команду lsof с опцией + D.
Поиск рекурсивный. Таким образом, он перечислит все открытые файлы в указанном каталоге и все его подкаталоги.
4. Перечислите все открытые файлы процессом
Вы также можете указать несколько идентификаторов процессов.
5. Список всех файлов, открытых командой
Это особенно полезно при отладке. Предположим, вы хотите увидеть, какие файлы используются демоном http, вам просто нужно указать имя команды (httpd в нашем примере).
6. Найти открытый пользователем и командой или процессом
7. Перечислите сетевые соединения и порты с помощью команды lsof
Вы также можете использовать команду lsof для поиска открытых портов или для поиска того, какой процесс использует порт.
Вывод может выглядеть так:
Вы также можете указать тип сетевого подключения. Например, чтобы вывести список всех открытых портов TCP, вы можете использовать:
Чтобы узнать, какой процесс использует определенный порт, вы можете указать номер порта:
Бонусный совет: использование оператора отрицания с lsof
Вы можете использовать оператор отрицания, чтобы исключить пользователя или процесс при использовании команды lsof.
Например, вы хотите перечислить все файлы, открытые пользователем, отличным от root, используйте его следующим образом:
Команда lsof становится еще более полезной, когда вы используете ее с командой grep.
Мы надеемся, что вы узнали что-то новое с этой статьей. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Использование команды lsof в Linux с примерами
lsof — это мощная утилита, доступная для систем на базе Linux и Unix, которая буквально означает «список (из) открытых файлов».
Его основная функция — получать подробную информацию о различных типах файлов, открытых разными запущенными процессами. Эти файлы могут быть обычными файлами, каталогами, файлами блоков, сетевыми сокетами, именованными каналами и так далее.
Установка lsof
lsof не доступен по умолчанию в большинстве дистрибутивов Linux, но может быть легко установлен. Используйте следующую команду для установки lsof:
CentOS / RHEL / Fedora:
для CentOS / RHEL 8, вы можете использовать DNF команду
Получение помощи
Чтобы проверить подробную информацию об установленной версии, используйте:
Поля вывода
Структура вывода lsof по умолчанию выглядит так:
Большинство из этих полей говорят за себя, исключением можно назвать FD и TYPE поля, которые несколько уникальны для LSOF и будут кратко рассмотрены ниже.
FD относится к номеру дескриптора файла файла, TYPE относится к типу узла, связанного с файлом. Теперь мы рассмотрим поддерживаемые значения для обоих этих полей.
FD поле может содержать следующие значения:
FD После поля следует один или несколько символов, описывающих режим, в котором открыт файл:
За символом режима для FD последующего может следовать LOCK символ, описание которого приведено ниже:
TYPE поле может содержать GDIR, GREG, VDIR, VREG, IPV4, IPV6 и т. д. Чтобы получить полный список поддерживаемых TYPE в lsof, обратитесь к его man странице.
Обычное использование
Ниже приведены некоторые примеры популярного использования команды lsof. Команда работает в разных вариантах Linux, и все аргументы командной строки, перечисленные ниже в примерах, должны работать на всех платформах, учитывая одну и ту же lsof версию.
Список всех открытых файлов
Запуск lsof без каких-либо параметров отобразит все файлы, открытые в данный момент активными процессами.
Вывод:
Список по имени файла
Чтобы перечислить все процессы, открывшие определенный файл, мы можем указать file-name в качестве аргумента:
Вывод:
Список открытых файлов по имени пользователя
Вывод:
Вывод:
Вывод:
С помощью lsof мы можем комбинировать несколько аргументов, используя OR логику, как показано ниже:
Вывод:
Вывод:
Список открытых файлов по процессам
Вывод:
Список открытых файлов по PID
Вывод:
Список открытых файлов, содержащих каталог
Чтобы перечислить процессы, открывшие файлы в определенном каталоге, используйте D параметр, за которым следует путь к каталогу.
Вывод:
Вывод:
Режим повторения
Вывод:
Список открытых файлов по сетевому протоколу
Вывод:
Вывод:
Или, чтобы перечислить все сетевые соединения, используемые определенным процессом, мы можем дать следующее process-name :
Вывод:
Вывод:
Вывод:
Список открытых файлов по портам
Вывод:
Список открытых файлов по IPv4/IPv6
Существует возможность фильтровать список сетевых подключений, ограничивая его IPv4 или IPv6. Используйте приведенный ниже синтаксис команды, чтобы получить только список IPv4:
Вывод:
ИЛИ, чтобы получить информацию только о IPv6, используйте:
Вывод:
Список открытых файлов в NFS
lsof также может вывести список всех файлов NFS, открытых в данный момент пользователем.
Список заблокированных удаленных файлов
Вывод:
Заключение
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
linux-notes.org
Примеры использования команды Lsof
lsof (от англ. LiSt of Open Files) — утилита, которая предназначена для вывода информации о том, какие файлы используются теми или иными процессами. Эта программа имеется в очень многих UNIX ‐ подобных ОС включая GNU/Linux с ядром версии 2.1.72 и выше, а также в HP-UX, AIX, NextStep, Apple Darwin для Power Macintosh, SCO UnixWare, FreeBSD, NetBSD, OpenBSD и так далее.
В этом уроке показать практические примеры использования Lsof команды.
Установка Lsof в RHEL, CentOS и Fedora Linux:
Установка Lsof в Debian, Ubuntu и Mint Linux:
Установка Lsof в freeBSD:
Опции.
Базовые примеры lsof команды
Набрав команду Lsof он выведет список всех открытых файлов, принадлежащих всех активных процессах в системе:
По умолчанию отображается один файл в каждой строке. Большинство колонн говорят сами за себя. Мы объясним подробности о нескольких загадочных столбцов (FD и TYPE(тип)).
FD — Представляет дескриптор файла. Некоторые из значений FD являются.
cwd — текущий рабочий каталог.
TXT — текстовый файл.
mem — Память отображаемого файла.
mmap — Память отображаемого устройства.
NUMBER — представить фактический дескриптор файла. Символ после числа, представляет собой режим в котором открывается файл.
r- для чтения, w- для записи, u- для чтения и записи.
TYPE (ТИП) — Указывает тип файла. Некоторые из значений типов,
REG — обычный файл
DIR — Справочник
FIFO — First In First Out
CHR — Поведение специального файла
Или посмотрите полный список FD& TYPE в мануале Lsof.
Список процессов, которые открыли конкретный файл
Вы можете перечислить только процессы, которые открыли конкретный файл, предоставляя имя файла в качестве аргументов. (например введем в терминале команду: # lsof /var/log/apache2/ access.log ), получим в ответ:
Показать Все процессы открытых файлов в каталоге
флаги +D /var/log будет информировать Lsof найти все связанные процессы, работающие с файлами под /var/log:
Показать все файлы, открытые процессы, начинающиеся с буквы
Вывести все файлы, открытые с помощью конкретной команды:
Дисплей, который обращается к устройству
Для отображения кто получает доступ устройства, каталога или двоичный файлов. В данном случае я с изложением кто обращается к области памяти.
Список файлов, открытых определенным пользователем
Для того чтобы найти список файлов, открытых определенных пользователей, использовать опцию ‘-U’.
Убить все данный пользователя
Перечислите все сетевые соединения
Вы можете перечислить все сетевые подключения, открытые с помощью ‘-I’ вариант.
Показать соединения к определенному хосту с помощью «host». Это очень полезно, когда вы ищете, есть ли у вас открытые соединения с данного хоста в сети или по интернету.
Показать соединения к определенному хосту с помощью @host:port. Вы также можете комбинировать отображение хост и порт:
Найти прослушивающие порты, которые ждут соединения:
Вы также можете отсеять не нужно и вывести например, только «LISTEN»:
Найти установленные соединения. Вы можете также показать любые соединения, которые уже установлены на сервере:
Вы можете отгрепать мусор и найти что-то для себя, например:
Перечислите все открытые файлы по конкретному процессу
Вы можете перечислить все файлы, открытые конкретного процесса с использованием опции ‘-P’. Это будет полезно иногда, чтобы получить больше информации о конкретном процессе.
Показать приложения, которые используют подключение к интернету в данный момент:
Lsof + L1 показывает все открытые файлы, имеющие ссылки ( менее чем 1):
Показать открытых соединений с диапазоном портов:
Для получения дополнительной использования выполните команду:
Показать приложения, которые используют подключение к интернету в данный момент.
На этом я завершу данную тему «Примеры использования команды Lsof «.
One thought on “ Примеры использования команды Lsof ”
Спасибо! Суперпримеры, то что надо.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.








