Александр Бутов
11.12.2019
102154

Lsof обзор утилиты , примеры использования

Часто бывает что при работе в системах linux вы работаете с дисками или сетевыми хранилищами вы хотите что-то размонтировать и видите подобную картину: Это означает что какой-то процесс в данный момент использует какие-то файлы на этом разделе и бывает трудно понять какой из процессов именно это делает, вот именно в таких случаях и поможет утилита […]

Часто бывает что при работе в системах linux вы работаете с дисками или сетевыми хранилищами вы хотите что-то размонтировать и видите подобную картину:

umount /mnt/sdb1/
 umount: /mnt/sdb1: device is busy

Это означает что какой-то процесс в данный момент использует какие-то файлы на этом разделе и бывает трудно понять какой из процессов именно это делает, вот именно в таких случаях и поможет утилита lsof.
Расшифровывается название этой утилиты так: LiSt of Open Files

Создателем утилиты является Victor A. Abell.

Утилита служит для вывода информации о том, какие файлы используются теми или иными процессами, и с помощью неё вы быстро сможете найти интересующий вас процесс и убить его ставится утилита довольно стандартно и в CentOS она находится в стандартном репозитории.

в данной статье рассматривается процесс установки и использования lsof под операционной системой CentOS Linux release 7.7.1908
yum install lsof
процесс установки
процесс установки
процесс установки
процесс установки

На этом процесс установки завершен.
Утилита имеет кучу параметров но можно запустить её и без них, правда будет выведено довольно много информации, в моём случае на не самой загруженной системе вывод был настолько большим что оказался с таким количеством строк что putty не позволил мне проскролить к началу вывода

Задать максимальное количество строк отображаемых в putty можно в месте показанном на скриншоте ниже
настройка putty
настройка putty

Вот так выглядит обычный вывод lsof

обычный вывод
обычный вывод

Ради любопытства давайте посчитаем количество строк в выводе

количество строк в выводе
количество строк в выводе

Как видим их не много не мало почти 40 тысяч, естественно не очень удобно работать с такими объёмами информации

Стоит учесть что если у вас не рутовый доступ то в выводе будут только те файлы которые использует ваш юзер

Для начала выведем все файлы и процессы владельцем которых является конкретный пользователь, в данном примере это пользователь asterisk, от которого на большинстве АТС при грамотной настройке и работает сам Астериск

отображение для конкретного пользователя
отображение для конкретного пользователя

Тут уже видна шапка, и мы видим следующие значения в каждой строке (если один процесс открывает много файлов то для каждого будет своя строка в выводе)
Имя процесса, его ID, пользователя которому принадлежит этот процесс, fd это либо номер файлового дискриптора.

Файловый дискриптор это некий набор данных (часто это переменная/объект особого типа

описывающий какую-либо сущность, но при этом им не являющийся. Дескриптор файла

Дескриптор файла — часто это переменная того типа данных, который возвращает в вашем ЯП, например, функция открытия файла, в этом случае дескриптор обычно, помимо прочего, содержит сведения об адресе расположения файла (например, пути к нему в рамках файловой системы).) либо может быть одно из буквенных обозначений

  • cwd — текущий рабочий каталог
  • Ltx — текст разделяемой библиотеки
  • mxx — hex memory-mapped type
  • mem — файл, загруженный в память, чаще всего — библиотека
  • mmap — memory-mapped device
  • pd — родительский каталог
  • rtd — корневой каталог
  • txt — текст программы (код и данные);

Далее идёт тип файла у нас это DIR и REG , REG это обычный файл а DIR это каталог , но могут быть и другие значения :

  • BLK -файл блочного устройства
файл блочного устройства чаще всего обозначает какое-то физическое устройство целиком или же его раздел, например жёсткий диск или CD-ROM
  • CHR — файл символьного устройства
  • LINK –Симлинк
  • INET — Internet-сокет
  • UNIX – доменный сокет UNIX

Это самые распространённые типы файлов но их огромное количество так же можно увидеть в мануале

типы файлов
типы файлов

Далее указывается устройство на котором и расположен этот файл , его размер и в конце его имя которое совпадает с его расположением
теперь рассмотрим несколько примеров
ключ –U означает показывать только сокеты UNIX
Теперь выполним следующую команду
lsof –U –u asterisk
так вывод будет показывать все файлы открытые от пользователя asterisk и все открытые сокеты unix

фильтрованный вывод
фильтрованный вывод

то есть по умолчанию lsof комбинирует ключи как ИЛИ то есть в выводе выше показаны файлы открытые от пользователя  астериск ИЛИ сокеты unix но это явно неудобно так как скорее всего мы хотим отфильтровать вывод по нескольким параметрам а не вывести всё что подходит хотя бы под один из критериев.
Для этого есть опция –а которая позволяет комбинировать опции как И .

То есть если написать команду lsof –a –U –u asterisk то в выводе будут только сокеты UNIX принадлежащие процессам владельцем которых будет пользователь asterisk

опция –а
опция –а

Так же необязательно ставить знак – перед каждой опцией а вполне можно писать их вместе без пробелов например так:

комбинирование опций
комбинирование опций

Так же есть довольно интересная опция –F которая позволяет показывать вывод не в виде таблицы, а в виде отдельных строк, может быть полезно для передачи данных на обработку другими утилитами

опция –F
опция –F

Так же с помощью этой опции можно задавать какие именно строки будут выведены
только те строки которые вас интересуют например командой

lsof -aUu asterisk -F pcn 

мы выведем только идентификатор процесса имя команды и имя файла

ограниченный вывод
ограниченный вывод

Так же опция –R может оказаться довольно полезной так как выводит дополнительный столбец в котором отображается информация об идентификаторе родительского процесса из скриншота ниже можно посмотреть разницу наглядно

опция –R
опция –R

Одна из самых полезных опций является +d которая показывает кто и чем занимает файл или устройство. Для примера в другой сессии ssh открою для просмотра файл /usr/src/testlsof.txt

открытие файла командером
открытие файла командером

И теперь можно посмотреть кто работает с этой папкой

опция +d
опция +d

Здесь видим что пользователь root используя midnight commander(mc) работает с данным каталогом и с конкретным файлом /usr/src/testlsof.txt

Так же можно посмотреть кто использует конкретный файл , для этого никаких опций не требуется а только имя файла интересующего вас

кто использует файл
кто использует файл

Можно посмотреть какие файлы использует конкретный пользователь например:

фильтр по пользователям
фильтр по пользователям

Как видим показаны только файлы которые используют процессы владельцем которых является root

Может оказаться полезным посмотреть какие файлы использует конкретный процесс для этого нужно после опции –p указать его идентификатор

фильтр по процессу
фильтр по процессу

Можно так же посмотреть какая программа слушает какой порт и, например, закрыть не нужные чтобы у злоумышленника было меньше возможностей для атаки на ваш сервер, для этого существует опция –i

опция –i
опция –i

Последние 2 строчки отображают непосредственно мои 2 подключения по ssh и то что они активны нам показывает запись (ESTABLISHED)  а запись (LISTEN) означает что программа слушает этот порт и он открыт для взаимодействия
тут можно так же отфильтровать например по моему ip

фильтр по ip
фильтр по ip

Задаётся фильтр в следующем виде : -i протокол@домен/ip-адресс:порт
Так же очень полезной является опция +L1 которая показывает файлы которые были удалены но все ещё используются какой-то программой , чаще всего логированием, и вы сталкиваетесь с ситуацией что место у вас постоянно заканчивается а найти файлы которые его заменяют вы не можете , тогда просто нужно будет убить процесс который использует этот файл и место сразу же освободится
вот пример файла на 4 гигабайта

опция +L1
опция +L1

На этом знакомство с утилитой можно завершить, но у неё есть ещё целая куча различных опций и применений но они уже довольно специфичны.

Кейсы внедрения
Asterisk от VoxLink
Узнайте, какие крупные компании уже используют Asterisk в работе.
Скачать
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.