Команды оболочки Bash в Linux
20.12.2021Программы мониторинга
Одна из самых сложных задач системного администратора Linux — отслеживать, что работает в системе, особенно сейчас, когда графические рабочие столы используют несколько программ только для создания одного рабочего стола. В системе всегда работает много программ.
К счастью, доступно несколько инструментов командной строки, которые могут облегчить вам жизнь.
Заглядывать в процессы
Когда программа запускается в системе, она называется процессом. Чтобы изучить эти процессы, вы должны познакомиться с командой ps, швейцарским армейским ножом утилит. Он может предоставить много информации обо всех программах, запущенных в вашей системе.
К сожалению, такая надежность влечет за собой сложность — в виде множества параметров — что делает команду ps, вероятно, одной из самых сложных для освоения команд. Большинство системных администраторов находят подмножество этих параметров, которые предоставляют нужную им информацию, и затем придерживаются только их.
Тем не менее, основная команда ps не предоставляет такой большой информации:
$ ps
PID TTY TIME CMD
3081 pts/0 00:00:00 bash
3209 pts/0 00:00:00 ps
$
По умолчанию команда ps показывает только процессы, принадлежащие текущему пользователю и запущенные на текущем терминале. В этом случае у нас была запущена только наша оболочка Bash (помните, что оболочка — это просто еще одна программа, работающая в системе) и, конечно же, сама команда ps.
Базовые выходные данные показывают идентификатор процесса (PID) программ, терминал (TTY), с которого они работают, и время ЦП, которое процесс использовал.
Сложная особенность команды ps (и та часть, которая делает ее такой сложной) заключается в том, что когда-то существовало две ее версии. Каждая версия имела свой собственный набор параметров командной строки, управляющих тем, какую информацию она отображала и как. Недавно разработчики Linux объединили два формата команд ps в одну программу ps (и, конечно же, добавили свои собственные штрихи).
Команда GNU ps, используемая в системах Linux, поддерживает три различных типа параметров командной строки:
- Параметры в стиле Unix, которым предшествует тире
- Параметры в стиле BSD, которым не предшествует тире
- Длинные параметры GNU, которым предшествует двойной дефис
Параметры в стиле Unix
Параметры в стиле Unix возникли из исходной команды ps, которая работала в системах Unix AT&T, изобретенных Bell Labs. Эти параметры показаны в Таблице снизу
Параметры | Описание |
-A | Показать все процессы. |
-N | Показывать противоположность указанным параметрам. |
-a | Показать все процессы, кроме заголовков сеансов и процессы без терминала. |
-d | Показать все процессы, кроме заголовков сеансов. |
-e | Показать все процессы. |
-C cmslist | Показать процессы, содержащиеся в списке cmdlist. |
-G grplist | Показать процессы с идентификатором группы, указанным в grplist. |
-U userlist | Показать процессы, принадлежащие идентификатору пользователя, указанному в userlist. |
-g grplist | Показать процессы по сеансам или по идентификатору группы, содержащемися в grplist. |
-p pidlist | Показать процессы с PID в списке pidlist. |
-s sesslist | Показать процессы с идентификатором сеанса в списке sesslist. |
-t ttylist | Показать процессы с идентификатором терминала в списке ttylist. |
-u userlist | Отображение процессов по эффективному идентификатору пользователя в списке userlist. |
-F | Используйте дополнительный полный вывод. |
-O format | Отображение определенных столбцов в формате списка вместе со столбцами по умолчанию. |
-M | Отображение информации о безопасности процесса. |
-c | Показать дополнительную информацию планировщика о процессе. |
-f | Отображение полноформатного списка. |
-j | Показать информацию о работе. |
-l | Показать длинный список. |
-o format | Отображать только определенные столбцы, перечисленные в формате. |
-y | Не показывать флаги процесса. |
-Z | Отображение информации контекста безопасности |
-H | Отображение процессов в иерархическом формате (с отображением родительских процессов). |
-n namelist | Определите значения, которые будут отображаться в выходном столбце WCHAN. |
-w | Используйте широкий выходной формат для отображения неограниченной ширины. |
-L | Показать потоки процесса. |
-V | Вывести версию ps. |
Ключ к использованию команды ps — не запоминать все доступные параметры, а только те, которые вы считаете наиболее полезными. Большинство системных администраторов Linux имеют свои собственные наборы часто используемых параметров, которые они запоминают для извлечения соответствующей информации. Например, если вам нужно увидеть все, что работает в системе, используйте комбинацию параметров -ef (команда ps позволяет комбинировать такие параметры):
В этом примере используются два параметра: параметр -e, который показывает все процессы, запущенные в системе и параметр -f, который расширяет вывод, чтобы показать несколько полезных столбцов информации:
UID: пользователь, ответственный за запуск процесса.
PID: идентификатор процесса.
PPID: PID родительского процесса (если процесс запущен другим процессом)
C: загрузка процессора на протяжении всего процесса
STIME: системное время, когда процесс начался.
TTY: терминал, с которого был запущен процесс.
TIME: совокупное время ЦП, необходимое для работы процесса.
CMD: имя запущенной программы.
Это дает разумный объем информации, который хотели бы видеть многие системные администраторы. Для получения дополнительной информации вы можете использовать параметр -l, который производит вывод в длинном формате:
Обратите внимание на дополнительные столбцы, которые появляются при использовании параметра -l:
F: Системные флаги, присвоенные процессу ядром
S: Состояние процесса (O = запущен на процессоре; S = спит; R = можно запустить, ожидает запуска; Z = зомби, процесс завершен, но родительский элемент недоступен; T = процесс остановлен)
PRI: Приоритет процесса (более высокие числа означают более низкий приоритет)
NI: Хорошее значение, используемое для определения приоритетов.
ADDR: Адрес памяти процесса.
SZ: Приблизительный объем пространства подкачки, необходимого, если процесс был выгружен
WCHAN: адрес функции ядра, в которой процесс находится в спящем режиме.
Параметры в стиле BSD
Теперь, когда вы ознакомились с параметрами Unix, давайте взглянем на параметры в стиле BSD. Распространение программного обеспечения Беркли (BSD) было версией Unix, разработанной (конечно же) в Калифорнийском университете в Беркли. У нее было много тонких отличий от системы Unix AT&T, что спровоцировало множество войн Unix на протяжении многих лет. Версия BSD параметров команды ps показана в Таблице снизу:
Параметры | Описание |
T | Показать все процессы, связанные с этим терминалом. |
a | Показать все процессы, связанные с любым терминалом. |
g | Показать все процессы, включая заголовки сеансов. |
r | Показывать только запущенные процессы. |
x | Показать все процессы, даже те, которым не назначено оконечное устройство. |
U userlist | Показать процессы, принадлежащие идентификатору пользователя, указанному в списке пользователей. |
p pidlist | Показать процессы с PID, указанным в списке pidlist. |
t ttylist | Показать процессы, связанные с терминалом, перечисленным в ttylist. |
O format | Перечислите определенные столбцы в формате, который будет отображаться вместе со стандартными столбцами. |
X | Отображение данных в регистровом формате. |
Z | Включите в вывод информацию о безопасности. |
j | Показать информацию о работе |
l | Используйте длинный формат. |
o format | Отображать только столбцы, указанные в формате. |
s | Используйте формат сигнала. |
u | Используйте формат, ориентированный на пользователя. |
v | Используйте формат виртуальной памяти. |
N namelist | Определите значения для использования в столбце WCHAN. |
O order | Определите порядок отображения информационных столбцов. |
S | Суммируйте числовую информацию, такую как использование ЦП и памяти, для дочерних процессов в родительский процесс. |
c | Отобразите истинное имя команды (имя программы, использованной для запуска процесса). |
e | Отобразите все переменные среды, используемые командой. |
f | Отображение процессов в иерархическом формате, показывающее, какие процессы какие процессы запустили. |
h | Не отображать информацию заголовка. |
k sort | Определите столбцы, которые будут использоваться для сортировки вывода. |
n | Используйте числовые значения для идентификаторов пользователей и групп, а также информацию WCHAN. |
w | Обеспечьте широкий вывод для более широких терминалов. |
H | Отображайте потоки, как если бы они были процессами. |
m | Отображайте потоки, как если бы они были процессами. |
L | Список всех спецификаторов формата |
V | Вывести версию ps |
Как видите, существует много совпадений между типами параметров Unix и BSD. Большую часть информации, которую вы можете получить от одного, вы можете получить и от другого. В большинстве случаев вы выбираете тип параметра в зависимости от того, какой формат вам удобнее (например, если вы привыкли к среде BSD до использования Linux).
Когда вы используете параметры в стиле BSD, команда ps автоматически изменяет вывод для имитации формата BSD. Вот пример использования параметра l:
Обратите внимание, что хотя многие выходные столбцы такие же, как и при использовании параметров в стиле Unix, есть несколько других:
- VSZ: Размер процесса в памяти в килобайтах.
- RSS: Физическая память, используемая процессом, которая не выгружается.
- STAT: Многосимвольный код состояния, представляющий текущее состояние процесса.
Многим системным администраторам нравится параметр l в стиле BSD, потому что он создает более подробный код состояния для процессов (столбец STAT). Многосимвольный код определяет, что именно происходит с процессом, более точно, чем односимвольный вывод в стиле Unix.
Первый символ использует те же значения, что и выходной столбец S в стиле Unix, показывая, когда процесс находится в спящем, запущенном или ожидающем состоянии. Следующие символы дополнительно определяют статус процесса:
<: Процесс выполняется с высоким приоритетом.
N: Процесс выполняется с низким приоритетом
s:Процесс является лидером сеанса.
l:Процесс многопоточный.
+:Процесс идет на переднем плане.
Из простого примера, показанного ранее, вы можете видеть, что команда bash спит, но она является лидером сеанса (это основной процесс в моем сеансе), тогда как команда ps выполняется в системе на переднем плане.
Длинные параметры GNU
Наконец, разработчики GNU внесли свои собственные штрихи в новую улучшенную команду ps, добавив еще несколько опций в набор параметров. Некоторые из длинных параметров GNU копируют существующие параметры стиля Unix или BSD, тогда как другие предоставляют новые возможности. Таблица снизу перечисляет доступные длинные параметры GNU.
Параметр | Описание |
—deselect | Показать все процессы, кроме перечисленных в командной строке. |
—Group grplist | Показать процессы, идентификатор группы которых указан в grplist. |
—User userlist | Показать процессы, чей идентификатор пользователя указан в списке пользователей. |
—group grplist | Показать процессы, эффективный идентификатор группы которых указан в grplist. |
—pid pidlist | Показать процессы, идентификатор процесса которых указан в списке pidlist. |
—ppid pidlist | Показать процессы, идентификатор родительского процесса которых указан в списке pidlist. |
—sid sidlist | Показать процессы, чей идентификатор сеанса указан в sidlist. |
—tty ttylist | Показать процессы, чей идентификатор оконечного устройства указан в ttylist. |
—user userlist | Показать процессы, эффективный идентификатор пользователя которых указан в списке пользователей. |
—format format | Отображать только столбцы, указанные в формате. |
—context | Показать дополнительную информацию о безопасности. |
—cols n | Установите ширину экрана в n столбцов. |
—columns n | Установите ширину экрана в n столбцов. |
—cumulative | Включите информацию о остановленном дочернем процессе. |
—forest | Отображение процессов в иерархическом списке с указанием родительских процессов. |
—headers | Повторяйте заголовки столбцов на каждой странице вывода. |
—no-headers | Не отображать заголовки столбцов |
—lines n | Установите высоту экрана на n строк. |
—rows n | Установите высоту экрана на n строк. |
—sort order | Определите столбцы, которые будут использоваться для сортировки вывода. |
—width n | Установите ширину экрана в n столбцов. |
—help | Отобразите справочную информацию. |
—info | Показать отладочную информацию |
—version | Вывести версию программы ps |
Вы можете комбинировать длинные параметры GNU с параметрами в стиле Unix или BSD, чтобы настроить отображение. Одна интересная особенность длинных параметров GNU, которая нам действительно нравится, — это параметр —forest. Он отображает информацию об иерархическом процессе, но использует символы ASCII для рисования симпатичных диаграмм:
Этот формат упрощает отслеживание дочерних и родительских процессов!