Представьте, что вы изучаете новую для себя программу. Вы запускаете ее, читаете названия пунктов меню, нажимаете на разные кнопки и получаете какой-нибудь результат. В этот момент вы взаимодействуете с графическим интерфейсом — так же его называют GUI или Graphical User Interface.
Но GUI — это не единственный существующий интерфейс. В этом уроке мы изучим интерфейс командной строки (CLI или Command Line Interface). Такой интерфейс может показаться непривычным, ведь здесь нет ничего, кроме названия программы и как ей пользоваться — непонятно.
Чем больше вы будете использовать командную строку, тем больше различных программ вам встретятся. Многие из них станут повседневными инструментами.
Например, вы часто будете пользоваться программой ls
, которая выводит на экран список файлов и директорий. Здесь все просто, достаточно набрать название программы и нажать Enter:
ls
Desktop Documents Downloads Library Movies Music Pictures Public
Но что, если мы захотим посмотреть скрытые файлы и директории (в *nix-системах они начинаются с точки, как здесь: .profile
)? Тогда необходимо набрать ls -a
:
ls -a
. .CFUserTextEncoding Desktop Downloads Movies Pictures
.. .localized Documents Library Music Public
А если захотим посмотреть содержимое каталога Public?
ls Public/
Drop Box
А теперь посмотрим более сложный пример. Использование некоторых программ может вводить в ступор тем, как они конфигурируются:
ffmpeg -i input.mp4 -vcodec libx264 -crf 30 output.mp4
Задача данного урока состоит в том, чтобы увидеть систему в использовании консольных утилит. Хорошая новость в том, что она есть. Плохая новость — не все ее четко придерживаются.
У команд бывают аргументы и опции (их также называют флагами). Например, в команде ls Music
, Music
— это аргумент, а вот в команде ls -a
, -a
— это опция. Опции всегда начинаются с одного или двух дефисов. Другая, часто используемая опция для просмотра списка файлов — -l
, она выводит дополнительную информацию по каждому файлу.
ls -l
total 0
drwx------+ 3 Guest _guest 96 Nov 21 2017 Desktop
drwx------+ 3 Guest _guest 96 Nov 21 2017 Documents
drwx------+ 3 Guest _guest 96 Nov 21 2017 Downloads
drwx------+ 26 Guest _guest 832 Nov 21 2017 Library
drwx------+ 3 Guest _guest 96 Nov 21 2017 Movies
drwx------+ 3 Guest _guest 96 Nov 21 2017 Music
drwx------+ 3 Guest _guest 96 Nov 21 2017 Pictures
drwxr-xr-x+ 4 Guest _guest 128 Nov 21 2017 Public
Опции можно комбинировать. Чтобы вывести все файлы, включая скрытые, с подробным описанием, нужно набрать ls -a -l
. Bash позволяет объединять опции и писать так ls -al
или даже так ls -la
. Обратите внимание на то, что, если вы забудете поставить -
перед опциями и получите команду ls la
, то ls
посчитает, что вы хотите посмотреть содержимое директории la
, ведь теперь это аргумент. Использование опций никак не отменяет возможность использования аргументов, хотя все зависит от программы. В случае с ls
можно использовать одновременно и то, и другое. Для просмотра полного содержимого директории Music
с информацией о каждом файле достаточно набрать ls -la Music
:
ls -la Music
total 0
drwx------+ 4 Guest _guest 128 Nov 21 2017 .
drwxr-xr-x+ 89 Guest _guest 2848 Aug 24 14:06 ..
-rw-r--r-- 1 Guest _guest 0 Nov 21 2017 .localized
drwxr-xr-x 9 Guest _guest 288 Aug 26 17:25 iTunes
Как видно из примера выше, опции указываются слева от аргументов. Но иногда бывают ситуации, когда они используются справа, такое чаще встречается в сложных утилитах со вложенными командами. Их мы сейчас не рассматриваем. Иногда сложно понять такую запись: -tupa
Это одна опция tupa
или это 4 опции по одной букве t
, u
, p
и a
, объединенные в одну цепочку? В данной ситуации нужно смотреть документацию соответствующей программы. Делается это с помощью команды man
(manual). Достаточно набрать man <имя команды>
— и мы попадем в режим чтения документации. В мануале содержится много полезной информации, например, описание утилиты в целом, формат ее вызова, все возможные опции и даже примеры вызовов.
Попробуйте прямо сейчас посмотреть мануал программы ls
, набрав в терминале man ls
. Для выхода из режима просмотра нажмите q, для просмотра вперед f (forward), назад — b (backward).
Еще полезен сайт https://explainshell.com/, в который достаточно вбить любую команду, и он покажет удобное интерактивное описание.
Вернемся к опциям. Большинство утилит имеет две версии одной и той же опции: одна из них длинная, другая — короткая. Например, -v
и --version
в PHP.
php -v
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
php --version
PHP 7.2.7 (cli) (built: Jun 22 2018 06:27:50) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
Две опции вместо одной делают исключительно для удобства. Во время работы в терминале важно набирать быстро, поэтому там удобны короткие опции. Но когда разработчик пишет скрипт, состоящий из разных команд, то предпочтительнее использовать длинные опции. Надо отметить, что обычно длинные опции предваряются двумя дефисами, но некоторые программы нарушают это правило и используют один, что вносит определенную путаницу. Длинный формат опций помогает легче понимать, что они означают. Это важно как другим людям, так и самому человеку, писавшему скрипт, когда он вернется к нему спустя время. Пока мы не касаемся скриптов, но в будущем вы убедитесь в этом сами.
Опции, которые мы рассматривали выше, не имеют параметров. Но нередко встречаются опции, которые недостаточно просто указать. В macOS есть встроенная утилита say
. Если ей передать какой-то текст, то она его произнесет (проговорит в динамики). У этой программы есть опция --output-file
(и ее короткая версия -o
), принимающая значением путь до файла. Если она указана, то say
запишет звуковой файл по указанному пути.
# Вместо -o можно написать --output-file
say -o hi.aac 'Hello, World.'
Значение опции указывается через пробел от самой опции. Если значение опции содержит в себе специальные или пробельные символы, то его нужно оборачивать в кавычки, двойные или одинарные — не важно.
say -o 'hi.aac' 'Hello, World.'
Некоторые программы допускают использование знака =
вместо пробела.
# Команда say такое не позволяет, но зато видно принцип
say -o=hi.aac 'Hello, World.'
Кроме того, say
позволяет указать входной файл, который нужно прочитать. Если он указан, то say
проигнорирует передаваемый текст (как аргумент).
# Кроме того, здесь указано каким голосом его прочитать и в какой файл записать то, что прочитано
say -v Alex -o hi -f hello_world.txt
Теперь посмотрим на документацию программы say
, а именно в раздел SYNOPSIS. Там мы увидим описание того, как ее можно вызывать:
say [-v voice] [-r rate] [-o outfile [audio format options] | -n name:port | -a device] [-f file | string ...]
Подобное описание есть практически у любой утилиты. Описания построены по одному и тому же принципу. Квадратные скобки []
обозначают необязательность. Например, опция -v
необязательна, то же самое касается и любых других опций этой программы. Вертикальная черта |
обозначает операцию «или», причем именно исключающее «или». Посмотрите на последний блок [-f file | string ...]
. Он означает, что say
может либо произносить текст из файла, либо произносить строчку, переданную как аргумент, но не то и другое одновременно. Бывают и другие вариации описания способов вызова: значение по умолчанию, выбор из конкретных элементов, отрицание.
И хотя мы разобрали не все, с чем вам предстоит столкнуться, все же остановимся, чтобы мозг окончательно не расплавился. Главное, не стоит переживать, если вы не чувствуете, что все это запомнили. Опции требуют практики и опытов, а не заучивания теории. Теперь вы понимаете общие принципы и можете смотреть документацию, далее дело за экспериментами.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт