Как узнать какие файлы используются процессом linux
Этичный хакинг и тестирование на проникновение, информационная безопасность
- Азы работы в командной строке Linux (часть 1)
- Азы работы в командной строке Linux (часть 2)
- Азы работы в командной строке Linux (часть 3)
- Азы работы в командной строке Linux (часть 4)
- Азы работы в командной строке Linux (часть 5)
- Азы работы в командной строке Linux (часть 6)
В этой части мы научимся наблюдать за процессами в Linux, это может быть полезным для решения проблем с производительностью. Например, система медленно работает из-за того, что какая-то программа полностью использует центральный процессор или заняла всю оперативную память. Мы научимся находить и останавливать процессы, которые потребляют больше всего ресурсов, просматривать все запущенные процессы, менять их приоритет и выполнять другие действия с ними.
top для показа процессов в реальном времени
У программы top есть опции, но большую часть настройки можно сделать интерактивными командами в запущенной программе. Для запуска выполните:
В самом верху информация об использовании ресурсов центрального процессора и оперативной памяти. Если ваша система «тормозит», работает медленно, то посмотрите, что именно происходит: полностью загружен процессор или закончилась память.
На моём скриншоте проблем с производительностью нет, но давайте представим, что полностью загружен центральный процессор. Процессы отсортированы по уровню потребления времени ЦПУ — от самого прожорливого (то есть в порядке убывания). Чтобы убедиться в этом нажмите кнопку x — будет подсвечен столбец по которому выполняется сортировка.
Теперь процессы отфильтрованы по столбцу %MEM (память):
Как можно увидеть, на моей системе больше всего памяти потребляет процесс libreoffice (офисные приложения) и chromium (веб-браузер).
Для включения/отключения цвета: z
Для включения/отключения полужирных шрифтов: b
Для показов команды запуска: c
Для включения и отключения древовидного вывода процессов: V (то есть Shift+v)
Можно выводить до четырёх отдельных вкладок (окон) программы top в одном окне — в каждой из них можно сделать разные настройки вывода. Подробности смотрите в статье «Как пользоваться командой top для наблюдения за процессами в Linux».
htop — простая альтернатива top
В программе top можно искать (фильтровать) процессы, останавливать их, менять порядок и тип выводимых столбцов. Но каждое это действие выполняется командой, которую нужно помнить — это неудобно. В программе htop самые востребованные функции по управлению процессами назначены на функциональные клавиши F1-F12 и информация о них всегда присутствует на экране. То есть программа htop похожа на top, но проще в использовании:
Программа htop по умолчанию раскрашена цветами, выводит команды процессов и подсвечивает колонку, по которой выполняется сортировка.
systemctl для просмотра состояния служб
Если вам интересует, что происходит с определённой службой — запущена ли она, возникла ли ошибка при запуске или с ней всё в порядке, то вместо поиска службы для интерактивного показа процессов или снимка процессов, удобнее использовать команду systemctl.
К примеру, меня интересует, запущена ли служба SSH сервера на компьютере, на котором я в данный момент работаю, тогда мне нужно выполнить следующую команду:
Служба SSH сервера не запущена.
Просмотр статуса веб-сервера:
ps для получения снимка процессов
Программы top и htop выводят на экран постоянно обновляемую информацию о процессах, а программа ps выводит информацию один раз на момент выполнения программы.
Программу ps удобно использовать, если нужно просто проверить, запущен ли определённый процесс, либо узнать идентификатор процесса, либо для работы с процессами в скриптах. Кстати, программа top тоже умеет выводить снимок процессов — в инструкции, на которую выше дана ссылка, написано как это сделать.
Чтобы вывести список всех активных процессов:
В таком списке удобно искать с помощью grep:
ps -e | grep firefox
Следующая команда выведет все процессы (-e), для процессов будут показаны поля Идентификатор процесса, Идентификатор родительского процесса, потребление времени ЦПУ, потребление памяти, команда и аргументы, которой был запущен процесс (-o pid,ppid,pcpu,pmem,args), будет показано дерево процессов (--forest) и процессы будут отсортированы по использованию процессора в порядке убывания (--sort -pcpu):
Интересный пример комбинирования команд ps с watch и head — будет выведен список топ-10 процессов, потребляющих оперативную память, этот список будет обновляться каждую секунду:
Как и предыдущая команда, но для потребителей ЦПУ:
lsof для показа открытых файлов
Файлы открываются процессами. Иногда нужно знать, какие файлы открыл процесс или каким процессом открыт файл. Это может понадобиться для мониторинга активности процессов, либо для решения проблем, когда невозможно выполнить действие из-за того, что какой-то процесс использует файл.
Чтобы увидеть, какой процесс открыл файл, нужно указать путь до этого файла:
В качестве файла могут быть устройства, например, жёсткий диск:
Чтобы увидеть все файлы, которые открыты в определённом каталоге, используйте опцию +D и укажите путь до каталога, например, для просмотра всех открытых файлов в директории /var/log/ и открывших их процессов:
В столбце COMMAND показано имя процесса, открывшего файл, а в столбце PID показан идентификатор процесса.
Чтобы увидеть все файлы, которые были открыты из каталога /home:
Чтобы показать все открытые на дисках файлы:
Чтобы увидеть файлы, которые были открыты определенным процессом, используйте параметр -c КОМАНДА:
pstree для вывода дерева процессов
Программа pstree показывает дерево процессов, то есть связи между родительскими и дочерними процессами:
pgrep для поиска процесса
Вместо запуска ps и последующей фильтрации с помощью grep можно использовать одну команду pgrep, которая запускается так:
Например, для поиска процесса firefox:
Если процесс найден, то будет выведен его идентификатор (PID), а если процесс не найден, то ничего не будет выведено.
Если указать опцию -a, то заодно будет выведен и полный путь до исполнимого файла:
kill, pkill и killall для остановки процесса
Чтобы закрыть, выключить процессы используются команды:
Разница между командами pkill и killall в том, что pkill принимаемое ИМЯ_ПРОЦЕССА использует для поиска как по всему имени, так и по части имени. А killall по умолчанию ищет точное совпадение имени процесса. То есть если вместо «firefox» указать «firef», то pkill закроет все процессы firefox, а killall не закроет ни одного процесса.
Это работает и для приложений с графическим интерфейсом:
Чтобы показать записи в системном журнале одного процесса с указанным PID:
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:
Опции.
Базовые примеры lsof команды
Набрав команду Lsof он выведет список всех открытых файлов, принадлежащих всех активных процессах в системе:
По умолчанию отображается один файл в каждой строке. Большинство колонн говорят сами за себя. Мы объясним подробности о нескольких загадочных столбцов (FD и TYPE(тип)).
Или посмотрите полный список FD& TYPE в мануале Lsof.
Список процессов, которые открыли конкретный файл
lsof с параметром
Показать Все процессы открытых файлов в каталоге
флаги +D /var/log будет информировать Lsof найти все связанные процессы, работающие с файлами под /var/log:
Показать все файлы, открытые процессы, начинающиеся с буквы
Вывести все файлы, открытые с помощью конкретной команды:
Дисплей, который обращается к устройству
Для отображения кто получает доступ устройства, каталога или двоичный файлов. В данном случае я с изложением кто обращается к области памяти.
Список файлов, открытых определенным пользователем
Show what all users are doing except a certain user using -u ^user
Убить все данный пользователя
Вы можете убить все процессы которые держат открытые файлы по конкретному пользователю:
Перечислите все сетевые соединения
Получить только траффик сIPv6 с опцией -i 6
Показать только соединения TCP (работает то же самое и для UDP), вы можете также показать только TCP или UDP соединения, предоставляя протокол сразу после -i:
Показать сети, связанный с данным портом с помощью -i: порт:
Показать соединения к определенному хосту с помощью @host:port. Вы также можете комбинировать отображение хост и порт:
Найти прослушивающие порты, которые ждут соединения:
Найти установленные соединения. Вы можете также показать любые соединения, которые уже установлены на сервере:
Вы можете отгрепать мусор и найти что-то для себя, например:
Перечислите все открытые файлы по конкретному процессу
Показать приложения, которые используют подключение к интернету в данный момент:
Показать PID с опцией -t.
Показать PIDможно с опцией -t:
Использование опций -t и -c вместе, чтобы выполнить HUP для процессов:
Lsof + L1 показывает все открытые файлы, имеющие ссылки ( менее чем 1):
Показать открытых соединений с диапазоном портов:
Для получения дополнительной использования выполните команду:
Показать приложения, которые используют подключение к интернету в данный момент.
В этой статье вы узнаете, как вывести список открытых файлов пользователем или процессом с помощью команды lsof в Linux.
М ы думаем, что в какой-то момент вы задавались вопросом, есть ли способ показать открытые файлы процесса или пользователя. Хорошо, что ответ на этот вопрос это команда lsof.
Позвольте нам показать вам наиболее распространенное использование команды lsof.
Примеры команды l sof
Если вы используете команду lsof без каких-либо параметров и аргументов, она выведет список всех открытых файлов всеми процессами в системе.
Вывод должен быть таким:
Выводы в основном говорят сами за себя, но вы все еще можете задаться вопросом о столбцах FD и TYPE.
FD означает файловый дескриптор. Некоторые из общих значений для FD:
TYPE это не просто. Он определяет тип файла. Вот некоторые примеры:
Доверьтесь нам. Вы не захотите запускать команду lsof без аргументов.
Почему мы это говорим? Потому что он начнет заполнять ваш экран тысячами результатов.
Если мы запускаем команду lsof на сервере Ubuntu и подсчитываем количество строк с помощью команды wc, вот результат.
Читать Как настроить мастер Kubernetes с рабочим узлом в LinuxДа! Вот так. В системе открыто более одиннадцати тысяч файлов, открытых различными процессами.
Не беспокойтесь, команда lsof очень полезна при отладке, потому что вы можете видеть, какие процессы открывают, какие файлы и какой файл открывается каким процессом.
Если вы не вошли в систему как root, вывод команды lsof будет очень ограничен. Рекомендуется использовать sudo, если вы вошли в систему как пользователь без полномочий root.
1. Перечислите все процессы, которые открыли файл
Это просто Вам просто нужно указать путь к файлу.
2. Список всех файлов, открытых пользователем
Это удобно в многопользовательской среде. Вы можете перечислить все файлы, открытые определенным пользователем, следующим образом:
Вы также можете указать более одного пользователя, как это:
3. Список всех открытых файлов в каталоге
Если вам интересно, какие из файлов были открыты в определенном каталоге, вы можете использовать команду lsof с опцией + D.
Поиск рекурсивный. Таким образом, он перечислит все открытые файлы в указанном каталоге и все его подкаталоги.
4. Перечислите все открытые файлы процессом
В этом случае вам нужно знать идентификатор процесса (pid). Если вы знаете идентификатор процесса, вы можете использовать опцию -p команды lsof, чтобы найти файлы, открытые им.
Вы также можете указать несколько идентификаторов процессов.
5. Список всех файлов, открытых командой
6. Найти открытый пользователем и командой или процессом
Вы можете комбинировать параметры, такие как пользователь и команда, и процесс, используя вариант -, Думайте об этом как об операторе AND. Это дает вам дополнительный фильтр при попытке сузить область поиска.
7. Перечислите сетевые соединения и порты с помощью команды lsof
Вы также можете использовать команду lsof для поиска открытых портов или для поиска того, какой процесс использует порт.
Вы можете подать все виды открытых портов с опцией -i:
Вывод может выглядеть так:
Вы также можете указать тип сетевого подключения. Например, чтобы вывести список всех открытых портов TCP, вы можете использовать:
Чтобы узнать, какой процесс использует определенный порт, вы можете указать номер порта:
Бонусный совет: использование оператора отрицания с lsof
Вы можете использовать оператор отрицания, чтобы исключить пользователя или процесс при использовании команды lsof.
Например, вы хотите перечислить все файлы, открытые пользователем, отличным от root, используйте его следующим образом:
Команда lsof становится еще более полезной, когда вы используете ее с командой grep.
Мы надеемся, что вы узнали что-то новое с этой статьей. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
На сайте уже есть несколько статей про процессы Linux, в которых подробно описано как ими управлять или как завершить один или группу процессов, но это еще не все. Чтобы правильно управлять процессами и ориентироваться в них вам нужно научиться анализировать список процессов Linux, понимать что значит каждый пункт и зачем он нужен.
В этой статье мы подробно рассмотрим как посмотреть список процессов различными способами, разберем какими бывают процессы, почему так происходит и что с этим делать.
Список процессов в Linux
Я не буду подробно рассказывать про каждую команду, которую можно применять для просмотра списка запущенных процессов, вместо этого мы пройдёмся по основным утилитам для решения этой задачи, рассмотрим как посмотреть список потоков процесса, вывести процессы, которые выполняются на определённом ядре, а также как найти скрытые процессы. Но сначала надо разобраться с терминами.
- Процесс - если говорить простыми словами, это программа и её данные, загруженные в память компьютера;
- Дочерний процесс - процессы могут запускать другие процессы для выполнения параллельных задач или других целей такие процессы называются дочерними. Для них выделяется отдельная область в памяти;
- Поток - поток отличается от процесса тем, что использует ту же память, данные и дескрипторы файлов, что и процесс, в котором он был создан.
1. Утилита ps
Самый простой способ посмотреть список процессов, запущенных в текущей командой оболочке, использовать команду ps без параметров:
Но вряд-ли вас интересует именно это. Чтобы посмотреть все процессы, добавьте опцию -e, а для максимально подробной информации - опцию -F:
Вот значение основных колонок в выводе утилиты:
- UID - имя пользователя, от имени которого работает процесс;
- PID - идентификатор пользователя;
- PPID - идентификатор родительского процесса пользователя;
- C - расходование ресурсов процессора, в процентах;
- SZ - размер процесса;
- RSS - реальный размер процесса в памяти;
- PSR - ядро процессора, на котором выполняется процесс;
- STIME - время, когда процесс был запущен;
- TTY - если процесс привязан к терминалу, то здесь будет выведен его номер;
- TIME - общее время выполнения процесса (user + system);
- CMD - команда, которой был запущен процесс, если программа не может прочитать аргументы процесса, он будет выведен в квадратных скобках;
Чтобы посмотреть список процессов в виде дерева, и понимать какой процесс имеет какие дочерние процессы, выполните команду:
Для просмотра списка процессов с потоками используйте опцию -L:
Здесь появятся ещё две дополнительных колонки:
- LWP - Это сокращение от LightWeight Proccess. Идентификатор потока;
- NLWP - количество потоков у этого процесса.
Чтобы посмотреть список процессов определенного пользователя, например, sergiy используйте опцию -u:
Теперь давайте перейдём к другим, более интересным, интерактивным утилитам.
2. Утилита top
Утилита top не поставляется вместе с системой, поэтому вам придется её установить. Для этого в Ubuntu выполните:
sudo apt install top
Программа позволяет интерактивно просматривать список запущенных процессов Linux. Чтобы вывести список процессов Linux выполните команду:
Колонки, которые выводит программа очень похожи на ps:
- PID - идентификатор процесса;
- USER - имя пользователя, от имени которого выполняется процесс;
- PR - приоритет планировщика, установленный для процесса;
- NI - рекомендуемый приоритет процесса. Это значение можно менять, может не совпадать с реальным приоритетом планировщика;
- VIRT - всё, что находится в памяти, используется или зарезервировано для использования;
- RES - всё, что находится в оперативной памяти и относится к процессу. Расшифровывается как Resident Memory Size, указывается в килобайтах;
- SHR - часть памяти из RES, которую занимают ресурсы, доступные для использования другим процессам. Расшифровывается - Shared Memory Size.
- S - состояние процесса: D - ожидает завершения операции, R - запущен, S - спит, T - остановлен, t - остановлен отладчиком, Z - зомби;
- %CPU - процент использования ресурсов процессора;
- %MEM - процент использования ресурсов оперативной памяти на основе колонки RES;
- TIME - обще процессорное время, которое процесс использовал с момента запуска;
- COMAND - команда, с помощью которой был запущен процесс.
Для того чтобы сделать вывод программы цветным, нажмите Z:
Чтобы вывести дерево процессов Linux нажмите сочетание клавиш Shift+V:
Для отображения потоков нажмите Shift + H:
Если вам недостаточно стандартных полей с информацией о процессах, вы можете нажать Shift + F и выбрать дополнительные поля, которые надо отображать. Для выбора или удаления поля используйте пробел:
3. Утилита htop
Это ещё более мощная утилита для просмотра запущенных процессов в Linux. Пользоваться ею намного удобнее. Здесь поддерживаются не только горячие клавиши, но и управление мышью. А ещё она выводит всё в цвете, поэтому смотреть на данные намного приятнее. Для установки программы выполните:
sudo apt install htop
Для того чтобы запустить выполните в терминале:
Колонки, которые вы увидите в выводе программы, аналогичны тем, что доступны в top, поэтому я не буду рассматривать их здесь отдельно. Для настройки выводимых данных нажмите кнопку F2, затем перейдите в раздел Display Options:
Здесь надо отметить Tree view для вывода списка процессов в виде дерева, а также снять отметки с пунктов Hide threads. для отображения потоков. Здесь есть как потоки пространства пользователя userland process threads, так и потоки пространства ядра - kernel threads. Теперь всё это будет отображаться:
Для того чтобы настроить какие колонки будут отображаться используйте пункт меню Columns:
Тут вы можете выбрать какие колонки отображать, а какие нет, а также можете настроить их порядок.
4. Программа Gnome Monitor
Вы можете смотреть запущенные процессы не только в терминале, но и в графическом интерфейсе. Для этого можно использовать утилиту Gnome Monitor. У неё намного меньше возможностей, по сравнению даже с ps, но зато у неё есть графический интерфейс. Вы можете запустить программу из главного меню системы:
По умолчанию утилита отображает только процессы текущего пользователя. Если вы хотите получить все процессы кликните по иконке бутерброда и выберите Все процессы:
Теперь программа отображает все запущенные процессы Linux в системе. Здесь вы можете выполнять поиск по процессам, завершать их и многое другое. Но потоков и дерева процессов программа не показывает.
5. Утилита atop
Эта программа тоже позволяет посмотреть процессы в Linux , но немного в другом ключе. Утилиту больше интересует сколько тот или иной процесс потребляет ресурсов системы. Утилита даже может показывать потребление процессами пропускной способности диска и сети, но для этого ей необходим специальный патч ядра. Для установки программы в Ubuntu выполните:
sudo apt install atop
Затем запустите её:
Вот основные колонки, которые выводит утилита и их значения:
- PID - идентификатор процесса;
- CID - идентификатор контейнера, используется для контейнеров Docker;
- SYSCPU - время, потраченное процессом на выполнение в пространстве ядра;
- USRCPU - время, потраченное процессом на выполнение в пространстве пользователя;
- VGROW - увеличение использования памяти колонки VIRT за последний период;
- RGROW - увеличение использования памяти колонки RSS за последний период;
- ST - статус процесса, N - новый, E - завершенный, S и С - процесс завершен принудительно с помощью сигнала;
- EXC - код выхода или код сигнала, которым был завершен процесс;
- THR - общее количество потоков в этом процессе;
- S - состояние процесса, аналогично описанному для top;
- CPUNR - номер ядра процессора, на котором запущен основной поток процесса;
- CPU - процент использования ресурсов процессора;
- CMD - команда, которой была запущена программа;
- MEM - процент использования памяти;
Для того чтобы включить отображение потоков процесса нажмите y:
Для просмотра информации о памяти нажмите m, если хотите вернутся обратно, нажмите g:
Выводы
В этой статье мы разобрали самые основные способы посмотреть список процессов в Linux, как видите есть простые способы, но есть и более сложные и информативные. Какими способами вы пользуетесь чаще всего? Напишите в комментариях!
Читайте также: