ps (processes status — статус процессов) — это встроенная утилита Unix/Linux для просмотра информации, касающейся выбора запущенных процессов в системе: она считывает эту информацию из виртуальных файлов в файловой системе /proc. Это одна из важных утилит для системного администрирования, особенно в рамках мониторинга процессов, чтобы помочь вам понять, что происходит в системе Linux.
Программа ps имеет множество опций для манипулирования выходными данными, однако вы найдёте небольшое количество из них практически полезными для ежедневного использования.
Утилита ps выводит снимок процессов на вашем компьютере Linux. Вы сможете найти процессы по имени, пользователю или даже терминалу с таким количеством деталей, сколько вам нужно. В этой статье подготовлено множество примеров использования ps.
Управление процессами в Linux
Сердцем всех Linux и Unix-подобных операционных систем является ядро. Среди его многочисленных обязанностей — распределение системных ресурсов, таких как оперативная память и процессорное время. Они должны выполняться в режиме реального времени, чтобы все запущенные процессы получали свою справедливую долю в соответствии с приоритетом каждой задачи.
Инстасамка помыла playstation 4 Олега …
Иногда задачи могут блокироваться, или зацикливаться, или перестать отвечать по другим причинам. Или они могут продолжать работать, но сожрать слишком много процессорного времени или оперативной памяти, или вести себя каким-то похожим антисоциальным образом. Иногда задачи должны быть убиты для сохранения стабильной работы системы. Разумеется, первых шаг заключается в идентификации проблемного процесса.
Но, возможно, у вас вообще нет проблем с задачами или производительностью. Возможно, вам просто любопытно, какие процессы выполняются на вашем компьютере, и вы хотели бы заглянуть под капот операционной системы Linux. Команда ps удовлетворяет обоим этим требованиям. Она даёт вам снимок того, что происходит внутри вашего компьютера «прямо сейчас».
ps достаточно гибка, чтобы предоставить вам именно ту информацию, которая вам нужна, именно в том формате, который вам нравится. На самом деле, у ps очень много опций. Опции, описанные здесь, будут соответствовать большинству обычных потребностей. Если вы хотите изучить команду ps ещё глубже, то знакомство с командой ps в этой статье и примеры использования ps облегчат вам восприятие справочной страницы.
Программа для показа процессов в Linux
Самый простой способ использовать ps — запустить её без параметров:
ps
ps покажет список процессов в данном терминале.
В выводе присутствует четыре столбца:
- PID: идентификационный номер процесса.
- TTY: имя консоли, на которой пользователь выполнил вход.
- TIME: количество времени центрального процессора, которое потребил процесс.
- CMD: имя команды, которая запустила процесс
Как увидеть все процессы в Linux
Видео-уроки Фотошопа для начинающих. Урок #1: «Как начать работать в Фотошопе»
Добавление опции -e (выбрать все процессы) сделает так, что ps перечислит процессы, которые были запущены всеми пользователями, а не только пользователем, который запускает команду ps. Поскольку это будет длинный список, то вы можете добавить команду less.
ps -e | less
Список процессов с возможностью прокрутки в команде less:
Теперь записей о процессах намного больше, но мы видим те же четыре столбца, что и раньше. Вопросительный знак (?) в столбце TTY означает, что процесс запускался не из окна терминала.
Отображение иерархии процессов (дерево процессов в Linux)
Если вы видите, какие процессы запустили другие процессы, то иногда это может помочь выяснить проблему или определить конкретный процесс. Для этого мы используем опцию -H.
ps -eH | less
Отступы указывают, какие процессы являются родителями каких других процессов.
Чтобы добавить немного ясности, мы можем попросить ps добавить несколько линий ASCII и нарисовать иерархию в виде дерева. Это можно сделать опцией —forest.
ps -e —forest | less
Это позволить проще отслеживать, какие процессы являются родителями других процессов.
Как напечатать дерево определённого процесса
Вы можете получить дерево процессов только нужной вам программы следующим образом (замените sshd на интересующий вас процесс):
ps -f —forest -C sshd
ps -ef —forest | grep -v grep | grep sshd
Об опции -C будет рассказано далее в этой статье.
Фильтрация вывода ps по определённым строкам (по имени команды, например)
Вы можете направить вывод из ps через grep и найти нужные записи о процессах по любым строкам. Здесь мы ищем записи, соответствующие поисковому запросу «firefox»:
ps -e | grep firefox
В этом случае выходные данные представляют собой одну запись для интересующего нас процесса. Конечно, если бы мы запустили несколько экземпляров Firefox, в списке было бы более одного элемента.
Больше столбцов в выводе ps
Чтобы добавить дополнительные столбцы к выводу, используйте параметр -f (полный формат).
ps -ef | less
Дополнительный набор столбцов включён в вывод ps.
Добавлены следующие новые столбцы:
- UID: идентификатор пользователя владельца этого процесса.
- PPID: идентификатор родительского процесса.
- C: Количество детей, которые есть у процесса.
- STIME: Время начала. Время, когда процесс был запущен.
Используя опцию -F (дополнительный полный формат), мы можем получить ещё больше столбцов:
ps -eF | less
Если у вас маленькое окно терминала, то столбцы, которые мы получаем в этот раз, требуют прокрутки экрана в сторону, чтобы показать их все. Нажатие клавиши «Стрелка вправо» смещает дисплей влево.
Теперь добавились следующие столбцы:
- SZ: размер страниц ОЗУ образа процесса.
- RSS: резидентный размер набора. Это не подкачанная физическая память, используемая процессом.
- PSR: процессор, которому назначен процесс.
Нужно ли указывать дефис перед опциями ps
В некоторых примерах вы можете увидеть использование ps с опциями без дефиса или с длинными вариантами написания опций в стиле GNU. Для совместимости, ps поддерживает все три формата. Опции без дефиса — это стиль BSD и значение опций с дефисом и без может быть различным!
Пример показа процессов в формате BSD:
ps au # ИЛИ ps axu
В этой команде значение опций следующее:
- u — ориентированный на пользователя формат
- a — убирает ограничение «только свои процессы»
- x — убирает ограничение «только процессы с терминалом»
Проще говоря, если использовать вместе a и x, то будут показаны все процессы.
Нужно быть аккуратным, и не забывать ставить дефис если вы используете опции UNIX, поскольку в случае неопределённости ps будет пытаться трактовать в разных вариантах. В этой инструкции кроме рассмотренного примера везде используются опции UNIX.
Поиск процессов по идентификатору процесса
Как только вы нашли идентификатор процесса для интересующего вас процесса, вы можете использовать его с командой ps, чтобы вывести подробную информацию об этом процессе. Для этого используйте спользуйте параметр -p после которого укажите число — идентификатор процесса:
ps -p 3403
Можно указывать более чем один идентификатор процесса, перечислив их через запятую или через пробел.
Поиск процессов по имени команды
Опция -C КОМАНДА позволяет вам искать процесс, используя имя команды. То есть имя команды, которая запустила процесс. Это несколько отличается от строки команды, которая может включать имена путей и параметры или опции.
ps -F -C soffice.bin
Выведена информация только о процессе, запущенным указанной командой:
Процессов может быть несколько если запущено множество экземпляров данной команды:
ps -F -C bash
Как увидеть потоки процесса
Чтобы вывести все потоки процесса, используйте флаг -H. Опция -L приведёт к показу столбца LWP (light weight process — процесс с малым весом), а также столбца NLWP (number of light weight process — число процессов с малым весом).
ps -fL -C httpd
Как увидеть процессы определённого пользователя
Чтобы увидеть процессы, принадлежащие конкретному пользователю, используйте опцию -u СПИСОК ПОЛЬЗОВАТЕЛЕЙ:
ps -u mial
Отображаются процессы, принадлежащие учётной записи пользователя mial.
Как вывести все процессы запущенные пользователем root
Это частный случай показа процессов определённого пользователя.
Команда ниже позволяет вам просматривать каждый процесс, работающий с привилегиями пользователя root (действительный и эффективный идентификатор) в формате пользователя.
ps -U root -u root
Просмотр групповых процессов
Если вы хотите перечислить все процессы, принадлежащие определённой группе (реальный идентификатор группы (RGID) или имя), введите:
ps -fG www-data #ИЛИ ps -fG 33
Чтобы вывести список всех процессов, принадлежащих эффективному имени группы (или сеанса), введите.
ps -fg www-data
Листинг процессов по терминалам
Чтобы увидеть процессы, связанные с TTY, используйте опцию -t УКАЖИТЕ TTY. При использовании без номера TTY опция -t сообщает о процессах, связанных с текущим окном терминала.
ps -t 1
Все перечисленные процессы связаны с pts/1.
Выбор столбцов для отображения
С опцией -o ФОРМАТ вы можете выбрать, какие столбцы вы хотите включить в вывод ps. Столбцы нужно указывать по имени. В руководстве по ps:
man ps
вы найдёте длинный список имён столбцов в разделе STANDARD FORMAT SPECIFIERS.
В следующем примере мы выводим потребление процессом времени центрального процессора (pcpu), потребление процессором памяти (pmem) и запустившая его команда вместе с опциями (args):
ps -e -o pcpu,pmem,args | less
Обратите внимание, что опция -o не добавляет столбцы в стандартным, а выводит только запрошенные поля.
Сортировка вывода по столбцам
Вы можете отсортировать вывод, используя опцию —sort. Давайте отсортируем вывод по столбцу CPU:
ps -e -o pcpu,pmem,args —sort -pcpu | less
Дефис «-» означает сортировку от большего к меньшему.
Чтобы увидеть десять самых ресурсоемких процессов, передайте вывод через команду head:
ps -e -o pcpu,args,args —sort -pcpu | head -10
Утилита PS в Linux для вывода процессов на экран
Серверы с предустановленной ОС семейства Linux идут без графического интерфейса. Для работы и настройки используют терминал. Расскажем про одну из утилит, которая отвечает за просмотр процессов. В качестве примера рассмотрим Ubuntu Server 18.04.
Что такое PS
Системная утилита PS отвечает за отображение процессов на экране пользователя. Совместно с ней используются команды more, less и grep для фильтрации.
PS доступна в любом дистрибутиве серверной ОС Linux. Запускается через команду PS:
Скриншот №1. Утилита PS.
Где первый столбец означает идентификатор процесса (PID), второй – его наименование. Третий отображает процессорное время, затраченное сервисом, а четвертый – приложение, которое его запустило.
Синтаксис PS
Команда работает со следующими дополнительными ключами.
Ключ –e (-A). Выводит на экран перечень всех процессов, которые запущены на сервере.
Опция –d покажет системному администратору все процессы, за исключением так называемых «лидеров». Лидерство – это когда один процесс запускает другие. При запуске процесса с данным ключом пользователь не увидит первый сервис, но ему покажут зависимые от него.
Ключ –N меняет значения опции с точностью до наоборот. Возьмем для примера предыдущий пункт. Если необходимо увидеть только лидеров, то после ключа D вводим N.
Для отображения сервисов, которые запущены в текущей терминальной сессии, используем букву T, а для просмотра только работающих в данный момент – r.
Сортировка
Рассмотрим возможности утилиты PS как фильтра. Если требуется отобразить информацию о конкретном сервисе, то указываем его идентификатор (PID).
Важно! Если требуется показать несколько процессов, то указываем PID каждого через запятую.
Администраторы не запоминают идентификаторы каждого процесса, но помнят наименования. Соответственно, для поиска конкретного сервиса указываем имя через специальный ключ.
Другой способ сортировка – использовать имя группы. Для этого используется ключ –G или –Group.
ps —Group users
Альтернативный вариант: совместить поиск по идентификатору группы. За это отвечает опция –g либо –group.
Важно! Ключи –G и –g отличаются только написанием: заглавная и прописная, но они выполняют разные функции.
Чтобы просмотреть перечень процессов, которые запустил конкретный пользователь, используем функцию –U.
ps –U name_user
, где user_name – учетное имя, для которого проводится выборка.
Важно! Если требуется отображать процессы, которые запустил пользователь, то берем его имя в прямые кавычки.
Дополнительные возможности
Как было показано выше, PS по умолчанию выводит краткую информацию о процессах. Чтобы получить подобное описание, используем ключ –eF.
Добавится информация о размере, который забирает сервис из оперативной памяти, временной интервал работы, идентификатор учетного имени, под которым запущен процесс и другие данные.
Чтобы финализировать информацию используют ключ –sort совместно с дополнительными опциями, которые проводят сортировку по значениям, например, %mem, cp, comm и др.
ps –eF —sort
, где option – один из многочисленных ключей.
Подробная информация доступна в справочной службе команды PS.
Ключи less и more регулируют размеры страницы в терминале, т.е. позволяет смотреть под одной странице за каждое нажатие клавиши.
Команда grep отбирает данные, которые содержат определенное слово, например:
Ps –eF | grep nginx
После запуска команды в окне терминала отобразится информация о всех строках, содержащих слово nginx.
Источник: serverspace.ru
Глава 1. Начало работы с PowerShell
Я часто вижу, что выступающие на конференциях и собраниях групп пользователей уже работают с PowerShell, когда демонстрируют презентации начального уровня. Эта книга начинается с ответов на вопросы, которые задавали участники мероприятий, ранее не использовавшие PowerShell.
В частности, эта глава посвящена поиску и запуску PowerShell, а также решению некоторых первоначальных проблем, с которыми сталкиваются новые пользователи при работе с PowerShell. Обязательно ознакомьтесь с примерами, приведенными в этой главе, и выполните их на компьютере Windows 10 с лабораторной средой.
Что нужно, чтобы начать работу с PowerShell?
Все современные версии операционных систем Windows поставляются с установленной оболочкой PowerShell. Если вы используете версию, предшествующую 5.1, следует установить последнюю версию.
- Сведения об обновлении до версии PowerShell 5.1 см. в разделе Обновление существующей версии Windows PowerShell.
- Сведения об установке последней версии PowerShell см. в статье Installing Windows PowerShell.
Где найти PowerShell?
Самый простой способ найти PowerShell в Windows 10 — ввести PowerShell в строке поиска, как показано на рис. 1-1.
Обратите внимание, что на рис. 1-1 показаны четыре разных ярлыка для PowerShell. Компьютер, используемый в демонстрационных целях в этой книге, работает под управлением 64-разрядной версии Windows 10, поэтому существует 64-разрядная версия консоли PowerShell и PowerShell ISE (интегрированной среды сценариев) и 32-разрядная версия каждой из них (обозначена суффиксом (x86) на ярлыках).
Если вы работаете с 32-разрядной версией Windows 10, у вас будет только два ярлыка. У этих элементов нет суффикса (x86), но они являются 32-разрядными версиями. Если у вас установлена 64-разрядная операционная система, рекомендуется запускать 64-разрядную версию PowerShell, только если вас нет особой причины для запуска 32-разрядной версии.
Сведения о запуске PowerShell в других версиях Windows см. в статье Запуск Windows PowerShell.
Как запустить PowerShell?
В производственной среде предприятия, которую я поддерживаю, я работаю с тремя разными учетными записями пользователей Active Directory. В лабораторной среде в этой книге используются зеркальные экземпляры этих учетных записей. Я вошел на компьютер с Windows 10 в качестве пользователя домена, который не является администратором домена или локальным администратором.
Я запустил консоль PowerShell, щелкнув ярлык Windows PowerShell, как показано на рис. 1-1.
Обратите внимание, что в строке заголовка консоли PowerShell указано «Windows PowerShell», как показано на рис. 1-4. Некоторые команды выполняются нормально, но PowerShell не поддерживает управление доступом пользователей (UAC). Это означает, что оболочка не может запрашивать повышение прав для задач, требующих утверждения администратором. Выдается следующее сообщение об ошибке.
Get-Service -Name W32Time | Stop-Service
Stop-Service : Service ‘Windows Time (W32Time)’ cannot be stopped due to the following error: Cannot open W32Time service on computer ‘.’. At line:1 char:29 + Get-Service -Name W32Time | Stop-Service + + CategoryInfo : CloseError: (System.ServiceProcess.ServiceController:ServiceController) [Stop-Service], ServiceCommandException + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand
Решение этой проблемы заключается в запуске PowerShell от имени пользователя домена, который является локальным администратором. Именно так настроена моя вторая учетная запись пользователя домена. Используя принцип минимальных привилегий, эта учетная запись НЕ должна быть администратором домена или иметь повышенные привилегии в домене.
Закройте PowerShell. Перезапустите консоль PowerShell, только на этот раз щелкните правой кнопкой мыши ярлык Windows PowerShell и выберите пункт Запуск от имени администратора, как показано на рис. 1-5.
Если вы выполнили вход в Windows в качестве обычного пользователя, вам будет предложено ввести учетные данные. Я буду вводить учетные данные учетной записи пользователя, которая является пользователем домена и локальным администратором, как показано на рис. 1-6.
После повторного запуска PowerShell с правами администратора в строке заголовка должно быть указано «Администратор: Windows PowerShell», как показано на рис. 1-7.
Теперь, когда PowerShell работает с повышенными привилегиями локального администратора, управление доступом пользователей больше не будет проблемой в случае запуска на локальном компьютере команды, для выполнения которой обычно требуется запрос на повышение прав. Следует иметь в виду, что любая команда, выполняемая из этого экземпляра консоли PowerShell с повышенными привилегиями, также запускается с повышенными привилегиями.
Чтобы упростить поиск PowerShell и запускать оболочку от имени администратора, рекомендуется закрепить ее на панели задач и настроить автоматический запуск от имени администратора при каждом запуске.
Еще раз выполните поиск PowerShell, только на этот раз щелкните ее правой кнопкой мыши и выберите пункт «Закрепить на панели задач», как показано на рис. 1-8.
Щелкните правой кнопкой мыши ярлык PowerShell, который теперь закреплен на панели задач, и выберите пункт «Свойства», как показано на рис. 1-9.
Щелкните «Дополнительно», как показано в первой части рис. 1-10, установите флажок «Запуск от имени администратора», как показано во второй части рис. 1-10, а затем дважды нажмите кнопку OK, чтобы принять изменения и выйти из обоих диалоговых окон.
Вам больше никогда не придется беспокоиться о поиске PowerShell или о том, запущена ли оболочка от имени администратора или нет.
Запуск PowerShell с повышенными привилегиями для предотвращения проблем, связанных с управлением доступом пользователей, влияет только на команды, выполняемые на локальном компьютере. Он не влияет на команды, предназначенные для запуска на удаленных компьютерах.
Какую версию PowerShell я использую?
В PowerShell существует ряд автоматических переменных, в которых хранятся сведения о состоянии. Одной из этих переменных является $PSVersionTable , содержащая хэш-таблицу, которую можно использовать для вывода соответствующих сведений о версии PowerShell.
$PSVersionTable
Name Value —- —— PSVersion 5.1.19041.1 PSEdition Desktop PSCompatibleVersions BuildVersion 10.0.19041.1 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
Более новые версии Windows PowerShell распространяются в составе Windows Management Framework (WMF). Конкретная версия .NET Framework зависит от версии WMF. Сведения об обновлении до версии PowerShell 5.1 см. в разделе Обновление существующей версии Windows PowerShell.
Политика выполнения
Вопреки распространенному мнению, политика выполнения в PowerShell не является средством обеспечения безопасности. Она предназначена для предотвращения непреднамеренного выполнения сценария пользователем. Определенный пользователь может без труда обойти политику выполнения в PowerShell. В таблице 1-2 показана политика выполнения по умолчанию для текущих операционных систем Windows.
Server 2019 | Удаленно подписанная |
Server 2016 | Удаленно подписанная |
Windows 10 | С ограниченным доступом |
Любая команда PowerShell может выполняться в интерактивном режиме, независимо от настройки политики выполнения. Политика выполнения влияет только на команды, выполняемые в сценарии. Командлет Get-ExecutionPolicy используется для определения текущего параметра политики выполнения, а командлет Set-ExecutionPolicy используется для изменения политики выполнения. Рекомендуется использовать политику RemoteSigned, которая требует, чтобы предназначенные для выполнения скачиваемые сценарии были подписаны доверенным издателем.
Проверка текущей политики выполнения
Get-ExecutionPolicy
Restricted
Если для политики выполнения задано С ограниченным доступом, сценарии PowerShell вообще не запускаются. Это параметр по умолчанию для всех клиентских операционных систем Windows. Чтобы продемонстрировать проблему, сохраните следующий код как файл .ps1 с именем Stop-TimeService.ps1 .
Get-Service -Name W32Time | Stop-Service -PassThru
Эта команда выполняется в интерактивном режиме без ошибок при условии, что PowerShell запущена с повышенными правами администратора. Но при сохранении в виде файла сценария и попытке выполнить сценарий выдается ошибка.
.Stop-TimeService.ps1
.Stop-TimeService.ps1 : File C:demoStop-TimeService.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + .Stop-TimeService.ps1 + + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
Обратите внимание, что в сообщении об ошибке, приведенном в предыдущем наборе результатов, указывается точная проблема (в этой системе отключено выполнение сценариев). При выполнении в PowerShell команды, которая создает сообщение об ошибке, обязательно следует прочесть сообщение об ошибке, а не просто перезапустить команду и надеяться на ее успешное завершение.
Измените политику выполнения PowerShell на удаленно подписанную.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Execution Policy Change The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «N»):y
Обязательно прочтите предупреждение, которое отображается при изменении политики выполнения.
Кроме того, рекомендуется ознакомиться с разделом справки about_Execution_Policies, чтобы знать о влиянии изменения политики выполнения на безопасность.
Теперь, когда для политики выполнения задано значение Удаленно подписанная, сценарий Stop-TimeService.ps1 будет выполняться без ошибок.
.Stop-TimeService.ps1
Status Name DisplayName —— —- ———— Stopped W32Time Windows Time
Прежде чем продолжить, запустите службу времени Windows. В противном случае могут возникнуть непредвиденные проблемы.
Start-Service -Name w32time
Сводка
В этой главе вы узнали, как найти и запустить PowerShell, а также как создать ярлык для запуска PowerShell от имени администратора. Вы также ознакомились с политикой выполнения по умолчанию и поняли, как ее изменять.
Просмотр
- Как определить версию PowerShell, установленную на компьютере?
- Почему важно запускать PowerShell с повышенными правами администратора?
- Как определить текущую политику выполнения PowerShell?
- Чему препятствует политика выполнения PowerShell по умолчанию на клиентских компьютерах Windows?
- Как изменить политику выполнения PowerShell?
Рекомендуем прочесть
Тем, кто хочет более подробно изучить темы, описанные в этой главе, рекомендуется ознакомиться со следующими разделами справки по PowerShell.
- about_Automatic_Variables
- about_Hash_Tables
- about_Execution_Policies
В следующей главе вы узнаете о возможности обнаружения команд в PowerShell. Помимо прочих вопросов в ней будет рассматриваться обновление PowerShell, после которого разделы справки можно будет просматривать непосредственно в PowerShell, а не в Интернете.
Источник: learn.microsoft.com