Linux показать открытые файлы

Вики IT-KB

Как проверить все открытые файлы пользователем или процессом в Linux

В некоторых ситуациях на Linux могут возникать ошибки, связанные с превышением лимита использования файловых дескрипторов. Эти лимиты накладываются как самим ядром Linux, так и его программными модулями, например PAM.

Лимит ядра Linux

Узнать текущее значение максимального количества файловых дескрипторов, определяемое ядром Linux можно командой:

Этот лимит может быть изменён без перезагрузки системы (начинает действовать сразу и действует до перезагрузки):

# echo "1221724" > /proc/sys/fs/file-max

Чтобы требуемое значение использовалось постоянно, то есть действовало и после перезагрузки, его необходимо определить в конфиг.файле /etc/sysclt.conf :

Методика подсчёта открытых файлов

Для получения информации о количестве всех открытых файлов всеми процессами в Linux некоторые «знатоки» предлагают использовать команду типа

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

Поэтому проще для получения общего числа открытых файлов использовать данные ядра Linux

# cat /proc/sys/fs/file-nr
5248 0 610862

Первое число — общее количество занятых/используемых на данный момент времени файловых дескрипторов.
Второе число — количество выделенных процессам, но не используемых в данный момент дескрипторов.
Третье число — максимальное количество открытых дескрипторов

Примеры получения данных

Получить список TOP-20 процессов с самым большим количеством открытых файловых дескрипторов:

# for x in `ps -eF| awk '< print $2 >'`; \ do echo `ls /proc/$x/fd 2> /dev/null | \ wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`; \ done | sort -n -r | head -n 20

Подсчитать количество открытых файлов в разрезе процессов (в первой колонке будет выведен PID процесса, во второй количество открытых файлов этим процессом):

# ps aux | sed 1d | awk \ '' | \ xargs -I <> bash -c <>

Посмотреть открытые файловые дескрипторы во всех процессах для отдельно взятого пользователя, например «apache»

Читайте также:  Linux создать скрытую папку

Подсчитать количество открытых файлов в каждом процессе для отдельно взятого пользователя:

# lsof -u apache | awk '' | sort | uniq -c | sort -n

Тоже самое, только в реальном режиме времени:

# watch 'lsof -u vdsm | awk '\'''\'' | sort | uniq -c | sort -n'

Посмотреть открыте файловые дескриптры для отдельно взятого процесса (по PID процесса):

Подсчитать количество файловых дескриптров для отдельно взятого процесса:

Дополнительные источники информации:

Проверено на следующих конфигурациях:

Автор первичной редакции:
Алексей Максимов
Время публикации: 09.06.2018 11:18

Обсуждение

unix-linux/linux-cli-tools/how-to-check-all-open-files-by-process-or-user-in-linux.txt · Последнее изменение: 09.06.2018 12:49 — Алексей Максимов

Источник

lsof — поиск и устранение проблем в Linux

img

Статьи по тематике устранение неисправностей связаны с определенным набором решений проблем. В случае с Linux и Unix полезно иметь некое руководство по доступным инструментам, облегчающим работу по поиску и устранению проблем. Это такой документ, который содержит основные важные команды, позволяющие облегчить жизнь администраторам Linux/Unix при возникновении проблем.

Команда «list open files» или команда lsof выглядит достаточно просто, но ее использование в качестве инструмента для устранения неполадок не так очевиден, как кажется на первый взгляд. Например, если у неизвестного процесса открыто несколько файлов, знание того, какие они есть, может помочь определить, является ли процесс легитимным.

В первой статье рассмотрим множество вариантов использования команды lsof.

Во второй статье рассмотрены рекомендации о том, как исправлять проблемы этим множеством вариаций данной команды.

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

Работа с базами данных Oracle — обычная задача администратора, и немного узнать о них и о том, как тестировать соединения с ними, — ценный инструмент, описанный в четвертой статье. Если проблема связана с подключением, отпадает потребность в вызове администратора баз данных.

