Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>shell networks networking network utils port testat}} ====== lsof ====== Утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами ===== Как использовать lsof? ===== В этой статье я постараюсь преподнести функциональность lsof настолько, насколько позволяет мой опыт. Начнем с простого (что вероятно Вы уже знаете) и перейдем к сложному. Список всех открытых файлов. # lsof Запустив lsof без каких-либо аргументов мы получим список всех открытых файлов всеми возможными процессами. Посмотрим, кто использует файл. # lsof /path/to/file С файлом в качестве аргумента, lsof показывает все процессы, которые используют данный файл каким-либо образом. Вы можете указать несколько файлов, и получите все процессы, которые используют данные файлы: # lsof /path/to/file1 /path/to/file2 Рекурсивный поиск всех открытых файлов, начиная с указанной директории, выглядит вот так. # lsof +D /usr/lib С аргументом +D lsof ищет все файлы в указанной директории и всех поддиректориях. Заметьте, что это будет работать медленнее чем с обычным grep: # lsof | grep ‘/usr/lib’ Это медленнее потому что +D сперва ищет все файлы и только затем делает вывод. Список всех файлов открытых пользователем. # lsof -u pkrumins Опция -u (думаю это user) ограничивает вывод файлов открытых пользователем pkrumins. Вы можете использовать список разделенный запятой, если хотите узнать информацию сразу по нескольким пользователям: # lsof -u rms,root Этот пример покажет список файлов открытых пользователями rms и root. По другому это можно сделать указав параметр -u дважды: # lsof -u rms -u root Найти все файлы открытые программой. # lsof -c apache Параметр -c выбирает список файлов принадлежащих процессу, чье имя начинается с apache. Итак, вместо запуска: # lsof | grep foo Вы можете использовать более короткую версию: # lsof -c foo Как правило, Вы можете определить только начальные буквы имени процесса, который вы хотите обследовать: # lsof -c apa Эта команда выведет список всех файлов, открытых процессом начинающимся на apa. Вы также можете указать несколько параметров -c для вывода файлов, открытых различными процессами: # lsof -c apache -c python Эта команда выведет список всех файлов, открытых процессами apache и python. Список файлов открытых пользователем или процессом. # lsof -u pkrumins -c apache Опции Lsof могут комбинироваться. Действие по умолчанию между опциями определяется как ИЛИ. Это означает, что комбинация параметров -u pkrumins и -c apache выводит список файлов открытых пользователем pkrumins или процессом apache. Список всех файлов открытых пользователем И процессом. # lsof -a -u pkrumins -c bash Параметр -a. Комбинирует опции с условием И. Выводится список файлов открытых bash, который запущен пользователем pkrumins. Список всех файлов открытых всеми пользователями КРОМЕ root. # lsof -u ^root Заметьте, что символ ^ ставится до имени пользователя root. Этот трюк инвертирует совпадение для lsof на обратное, распечатывая все файлы пользователей отличных от root. Список всех файлов открытых процессом с определенным PID. # lsof -p 1 Параметр -p (думаю это PID) фильтрует вывод отображая список файлов открытых программой с указанным id. Помните, что Вы можете выбрать разичные PID’ы используя либо список разделяемый запятой, либо используя несколько аргументов -p: # lsof -p 450,980,333 Выбирает процессы с PID 450, 980 и 333. Список всех открытых фалов за ИСКЛЮЧЕНИЕМ процесса с указанным PID. # lsof -p ^1 Здесь снова используется инвертный оператор ^. Он инвертирует список и не включает в него процессы с PID 1. Список всех сетевых соединений. # lsof -i Lsof с опцией -i выводит список всех Интернет сокетов (TCP и UDP). Список всех TCP соединений. # lsof -i tcp Опция -i может иметь несколько различных параметров, один из них tcp. Опция tcp заставляет lsof выдавать список связанный только с TCP сокетами. Список всех UDP соединений. # lsof -i udp Опция udp говорит lsof выводить список связанный только с UDP сокетами. Кто использует этот порт. # lsof -i :25 Опция :25 с -i заставляет lsof искать процессы использующие TCP или UDP с портом 25. Вы также можете указать именованное название порта (смотрите /etc/services) вместо его номера: # lsof -i :smtp Найти, кто исопльзует данный UDP порт.<note important>important</note> # lsof -i udp:53 Аналогично, найти, кто использует данный TCP порт:<note important>important</note> # lsof -i tcp:80 Найти все сетевые действия пользователя. # lsof -a -u hacker -i Здесь опция -a комбинируется с -u и -i формируя список сетевых файлов используемых пользователем hacker. Список всех файлов NFS (Network File System). # lsof -N Эту опцию легко запомнить, потому что -N это NFS. Список всех файловых сокетов домена Unix. # lsof -U Эту опцию также легко запомнить, потому что -U это Unix. Список всех файлов для процессов принадлежащих определенной группе id. # lsof -g 1234 Групповые процессы используются для логической группировки процессов. Этот пример покажет список всех файлов открытых процессами принадлежащими к группе с PGID 1234. Список всех файлов ассоциированных с указанным файловым дескриптором. # lsof -d 2 Список всех файлов открытых файловым дескриптором с номером 2. Вы можете задать интервал файловых дескрипторов: # lsof -d 0-2 Список всех файлов с файловыми дескрипторами 0, 1 и 2. Несколько специальных значений, таких как mem, которые работают с файлами отображаемыми в память: # lsof -d mem Или txt программ загруженных и выполняемых в памяти: # lsof -d txt Выводит PID’ы процессов использующих какие-то ресурсы. # lsof -t -i Опция -t выводит только PID’ы процессов. Используя совместно с -i это позволяет выводить PID’ы всех процессов с сетевыми соединениями. Так можно легко убить все процессы использующие сеть: # kill -9 `lsof -t -i` Повторяющийся листинг файлов. # lsof -r 1 Аргумент -r заставляет lsof повторять список файлов, до тех пор пока он не будет остановлен. Аргумент 1 говорит, что необходимо повторять листинг через каждую секунду. Эту опцию лучше всего комбинировать с поисковым запросом, производящим мониторинг сетевой пользовательской активности: # lsof -r 1 -u john -i -a ===== Статьи ===== * http://www.linuxcenter.ru/lib/articles/system/lsof.phtmlСохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal