Интерфейс командной строки
Представьте, что вы изучаете новую для себя программу. Вы запускаете ее, читаете названия пунктов меню, нажимаете на разные кнопки и получаете какой-нибудь результат. В этот момент вы взаимодействуете с графическим интерфейсом — так же его называют GUI или Graphical User Interface.
Но GUI — это не единственный существующий интерфейс. В этом уроке мы изучим интерфейс командной строки (CLI или Command Line Interface). Такой интерфейс может показаться непривычным, ведь в нем нет ничего, кроме названия программы.
Аргументы и опции
Чем чаще вы будете использовать командную строку, тем больше различных программ вам встретится. Многие из них станут повседневными инструментами. Например, вы часто будете пользоваться программой ls
, которая выводит на экран список файлов и директорий.
Здесь все просто. Достаточно набрать название программы и нажать Enter:
Еще мы можем посмотреть скрытые файлы и директории. В *nix-системах они начинаются с точки: .profile.
Тогда необходимо набрать ls -a
:
А если захотим посмотреть содержимое каталога Public? Тогда мы воспользуемся командой ls
с аргументом:
Некоторые программы сложно конфигурируются, поэтому их бывает трудно использовать. Посмотрим на такой неочевидный пример:
В этом уроке нам пока не нужно детально разбираться во всех подробностях таких сложных примеров. Главное — увидеть закономерности в использовании консольных программ.
Хорошая новость в том, что закономерности есть. Плохая новость — не все четко следуют им.
Практически любую команду можно дополнить двумя способами:
Способ 1 — это аргументы. Для примера рассмотрим команду ls Music
, которая содержит аргумент Music
Способ 2 — это опции, еще их иногда называют флагами. Например, команда ls -a
содержит в себе опцию -a
Опции
Поговорим подробнее об опциях. Они всегда начинаются с одного или двух дефисов. Одна из часто используемых опций для просмотра списка файлов — -l
. Она выводит дополнительную информацию по каждому файлу:
Опции можно комбинировать. Представим, что мы хотим увидеть список всех файлов, включая скрытые, причем с подробным описанием. В таком случае нужно набрать команду ls -a -l
. Можно объединить эти опции и записать ту же команду вот так:
При работе с опциями не забывайте ставить -
. Без него вы получите команду ls la
в которой la
— это аргумент, а не опция. В таком случае командная оболочка покажет содержимое директории la
.
Еще мы можем использовать опции и аргументы одновременно, хотя все зависит от программы. В случае с ls
можно использовать одновременно и то, и другое. Чтобы просмотреть полное содержимое директории Music
с информацией о каждом файле, можно набрать команду ls -la Music
:
Как видно из примера выше, опции указываются слева от аргументов. Но иногда бывают ситуации, когда они используются справа, такое чаще встречается в сложных утилитах со вложенными командами. Их мы сейчас не рассматриваем.
Иногда сложно понять подобные записи: -tupa
. Не совсем понятно, что это:
Одна опция
tupa
Четыре опции
t
,u
,p
иa
, объединенные в одну цепочку
В таких ситуациях нужно смотреть документацию соответствующей программы. Это можно сделать с помощью команды man
(сокращение от manual). Достаточно набрать man <имя команды>
— и мы попадем в режим чтения документации.
В мануале содержится описание утилиты в целом, формат ее вызова, все возможные опции, примеры вызовов и много другой полезной информации:
Попробуйте прямо сейчас посмотреть мануал программы ls
, набрав в терминале man ls
. Перемещаться внутри мануала можно так:
Промотать вперед — f (forward)
Промотать назад — b (backward)
Выход из режима просмотра — q (quit)
Еще полезен сайт explainshell. На нем можно вбить любую команду и посмотреть удобное интерактивное описание:
Варианты опций
У большинства утилит есть два варианта одной и той же опции — длинная и короткая версия. Например, в PHP есть -v
и --version
:
Длинные и короткие версии опций используются в разных ситуациях:
Когда мы работаем в терминале, важно набирать быстро — там удобны короткие опции
Когда мы пишем скрипт из разных команд, важно писать понятно — лучше использовать длинные опции. Так с первого взгляда очевидно, что означает каждая опция
Надо отметить, что обычно длинные опции предваряются двумя дефисами, но некоторые программы нарушают это правило и используют один, что вносит путаницу.
Опции, которые мы рассматривали выше, не имеют параметров. Но нередко встречаются опции, которые недостаточно просто указать.
Например, в macOS есть встроенная утилита say
. Если просто передать ей какой-то текст, то она его произнесет. Можно пойти дальше и записать произнесенный текст в файл.
Чтобы это сделать, надо указать опцию -o
и записать путь до файла:
В этом примере путь до файла — это значение опции, обычно оно указывается через пробел от самой опции.
Если значение опции содержит в себе специальные или пробельные символы, то его нужно оборачивать в кавычки, двойные или одинарные:
Некоторые программы допускают использование знака = вместо пробела:
Кроме того, say
позволяет указать входной файл, который нужно прочитать. Если он указан, то say
проигнорирует передаваемый текст как аргумент:
Теперь посмотрим на документацию программы say
, а именно в раздел SYNOPSIS. Там мы увидим все доступные возможности:
Такое подробное описание есть практически у любой утилиты. Описания построены по одному и тому же принципу:
Квадратные скобки
[]
обозначают необязательность. Например, опция-v
необязательна, то же самое касается и любых других опций этой программыВертикальная черта
|
обозначает операцию «исключающее или». Посмотрите на последний блок[-f file | string ...]
. Он означает, чтоsay
может либо произносить текст из файла, либо произносить строчку, переданную как аргумент. Сделать оба варианта одновременно не получится
Бывают и другие вариации описания способов вызова: значение по умолчанию, выбор из конкретных элементов, отрицание.
Здесь мы разобрали только самые базовые моменты, с которыми вам предстоит столкнуться. Не стоит переживать, если вы не чувствуете, что все это запомнили. Опции требуют практики и опыта, а не заучивания теории. Теперь вы понимаете общие принципы и можете смотреть документацию, далее дело за экспериментами.
Дополнительные материалы
Вопросы для самопроверки
Какой флаг использован в команде ls -lt
?
-l
-t
-lt
ls
Как еще можно записать команду ls -lta
так, чтобы не изменился смысл?
ls -l -t -a
ls -la -t
ls --lta
lslta
ls lta
ls -atl
ls -l ta
Сколько аргументов использовано в команде ls -lt /home
?
1
0
2
3