В завершении нашего руководства приведена статья с инструкциями по командам, необходимым для управления дисками и разбиения их на разделы.

Читайте также:  Linux include linux module h

Команда lsof

Команда lsof — это нечто большее, чем вы можете себе представить. Узнайте обо всех возможностях ее применения для поиска и устранения неполадок.

lsof — команда Unix/Linux, которая отображает все открытые файлы или идентифицирует процессы, открытые конкретными файлами. Удобная для оценки безопасности ИС, а также для устранения проблем lsof предлагает широкий спектр параметров, позволяющие использовать её различными способами — иногда даже превосходя команду ps для просмотра процессов и команду netstat для исследования сетевых интерфейсов.

Что такое открытые файлы?

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

И если вы когда-нибудь слышали, что для Unix все является файлом, вы, возможно, не слишком удивитесь, узнав, что lsof работает с такими вещами, как сетевые интерфейсы, которые большинство из нас обычно не считают файлами.

Почему нам это важно?

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

Принцип работы lsof?

При применении команды lsof без параметров в терминале выводятся все файлы, которые открыты (используются) в вашей системе. Если вы запустите lsof от своего имени, вы получите длинный список файлов, но выходные данные будут включать в себя множество сообщений об отказе в разрешении — многие из них представляют открытые файлы в файловой системе /proc, которые вам не разрешено видеть. Запустите команду от имени root, и вы увидите больше выходных данных.

Читайте также:  Virtualbox нет 64 bit linux

Рис. 1 Пример вывода команды lsof Рис. 1 Пример вывода команды lsof

Что еще интересного?

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

lsof имеет обширный список опций

В этой статье мы разберем наиболее полезные.

Чтобы начать работу со всеми этими параметрами, вам необходимо о том знать о возможности использования более одной опции. Для этого используйте слово OR. Таким образом, вы получаете список, объединяющий результаты указанных вами параметров. Помимо этого вы можете выбрать вариант, со служебным словом AND. В этом случае ваши опции будут применяться вместе. Другими словами, вы увидите те файлы, процессы и т. д., которые соответствуют всем указанным вами параметрам. Для применения объединения AND, добавьте в свою команду параметр -a.

Полезные параметры lsof

Примеры использования lsof с параметрами, отображены на скриншотах ниже. Они демонстрируют наиболее полезные вещи, которые вы можете применить с данной командой.

На скриншоте ниже lsof, перечисляет все процессы, у которых открыт конкретный файл:

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

На этом скриншоте выводится список всех процессов, у которых есть открытые файлы в определенном каталоге:

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

На этом скриншоте показаны файлы, открытые bash:

файлы, открытые bash

На этом скриншоте, но с использованием подстроки вместо полного имени процесса:

с использованием подстроки вместо полного имени процесса

На этом скриншоте перечислены открытые файлы для определенного идентификатора процесса:

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

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

lsof можно использовать для изучения сети

На скриншоте показан пример просмотра портов и/или установленных соединений.

ример просмотра портов и/или установленных соединений

Также можно сетевые подключения для одного конкретного источника.

сетевые подключения для одного конкретного источника

Просмотр файлов пользователем

На этом скриншоте lsof просматриваем открытые файлы для конкретного пользователя:

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

Для просмотра открытых файлов всех пользователей, кроме определенного (здесь это root), используйте знак ^:

Для просмотра открытых файлов всех пользователей, кроме определенного (здесь это root), используйте знак ^

Перечислить идентификаторы процессов для процессов, запускаемых конкретным пользователем:

$ sudo lsof -t -u froggy 15352 15353

Завершить все процессы, принадлежащие конкретному пользователю:

$ sudo kill lsof -t -u froggy

Используйте параметр -a для использования оператора AND для объединения ваших опций вместе, помня, что это ограничивает вывод только тем, что соответствует всем указанным условиям:

Источник

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