- 😡 Как узнать, кто использует файл в Linux
- 7 примеров команды lsof в Linux
- Примеры команды l sof
- 1. Перечислите все процессы, которые открыли файл
- 2. Список всех файлов, открытых пользователем
- 3. Список всех открытых файлов в каталоге
- 4. Перечислите все открытые файлы процессом
- 5. Список всех файлов, открытых командой
- 6. Найти открытый пользователем и командой или процессом
- 7. Перечислите сетевые соединения и порты с помощью команды lsof
- Бонусный совет: использование оператора отрицания с lsof
- Как узнать PID процесса в Linux
- Как узнать pid процесса Linux
- 2. pgrep
- 3. pidof
- 4. pstree
- Как узнать PID скрипта
- Каким процессом занят файл Linux
- Кто использовал файл в Linux
- Какой процесс использует порт в Linux
- Выводы
- Как пользоваться lsof для просмотра открытых файлов (в Linux всё является файлами)
- В Linux все является файлом
- Команда lsof
- Значение столбцов lsof
- Колонка FD
- Колонка TYPE
- Как видеть процессы, которые открыли файл
- Как посмотреть все файлы, открытые в определённом каталоге
- Как показать только обычные файлы
- Как увидеть файлы, которые открыты указанной программой или командой
- Как посмотреть файлы, открытые определённым пользователем
- Как исключить файлы, открытые определённым пользователем
- Как найти файлы, которые открыты указанным процессом
- Как узнать идентификаторы процессов, которые открыли файл
- Как вывести размер открытых файлов
- Как увидеть какие процессы сколько занимают в области Buff/Cache
- Как комбинировать условия поиска lsof (логические И и ИЛИ)
- Автоматическое обновление выводимой информации lsof
- Отображение файлов, связанных с подключениями к Интернету
- Отображение файлов, связанных с подключениями к Интернету, по идентификатору процесса
- Отображение файлов, связанных с Интернет-подключениями и командами
- Отображение файлов, связанных с Интернет-подключениями и портами
- Как показать сокеты только для определённого протокола
- Как узнать, какой процесс или служба прослушивают порт
- Как просмотреть только IPv4 или IPv6 соединения
- Как увидеть сетевые подключения определённого хоста
- Сочетание фильтров сетевых соединений
- Как остановить всю активность определённого пользователя
- Поиск по регулярным выражениям программ, открывших файлы
- Основы команды lsof
😡 Как узнать, кто использует файл в Linux
В этой статье мы объясним, как узнать, кто использует тот или иной файл в Linux.
Это поможет вам узнать системного пользователя или процесс, который использует открытый файл.
Мы можем использовать команду lsof, чтобы узнать, использует ли кто-то файл, и если да, то кто.
Команда читает память ядра в поиске открытых файлов и помогает вам перечислить все открытые файлы.
В этом случае открытым файлом может быть обычный файл, каталог, специальный файл блока, специальный символьный файл, поток, сетевой файл и многие другие – потому что в Linux все является файлом.
Lsof используется в файловой системе для определения того, кто использует какие-либо файлы в этой файловой системе.
Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах для процессов, использующих файл, как показано в следующих выходных данных.
Еще одно важное использование lsof – выяснение процесса прослушивания определенного порта.
Например, определите процесс, прослушивающий порт 80, с помощью следующей команды.
Примечание. Поскольку lsof читает память ядра при поиске открытых файлов, быстрые изменения в памяти ядра могут привести к непредсказуемым результатам. Это один из основных недостатков использования команды lsof.
Для получения дополнительной информации, смотрите man-страницу lsof:
Это все! В этой статье мы объяснили, как узнать, кто использует тот или иной файл в Linux.
Мы показали, как идентифицировать владельца и обрабатывать информацию для процессов, используя открытый файл.
Используйте форму обратной связи ниже, чтобы связаться с нами по любым вопросам или комментариям.
Источник
7 примеров команды lsof в Linux
В этой статье вы узнаете, как вывести список открытых файлов пользователем или процессом с помощью команды lsof в Linux.
М ы думаем, что в какой-то момент вы задавались вопросом, есть ли способ показать открытые файлы процесса или пользователя. Хорошо, что ответ на этот вопрос это команда lsof.
Вы, наверное, уже знаете, что команда ls – это сокращение от «list». lsof обозначает «Список открытых файлов». И это именно то, что он делает, перечисляет открытые файлы по процессам, пользователям и идентификаторам процессов.
Позвольте нам показать вам наиболее распространенное использование команды lsof.
Примеры команды l sof
Если вы используете команду lsof без каких-либо параметров и аргументов, она выведет список всех открытых файлов всеми процессами в системе.
Вывод должен быть таким:
Выводы в основном говорят сами за себя, но вы все еще можете задаться вопросом о столбцах FD и TYPE.
FD означает файловый дескриптор. Некоторые из общих значений для FD:
- cwd – Текущий рабочий каталог
- txt – текстовые файлы
- mem – файл с отображенной памятью
- mmap – Устройство с отображенной памятью
- NUMBER – фактический дескриптор файла. У этого также есть информация о том, в каком разрешении файла это открыто.
TYPE это не просто. Он определяет тип файла. Вот некоторые примеры:
- REG – обычный файл
- DIR – Справочник
- CHR – специальный файл символов
- FIFO – первый на первом
Доверьтесь нам. Вы не захотите запускать команду lsof без аргументов.
Почему мы это говорим? Потому что он начнет заполнять ваш экран тысячами результатов.
Если мы запускаем команду lsof на сервере Ubuntu и подсчитываем количество строк с помощью команды wc, вот результат.
Да! Вот так. В системе открыто более одиннадцати тысяч файлов, открытых различными процессами.
Не беспокойтесь, команда lsof очень полезна при отладке, потому что вы можете видеть, какие процессы открывают, какие файлы и какой файл открывается каким процессом.
Если вы не вошли в систему как root, вывод команды lsof будет очень ограничен. Рекомендуется использовать sudo, если вы вошли в систему как пользователь без полномочий root.
1. Перечислите все процессы, которые открыли файл
Это просто Вам просто нужно указать путь к файлу.
2. Список всех файлов, открытых пользователем
Это удобно в многопользовательской среде. Вы можете перечислить все файлы, открытые определенным пользователем, следующим образом:
Вы также можете указать более одного пользователя, как это:
3. Список всех открытых файлов в каталоге
Если вам интересно, какие из файлов были открыты в определенном каталоге, вы можете использовать команду lsof с опцией + D.
Поиск рекурсивный. Таким образом, он перечислит все открытые файлы в указанном каталоге и все его подкаталоги.
4. Перечислите все открытые файлы процессом
В этом случае вам нужно знать идентификатор процесса (pid). Если вы знаете идентификатор процесса, вы можете использовать опцию -p команды lsof, чтобы найти файлы, открытые им.
Вы также можете указать несколько идентификаторов процессов.
5. Список всех файлов, открытых командой
Это особенно полезно при отладке. Предположим, вы хотите увидеть, какие файлы используются демоном http, вам просто нужно указать имя команды (httpd в нашем примере).
6. Найти открытый пользователем и командой или процессом
Вы можете комбинировать параметры, такие как пользователь и команда, и процесс, используя вариант -, Думайте об этом как об операторе AND. Это дает вам дополнительный фильтр при попытке сузить область поиска.
7. Перечислите сетевые соединения и порты с помощью команды lsof
Вы также можете использовать команду lsof для поиска открытых портов или для поиска того, какой процесс использует порт.
Вы можете подать все виды открытых портов с опцией -i:
Вывод может выглядеть так:
Вы также можете указать тип сетевого подключения. Например, чтобы вывести список всех открытых портов TCP, вы можете использовать:
Чтобы узнать, какой процесс использует определенный порт, вы можете указать номер порта:
Бонусный совет: использование оператора отрицания с lsof
Вы можете использовать оператор отрицания, чтобы исключить пользователя или процесс при использовании команды lsof.
Например, вы хотите перечислить все файлы, открытые пользователем, отличным от root, используйте его следующим образом:
Команда lsof становится еще более полезной, когда вы используете ее с командой grep.
Мы надеемся, что вы узнали что-то новое с этой статьей. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Как узнать PID процесса в Linux
Каждый процесс в операционной системе имеет свой уникальный идентификатор, по которому можно получить информацию об этом процессе, а также отправить ему управляющий сигнал или завершить.
В Linux такой идентификатор называется PID, и узнать его можно несколькими способами. В этой статье мы рассмотрим, как узнать PID процесса в Linux, а также зачем это может вам понадобиться.
Как узнать pid процесса Linux
Самый распространённый способ узнать PID Linux — использовать утилиту ps:
ps aux | grep имя_процесса
Кроме нужного нам процесса, утилита также выведет PID для grep, ведь процесс был запущен во время поиска. Чтобы его убрать, добавляем такой фильтр:
ps aux | grep имя_процесса | grep -v grep
Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:
ps aux | grep apache | grep -v grep
2. pgrep
Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:
По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:
3. pidof
Эта утилита ищет PID конкретного процесса по его имени. Никаких вхождений, имя процесса должно только совпадать с искомым:
С помощью опции -s можно попросить утилиту выводить только один PID:
pidof -s apache2
4. pstree
Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:
pstree -p | grep apache2
Как узнать PID скрипта
Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:
#!/bin/bash
echo «PID этого скрипта: $$»
Каким процессом занят файл Linux
Выше мы рассмотрели, как получить PID процесса Linux по имени, а теперь давайте узнаем PID по файлу, который использует процесс. Например, мы хотим удалить какой-либо файл, а система нам сообщает, что он используется другим процессом.
С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:
В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:
Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:
- c — текущая директория;
- r — корневая директория;
- f — файл открыт для чтения или записи;
- e — файл выполняется как программа;
- m — файл подключен в качестве библиотеки.
Кто использовал файл в Linux
Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:
sudo apt install auditd
Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:
auditctl -w /usr/bin/who -p x -k who_exec
Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:
- x — выполнение;
- w — запись;
- r — чтение;
- a — изменение атрибутов.
Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:
sudo ausearch -i -k who_exec
Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:
ps aux | grep 15595
Становиться понятно, что это bash.
Какой процесс использует порт в Linux
Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:
sudo ss -lptn ‘sport = :80’
Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:
sudo ss -lptn ‘dport = :80’
Выводы
В этой статье мы рассмотрели, как узнать PID процесса в Linux по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.
Источник
Как пользоваться lsof для просмотра открытых файлов (в Linux всё является файлами)
Если в Linux все является файлом, то в этой операционной системе должно быть нечто большее, чем просто файлы на вашем жёстком диске. Из этой обучающей статьи вы узнаете, как использовать lsof для просмотра всех других устройств и процессов, которые обрабатываются как файлы.
В Linux все является файлом
Часто цитируемая фраза о том, что всё в Linux является файлом, является своего рода правдой. Файл представляет собой набор байтов. Программы и устройства (принтер, экран, клавиатура, мышь, терминал, сетевая карта) могут генерировать или принимать потоки байт, и в этом качестве они сами проявляются как файлы. Многие системные компоненты, такие как клавиатуры, сокеты, принтеры и коммуникационные процессы, принимают или генерируют потоки байтов. Поскольку они принимают, генерируют или принимают и генерируют потоки байтов, эти устройства могут обрабатываться — на очень низком уровне — как файлы. Кроме обычных файлов, файлами также являются директории (папки), сетевые сокеты (подключения по сети), устройства (диски, терминалы, клавиатура, мышь и прочее — это всё файлы), pipe (технология обмена данными между процессами).
Эта концепция устройства упростила реализацию операционной системы Unix. Это означало, что небольшой набор обработчиков, инструментов и API-интерфейсов может быть создан для обработки широкого спектра различных ресурсов.
Файлы данных и программ, которые находятся на вашем жёстком диске, являются обычными файлами файловой системы. Мы можем использовать команду ls, чтобы вывести их и узнать некоторые детали о них. Но как мы узнаем обо всех других процессах и устройствах, которые рассматриваются как файлы? Для этого используется команда lsof. Она выводит списки открытых файлов в системе. То есть она перечисляет всё, что обрабатывается, как если бы это был файл.
Команда lsof
lsof означает ‘LiSt Open Files’ (список открытых файлов). Эта программа используется чтобы узнать, какие файлы открыты и каким процессом.
Для чего нужно знать, какие файлы открыты? Эта информация поможет узнать о многом происходящем в системе, об устройстве и работе Linux, а также решить проблемы, например, когда вы не можете размонтировать диск из-за того, что устройство используется, но вы не можете найти, какой именно программой.
Многие процессы или устройства, о которых lsof может сообщать, принадлежат root или были запущены пользователем root, поэтому вам нужно будет использовать команду sudo с lsof.
И поскольку этот список будет очень длинным, то можно передать его команде less:
sudo lsof | less
До появления вывода lsof, пользователи могут увидеть предупреждающее сообщение в окне терминала.
lsof пытается обработать все смонтированные файловые системы. Это предупреждающее сообщение появляется из-за того, что lsof обнаружил виртуальную файловую систему GNOME (GVFS). Это особый случай файловой системы в пространстве пользователя (FUSE). Он действует как мост между GNOME, его API и ядром. Никто, даже root, не может получить доступ к одной из этих файловых систем, кроме владельца, который её смонтировал (в данном случае, текущий пользователь). Вы можете игнорировать это предупреждение. Если же вы хотите получить доступ к данной файловой системе, то запустите lsof без sudo.
Шапка вывода lsof:
Значение столбцов lsof
Типов открытых файлов много, и далеко не все столбцы применимы к каждому из них. Поэтому если для каких-то файлов некоторые столбцы не заполнены данными, то это нормально.
- COMMAND: Имя команды, связанной с процессом, который открыл файл.
- PID: Идентификационный номер процесса, который открыл файл.
- TID: Идентификационный номер задачи (потока) . Пустой столбец означает, что это не задача; это процесс.
- TASKCMD: это имя команды задачи. Обычно это будет то же самое, что и процесс, названный в столбце COMMAND, но некоторые реализации задач (например, Linux) позволяют задаче изменить имя своей команды.
- USER: идентификатор пользователя или имя пользователя, которому принадлежит процесс, или идентификатор пользователя или логин человека, которому принадлежит каталог в /proc, где lsof находит информацию о процессе (также смотрите Что такое файловая система /proc в Linux)
- FD: показывает файловый дескриптор файла. Файловые дескрипторы описаны ниже.
- TYPE: тип узла, связанного с файлом. Виды данных типов описаны ниже.
- DEVICE: содержит номера устройств, разделённые запятыми, для специальных символьных, специальных блочных, обычных файлов, каталогов или NFS. Также может отображаться базовый адрес или имя устройства с сокетом Linux AX.25.
- SIZE/OFF: Показывает размер файла или смещение файла в байтах.
- NODE: Показывает номер узла локального файла или номер узла NFS-файла на хосте сервера или тип интернет-протокола. Может отображаться STR для потока, IRQ или номер инода устройства с сокетом Linux AX.25.
- NAME: показывает имя точки монтирования и файловой системы, в которой находится файл.
Колонка FD
Дескриптор файла в столбце FD может быть одним из многих вариантов; на странице руководства они перечислены все:
Запись в столбце FD может состоять из трёх частей: дескриптор файла, символ режима и символ блокировки.
Некоторые популярные файловые дескрипторы:
- cwd: текущий рабочий каталог.
- err: информация об ошибке FD (см. столбец NAME).
- ltx: текст разделяемой библиотеки (код и данные).
- m86: файл сопоставления DOS Merge.
- mem: файл с отображением в памяти.
- mmap: устройство с отображением в памяти.
- pd: родительский каталог.
- rtd: корневой каталог.
- txt: текст программы (код и данные)
Символ режима может быть одним из следующих:
- r: доступ для чтения.
- w: доступ для записи.
- u: Доступ для чтения и записи.
- : Пробел, если режим неизвестен и нет символа блокировки.
- —: режим неизвестен и есть символ блокировки.
Символ блокировки может быть одним из:
- r: Блокировка чтения на часть файла.
- R: Блокировка чтения на весь файл.
- w: Блокировка записи для на часть файла.
- W: Блокировка записи для на весь файл.
- u: Блокировка чтения и записи любой длины.
- U: неизвестный тип блокировки.
- : символ пробела. Нет блокировки.
Колонка TYPE
В столбце TYPE может отображаться более 70 записей. Далее перечислены только некоторые из часто встречающихся записей:
- REG: Обычный файл файловой системы.
- DIR: Директория.
- FIFO: Специальный файл FIFO (First In First Out).
- CHR: Специальный символьный файл.
- BLK: Специальный блочный файл.
- INET: Интернет-сокет.
- unix: Доменный сокет UNIX.
- IPv4: IPv4 сокет.
- IPv6: Файлы IPv6 сети — даже если её адрес IPv4 преобразован в IPv6 адрес.
- sock: Сокет неизвестного домена.
- DEL: Указатель Linux для удалённого файла.
- LINK: Файл символьной ссылки.
- PIPE: Труба (pipe) — способ обмена данными между процессами.
Как видеть процессы, которые открыли файл
Чтобы увидеть процессы, открывшие определённый файл, укажите имя файла в качестве параметра для lsof. Например, чтобы увидеть процессы, которые открыли файл /dev/sda, используйте эту команду:
Как вы можете знать (а если не знаете, то смотрите статью «Структура директорий Linux. Важные файлы Linux»), файл /dev/sda является жёстким диском. Приведённая выше команда поможет найти процесс, который не даёт отмонтировать (отсоединить) диск.
Можно проверить, какой командой открыты обычные файлы, например:
Видно, что файл открыт пользователем mial, это обычный файл (REG) и что он открыт приложением soffice.b (на самом деле приложение soffice.bin, но по какой-то причине оно здесь не целиком).
Аналогично можно проверить, открыты (запущены) ли исполнимые файлы, например, для проверки, запущен ли файл /bin/bash:
Как посмотреть все файлы, открытые в определённом каталоге
Чтобы увидеть файлы, которые были открыты из каталога, и процессы, которые их открыли, передайте каталог в lsof в качестве параметра. Для этого используйте опцию +D (каталог).
Чтобы увидеть все файлы, которые открыты в каталоге /var/log/, используйте эту команду:
lsof отвечает списком всех открытых файлов в этом каталоге.
Чтобы увидеть все файлы, которые были открыты из каталога /home, используйте следующую команду:
Файлы, которые были открыты из каталога /home. Обратите внимание, что в некоторых столбцах данные поместились не полностью.
Как показать только обычные файлы
Чтобы показать обычные файлы и директории и исключить все другие виды файлов (устройства, сокеты и т. д.) выполните следующую команду:
Как увидеть файлы, которые открыты указанной программой или командой
В столбце COMMAND указано имя исполнимого файла, который открыл файл. Чтобы увидеть файлы, которые были открыты определенным процессом, используйте параметр -c (КОМАНДА). Обратите внимание, что вы можете указать более одного поискового запроса для lsof одновременно.
lsof выведет список файлов, которые были открыты любым из процессов, представленных в командной строке.
Как посмотреть файлы, открытые определённым пользователем
Чтобы ограничить отображение файлами, которые были открыты определенным пользователем, используйте параметр -u (ПОЛЬЗОВАТЕЛЬ). В этом примере мы рассмотрим файлы, которые были открыты процессами, которые принадлежат или запускаются от имени mial.
Будут перечисленные все файлы, которые были открыты от имени пользователя mial. Они включают в себя файлы, которые были открыты, например, средой рабочего стола, или просто в результате входа mial.
Как исключить файлы, открытые определённым пользователем
Чтобы исключить файлы, которые были открыты пользователем, используйте оператор ^. Исключение пользователей из списка облегчает поиск интересующей вас информации. Вы должны использовать опцию -u, как и раньше, и добавить символ ^ в начале имени пользователя.
Отрицание (поиск любых значений, кроме приведённых) можно применять с любыми опциями, для которых можно указать какое-либо значение, то есть с именами пользователей, именами команд, идентификаторами процессов, папками и т.д.
Например, чтобы показать все файлы, которые были открыты в директории /home, но которые открыты процессами, не принадлежащими пользователю mial:
Как найти файлы, которые открыты указанным процессом
Чтобы вывести список файлов, которые были открыты определенным процессом, используйте параметр -p (ПРОЦЕСС) и укажите идентификатор процесса в качестве параметра.
Все файлы, которые были открыты по указанному вами идентификатору процесса, перечислены для вас.
Как узнать идентификаторы процессов, которые открыли файл
Чтобы увидеть идентификаторы процессов, которые открыли конкретный файл, используйте параметр -t (ФАЙЛ).
Идентификаторы процесса, открывших файл, отображаются в виде простого списка.
Как вывести размер открытых файлов
Для показа размера используйте опцию -s:
Для сортировки по размеру обычных файлов выполните следующую команду:
Как увидеть какие процессы сколько занимают в области Buff/Cache
Buffer/cache используются виртуальными файловыми системами, а также для оптимизации чтения/записи на диск, то есть файлы, которые уже были прочитаны с диска, размещены там для ускоренного доступа.
Следующая команда сортирует открытые файлы по размеру — именно они и занимают место в buffer/cache:
Buffer/cache потребляет не столько ядро, сколько всякие браузеры, офисные программы, графическое окружение, программы, имеющие большие логи и т. п. То есть все программы, которые открывают много файлов и/или большие файлы и держат их открытыми.
Как комбинировать условия поиска lsof (логические И и ИЛИ)
Давайте выведем файлы, которые были открыты пользователем mial и которые связаны с процессами systemd. Мы знаем, что можем предоставить более одного элемента поиска в командной строке, поэтому это должно быть легко.
Теперь давайте посмотрим на вывод lsof. Это не выглядит правильно; в выводе есть записи, которые были запущены пользователем root.
Это не то что мы ожидали. Что произошло?
Если вы предоставите несколько поисковых терминов, lsof вернёт любой файл, который соответствует первому поисковому запросу или второму поисковому запросу и так далее. Другими словами, она выполняет поиск ИЛИ.
Чтобы lsof выполняла поиск И, используйте опцию -a. Это означает, что будут перечислены только те файлы, которые соответствуют первому поисковому запросу, второму поисковому запросу и т. д.
Давайте попробуем это снова и используем опцию -a.
Теперь каждый файл в списке — это файл, который был открыт пользователем mial или от его имени и связан с systemd.
Обратите внимание, что два условия, одно из которых содержит отрицание (^) обрабатываются как логическое И:
Но если требуется логическое И, то лучше взять за правило всегда использовать опцию -a, поскольку так команда становиться более однозначной:
и в случае добавления третьего условия поиска она будет работать как ожидается:
Автоматическое обновление выводимой информации lsof
Чтобы перевести lsof в режим повтора, мы можем использовать опцию +r (СЕКУНДЫ) или её вариант -r (СЕКУНДЫ). Опцию повторения можно применить двумя способами: +r или -r. Мы также должны добавить количество секунд, которое мы хотим, чтобы lsof ожидал перед обновлением дисплея.
Использование опции повтора в любом формате заставляет lsof отображать результаты как обычно, но добавляет пунктирную линию внизу экрана. Программа ожидает количество секунд, указанное в командной строке, а затем обновляет дисплей новым набором результатов.
С опцией -r это будет продолжаться пока вы не нажмете Ctrl+c. В формате +r программа будет продолжаться до тех пор, пока не будет получен пустой результат, или пока вы не нажмете Ctrl+c.
Обратите внимание на пунктирную линию внизу списка. Она отделяет каждое новое отображение данных при обновлении вывода.
Отображение файлов, связанных с подключениями к Интернету
Опция -i позволяет просматривать файлы, открытые процессами, связанными с сетевыми и Интернет-соединениями.
Отображаются все файлы, связанные с сетевыми подключениями и подключению к Интернету.
Если вы не хотите, чтобы цифровые обозначения портов заменялись на имена (например, http вместо 80), то добавьте опцию -P:
Отображение файлов, связанных с подключениями к Интернету, по идентификатору процесса
Чтобы увидеть файлы, открытые подключениями к Интернету, которые связаны с определенным идентификатором процесса, добавьте параметр -p (PID) и параметр -a.
Здесь мы ищем файлы, открытые через Интернет или сетевое соединение, с помощью процесса с идентификатором 606.
Отображение файлов, связанных с Интернет-подключениями и командами
Мы можем использовать опцию -c (КОМАНДА) для поиска файлов, открытых определёнными процессами. Чтобы найти файлы, которые были открыты через Интернет или сетевые подключения, связанные с процессом ssh, используйте следующую команду:
Отображение файлов, связанных с Интернет-подключениями и портами
Мы можем сделать lsof отчёт о файлах, которые были открыты через интернет или сетевые подключения на конкретном порту. Для этого мы используем символ :, за которым следует номер порта.
Здесь мы просим lsof перечислить файлы, которые были открыты сетевым или Интернет-соединением с использованием порта 22.
Как показать сокеты только для определённого протокола
Мы можем попросить lsof показать файлы, которые были открыты процессами, связанными с сетевыми и Интернет-соединениями, которые используют определённый протокол. Мы можем выбрать из TCP, UDP и SMTP. Давайте использовать протокол TCP и посмотрим, что мы получим. Если вас интересуют только сетевые подключения на TCP протоколе или UDP протоколе, то вы можете использовать следующие команды:
Протоколы можно писать как заглавными буквами, так и прописными:
Как узнать, какой процесс или служба прослушивают порт
Чтобы узнать, какая программа прослушивает определённый порт, выполните команду вида:
Например, чтобы увидеть процесс, который открыл 80й порт:
Если вы хотите проверить занятость порта на определённом протоколе (TCP или UDP), то укажите интересующий протокол перед номером порта:
Как просмотреть только IPv4 или IPv6 соединения
IPv6 — это шестая, новая версия протокола IP.
Чтобы вывести открытые файлы сетевых соединений только для IPv4 выполните команду:
Чтобы показать открытые файлы только типа IPv6 выполните:
Как просмотреть сетевые соединения в диапазоне портов
Если нужно увидеть все запущенные процессы, которые открыли файлы TCP портов в диапазоне 1-1024, то выполните команду:
Кроме диапазона портов через дефис, можно указать несколько портов или их диапазонов через запятую:
Как увидеть сетевые подключения определённого хоста
У каждого сетевого соединения есть исходный узел и пункт назначения, чтобы увидеть соединения, которые относятся только к определённому хосту, выполните команду вида:
Например, я хочу просмотреть только сетевые соединения для локального компьютера с именем HackWare, тогда команда следующая:
Если я хочу увидеть соединения с сайтом suip.biz, то команда такая:
В качестве хоста можно указывать не только имена сайтов или хостов, но и IP адрес.
Сочетание фильтров сетевых соединений
Можно использовать все фильтры сразу в команде вида:
Как остановить всю активность определённого пользователя
Иногда нужно убить все процессы определённого пользователя. Ниже команда, которая закроет все процессы пользователя mial:
Поиск по регулярным выражениям программ, открывших файлы
В фильтрах lsof вы можете использовать регулярные выражения.
В следующем примере будут найдены все файлы, открытые процессом, имя которого состоит ровно из четырёх символов и третьим символом в имени является буква «o».
А этот пример найдёт все файлы, открытые процессом, имя которого состоит ровно из четырёх символов:
Основы команды lsof
Мы рассмотрели только самые популярные примеры использования команды lsof. Огромную документацию по этой программе с описанием всех опций вы найдёте в её справочной странице:
Источник