Чем больше вы будете использовать командную строку, тем больше различных программ вам встретятся, а многие из них станут повседневными инструментами. Несмотря на огромное разнообразие таких программ, принципы их взаимодействия с пользователем практически не отличаются. Если в GUI (Graphical User Interface — графический интерфейс) можно взять любую незнакомую программу, запустить её, почитать названия пунктов меню, потыкать на разные кнопки и получить какой-нибудь результат, то в 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
У команд бывают аргументы и опции (их также называют флагами). Например, в команде 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, ведь теперь это аргумент.
Опции указываются слева от аргументов, но иногда бывают ситуации, что они используются справа, такое чаще встречается в сложных утилитах с вложенными командами.Иногда сложно понять такую запись: -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 может либо произносить текст из файла, либо произносить строчку, переданную как аргумент, но не то и другое одновременно. Бывают и другие вариации описания способов вызова: значение по умолчанию, выбор из конкретных элементов, отрицание.
Теперь вы знаете общие принципы и как смотреть документацию, далее дело за экспериментами.