Команды оболочки Bash в Linux

20.12.2021 Автор: Mohira Абдукаримова

Программы мониторинга

Одна из самых сложных задач системного администратора 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 для рисования симпатичных диаграмм:

Этот формат упрощает отслеживание дочерних и родительских процессов!

relojes imitacion replique montre replika klockor