Linux процесс держит файл

Содержание
  1. Как в Linux найти, кто использует файл
  2. Как узнать PID процесса в Linux
  3. Как узнать pid процесса Linux
  4. 2. pgrep
  5. 3. pidof
  6. 4. pstree
  7. Как узнать PID скрипта
  8. Каким процессом занят файл Linux
  9. Кто использовал файл в Linux
  10. Какой процесс использует порт в Linux
  11. Выводы
  12. linux-notes.org
  13. Примеры использования команды Lsof
  14. Установка Lsof в RHEL, CentOS и Fedora Linux:
  15. Установка Lsof в Debian, Ubuntu и Mint Linux:
  16. Установка Lsof в freeBSD:
  17. Опции.
  18. Базовые примеры lsof команды
  19. Список процессов, которые открыли конкретный файл
  20. Показать Все процессы открытых файлов в каталоге
  21. Показать все файлы, открытые процессы, начинающиеся с буквы
  22. Дисплей, который обращается к устройству
  23. Список файлов, открытых определенным пользователем
  24. Убить все данный пользователя
  25. Перечислите все сетевые соединения
  26. Перечислите все открытые файлы по конкретному процессу
  27. Показать PID с опцией -t.
  28. One thought on “ Примеры использования команды Lsof ”
  29. Добавить комментарий Отменить ответ

Как в Linux найти, кто использует файл

Оригинал: How to Find Out Who is Using a File in Linux
Автор: Aaron Kili
Дата публикации: 29 марта 2019 г.
Перевод: В.Костромин
Дата перевода: 13 мая 2020 г.

В этой статье мы расскажем, как узнать, кто использует тот или иной файл в Linux. Это позволит вам найти системного пользователя или процесс, который использует открытый файл.

Мы можем использовать команду lsof, чтобы узнать, использует ли кто-то файл, и если да, то кто именно. Эта команда обращается к памяти ядра в поиске открытых файлов и выводит список всех открытых файлов. Открытый файл может быть обычным файлом данных, каталогом, специальным файлом устройства, символьным файлом устройства, потоком, сетевым файлом или относиться к какому-то еще типу файлов — потому что в Linux все является файлом.

Lsof используется файловой системой, чтобы определить, кто использует какие-либо файлы в этой файловой системе. Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах, использующих файл, как показано в следующем листинге выходных данных.

Список всех открытых в Linux файлов

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

Список файлов, открытых конкретным пользователем (при использовании в вашей системе замените tecmint действительным именем пользователя)

Еще одно важный случай применения команды lsof — определение процесса, использующего определенный порт. Например, чтобы определить, какой процесс использует порт 80, можно воспользоваться следующим вариантом запуска команды lsof.

Определение процесса, прослушивающего порт

Важное замечание: Поскольку lsof в поисках открытых файлов обращается к памяти ядра, быстрые изменения в памяти ядра могут привести к непредсказуемому результату. Это один из главных недостатков использования команды lsof.

За дополнительной информацией обращайтесь к странице руководства lsof man:

На этом все! В этой статье мы объяснили, как узнать, кто использует тот или иной файл в Linux. Мы показали, как определить владельца и информацию о процессах, использующих открытый файл.

Об авторе

Aaron Kili — энтузиаст Linux и свободного ПО, системный администратор, веб-разработчик и в настоящее время создатель контента для TecMint, который любит работать с компьютерами и твердо верит в обмен знаниями.

Вы можете найти на нашем сайте более подробные статьи о команде lsof:

Читайте также:  Brother l2300dr драйвер windows 10

Источник

Как узнать 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 же его придётся установить командой:

Читайте также:  Трейнер для minecraft windows 10 edition

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 по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.

Источник

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:

Опции.

default : : без вариантов, Lsof выведет список всех открытых файлов для всех процессов.
grouping : это возможно группирования параметров, например -abC, но вы должны следить какие опции принимают параметры.
-a : «И» результаты (вместо «ИЛИ»).
l : показать идентификатор пользователя (userID) вместо имени пользователя на выходе.
h : Вывести помощь (help).
t : Получить ID процесса (ов) только.
U : Получить адрес сокета UNIX.
-F : вывод готов для другой команде, которую можно отформатировать различными способами, например,-F pcfn (идентификатор процесса, название команды, дескриптор файла, имя файла, с нулевого символа)

Базовые примеры lsof команды

Набрав команду Lsof он выведет список всех открытых файлов, принадлежащих всех активных процессах в системе:

По умолчанию отображается один файл в каждой строке. Большинство колонн говорят сами за себя. Мы объясним подробности о нескольких загадочных столбцов (FD и TYPE(тип)).

FD — Представляет дескриптор файла. Некоторые из значений FD являются.
cwd — текущий рабочий каталог.
TXT — текстовый файл.
mem — Память отображаемого файла.
mmap — Память отображаемого устройства.

NUMBER — представить фактический дескриптор файла. Символ после числа, представляет собой режим в котором открывается файл.

r- для чтения, w- для записи, u- для чтения и записи.
TYPE (ТИП) — Указывает тип файла. Некоторые из значений типов,
REG — обычный файл
DIR — Справочник
FIFO — First In First Out
CHR — Поведение специального файла

Читайте также:  Почему некоторые приложения размытые windows 10

Или посмотрите полный список FD& TYPE в мануале Lsof.

Список процессов, которые открыли конкретный файл

Вы можете перечислить только процессы, которые открыли конкретный файл, предоставляя имя файла в качестве аргументов. (например введем в терминале команду: # lsof /var/log/apache2/ access.log ), получим в ответ:

lsof с параметром

Показать Все процессы открытых файлов в каталоге

флаги +D /var/log будет информировать Lsof найти все связанные процессы, работающие с файлами под /var/log:

Показать все файлы, открытые процессы, начинающиеся с буквы

Для отображения всех файлов, открытых процессов, начинающихся с буквы «C» выполнить Lsof -c b для процессов, начиная с «b».

Вывести все файлы, открытые с помощью конкретной команды:

Дисплей, который обращается к устройству

Для отображения кто получает доступ устройства, каталога или двоичный файлов. В данном случае я с изложением кто обращается к области памяти.

Список файлов, открытых определенным пользователем

Для того чтобы найти список файлов, открытых определенных пользователей, использовать опцию ‘-U’.

Show what all users are doing except a certain user using -u ^user

Убить все данный пользователя

Вы можете убить все процессы которые держат открытые файлы по конкретному пользователю:

Перечислите все сетевые соединения

Вы можете перечислить все сетевые подключения, открытые с помощью ‘-I’ вариант.

Получить только траффик сIPv6 с опцией -i 6

Показать только соединения TCP (работает то же самое и для UDP), вы можете также показать только TCP или UDP соединения, предоставляя протокол сразу после -i:

Показать сети, связанный с данным портом с помощью -i: порт:

Показать соединения к определенному хосту с помощью «host». Это очень полезно, когда вы ищете, есть ли у вас открытые соединения с данного хоста в сети или по интернету.

Показать соединения к определенному хосту с помощью @host:port. Вы также можете комбинировать отображение хост и порт:

Найти прослушивающие порты, которые ждут соединения:

Вы также можете отсеять не нужно и вывести например, только «LISTEN»:

Найти установленные соединения. Вы можете также показать любые соединения, которые уже установлены на сервере:

Вы можете отгрепать мусор и найти что-то для себя, например:

Перечислите все открытые файлы по конкретному процессу

Вы можете перечислить все файлы, открытые конкретного процесса с использованием опции ‘-P’. Это будет полезно иногда, чтобы получить больше информации о конкретном процессе.

Показать приложения, которые используют подключение к интернету в данный момент:

Показать PID с опцией -t.

Показать PIDможно с опцией -t:

Использование опций -t и -c вместе, чтобы выполнить HUP для процессов:

Lsof + L1 показывает все открытые файлы, имеющие ссылки ( менее чем 1):

Показать открытых соединений с диапазоном портов:

Для получения дополнительной использования выполните команду:

Показать приложения, которые используют подключение к интернету в данный момент.

На этом я завершу данную тему «Примеры использования команды Lsof «.

One thought on “ Примеры использования команды Lsof ”

Спасибо! Суперпримеры, то что надо.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Оцените статью