Перейти к основному содержимому
Синтаксис команд в CLI

Синтаксис команд в CLI

Справка составлена с учетом POSIX-стандарта IEEE Std 1003.1-2024. Стандарт носит рекомендательный характер, допускает отклонения ради улучшения пользовательского опыта, а также предполагает вариативность некоторых обозначений. В связи с этим возможны расхождения в терминалогии и синтаксисе у разных программ.

Условные обозначения

В стандарте POSIX любые элементы команды обобщенно назвают аргументами. Для описания условных обозначений достаточно этого термина, а более подробно терминалогия рассмотрена ниже.

примечание

Обязательный аргумент

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

примечание

Необязательный аргумент

Необязательные аргументы в синтаксисе утилиты заключаются в квадратные скобки [ ]. Их не нужно указывать в реальных командах.

примечание

Экранирование фразы

Для обозначения аргумента фразой используют угловые кавычки или нижнее подчеркивание:

  • <длинное название элемента>
  • длинное_название_элемента

Их не нужно указывать в реальных командах.

примечание

Взаимоисключающие аргументы

Для обозначения взаимоисключающих аргументов используют запись через вертикальную черту:

аргумент_1|аргумент_2

примечание

Массив аргументов

Для обозначения массива используют многоточие: аргумент.... Это значит, что аргументы должны быть записаны друг за другом через пробел.

примечание

Массив аргументов, но один обязательный

Для этого случая используют конструкцию: аргумент_Х [аргумент_Х...].

Это значит, что обязательно нужно указать один аргумент_Х и опционально можно указать еще несколько.

Синтаксис POSIX-стандарта

В стандарте синтаксис выглядит следующим образом:

utility_name [-a] [-b] [-c option_argument] [-d|-e] [-f [option_argument]] [operand...]
utility_nameкоманда, повторяющая название утилиты
[-a] [-b]перечень совместимых опций
[-c option_argument]опция с обязательным аргументом
[-d|-e]взаимоисключающие опции
[-f [option_argument]]опция с обязательным аргументом
[operand...]одна или несколько операнд

Элементы синтаксиса

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

команда [опции] [аргументы]

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

Фактически некоторые из них являются синонимами или обобщениями.

Утилиты, команды и подкоманды

Утилита — это непосредственно программное обеспечение.

Команда — это первый элемент в строке, содержащий имя утилиты и объявляющий намерение пользователя вызвать утилиту. В стандарте POSIX не используется этот термин и упоминается только utility_name. Иногда командой называют готовую строку вместе с необходимыми опциями и аргументами для выполнения функции. Иногда в синтаксисе утилит упоминается термин command, который фактически означает подкоманду внутри большой сложной утилиты, например в синтаксисе parted.

Подкоманда — это часть команды, которая в сложных утилитах указывает на конкретный модуль. Например, Podman фактически состоит из нескольких утилит и имеет настолько разветвленную функциональность, что его синтаксис выражается через подкоманды.

Аргументы и параметры

Аргументы в терминах POSIX — это данные и значения, которые необходимы для работы утилиты. Это обобщенное название всех элементов, дополняющих команду: опции, аргументы опций, операнды. Наиболее часто под аргументом подразумевают операнд или аргумент опции.

Параметр в терминах POSIX — это синоним аргумента. Этот термин чаще использую для обозначения конкретной сущности, которую нужно передать в аргументе.

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

sudo parted <устройство> mklabel <стиль разметки>

# или

sudo parted устройство mklabel стиль_разметки

# пример

sudo parted /dev/sda mklabel gpt

Опции, ключи и флаги

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

Аргумент опции — это данные, которые требуются для использования опций. В зависимости от обязательности аргумента для работы опции они обозначаются в синтаксе по-разному.

Короткие опции, не требующие аргумента и не взаимоисключающие друг друга, чаще всего могут группироваться:

-a -b равнозначно -ab

Эта функция может не работать в программах, использующих некоторые современные парсеры строки.

Взаимоисключающие опции

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

Способ 1: взаимоисключающие опции указываются через вертикальную черту.

# опции -d и -e взаимоисключающие

utility_name [-d|-e]

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

# опции -d и -e взаимоисключающие, а операнд применим только совместно с опцией -d

utility_name [-d] [operand...]
utility_name [-e]

Обязательные аргументы заключаются в единые скобки вместе с опцией, в то время как необязательные берутся в дополнительные скобки:

[-c option_argument]     # опция с обязательными аргументом

[-f [option_argument]] # опция с необязательным аргументом

Операнд, позиционные аргументы и параметры

Операнд — это аргумент утилиты, который указывается после всех опций по рекомендации POSIX. Некоторые утилиты допускают указание операнда в других позициях — например, перед всеми опциями.

Операнды также называют позиционными аргументами или позиционными параметрами.

Примером операнда может быть устройство для разметки при работе с утилитой fdisk:

fdisk [options] device

Для сравнения, другая утилита разметки диска parted ожидает указание устройства до указания команды:

parted [options] [device [command [options...]...]]