Синтаксис команд в CLI
Справка составлена с учетом POSIX-стандарта IEEE Std 1003.1-2024. Стандарт носит рекомендательный характер, допускает отклонения ради улучшения пользовательского опыта, а также предполагает вариативность некоторых обозначений. В связи с этим возможны расхождения в терминалогии и синтаксисе у разных программ.
Условные обозначения
В стандарте POSIX любые элементы команды обобщенно назвают аргументами. Для описания условных обозначений достаточно этого термина, а более подробно терминалогия рассмотрена ниже.
Обязательный аргумент
Обязательные аргументы в синтаксисе утилиты пишутся без скобок, как слово или группа слов.
Необязательный аргумент
Необязательные аргументы в синтаксисе утилиты заключаются в квадратные скобки [ ]. Их не нужно указывать в реальных командах.
Экранирование фразы
Для обозначения аргумента фразой используют угловые кавычки или нижнее подчеркивание:
<длинное название элемента>длинное_название_элемента
Их не нужно указывать в реальных командах.
Взаимоисключающие аргументы
Для обозначения взаимоисключающих аргументов используют запись через вертикальную черту:
аргумент_1|аргумент_2
Массив аргументов
Для обозначения массива используют многоточие: аргумент.... Это значит, что аргументы должны быть записаны друг за другом через пробел.
Массив аргументов, но один обязательный
Для этого случая используют конструкцию: аргумент_Х [аргумент_Х...].
Это значит, что обязательно нужно указать один аргумент_Х и опционально можно указать еще несколько.
Синтаксис POSIX-стандарта
В стандарте синтаксис выглядит следующим образом:
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...]...]]