Анатомия команды
Ты уже напечатал несколько команд: pwd, ls, cd Downloads, mkdir practice. Заметил, что одни команды - это одно слово, а другие - слово плюс что-то ещё через пробел? Это не случайно. У каждой команды есть строение, как у фразы есть подлежащее и дополнение.
В этом уроке разберём команду на части. Когда ты поймёшь, из чего она состоит, перестанешь бояться длинных команд из интернета - научишься читать их как предложение. А ещё научишься читать сообщения об ошибках: что компьютер пытается тебе сказать, когда что-то идёт не так.
Команда как фраза официанту
Вспомни записку в кофейне из первого урока. Когда ты говоришь официанту «принеси кофе большой без сахара», во фразе три части:
- что сделать - «принеси» (главное слово, действие);
- что именно - «кофе» (на что направлено действие);
- как именно - «большой, без сахара» (уточнения, настройки).
Команда в терминале устроена точно так же. Разберём на примере ls -l /home:
Части всегда отделяются пробелом. Именно поэтому в прошлом уроке пробел в имени папки создавал путаницу: компьютер видит пробел и думает, что началась новая часть команды.
Имя программы
Первое слово - это всегда имя программы, которую ты хочешь запустить. ls - это отдельная маленькая программа, которая умеет показывать содержимое папки. pwd - программа, которая печатает текущий путь. mkdir - программа, создающая папки.
Можно представить, что в компьютере живёт целый ящик с инструментами, и каждый инструмент - это программа со своим именем. Печатая имя, ты как бы достаёшь нужный инструмент и говоришь: «работай».
$ ls
Desktop Documents Downloads
Здесь команда состоит только из имени, без уточнений. ls просто показывает текущую папку - этого часто достаточно.
Аргументы - на что направлено действие
Аргумент - это то, на что команда должна подействовать. Чаще всего это имя файла или папки. Аргумент пишут после имени программы через пробел.
Сравни. Без аргумента ls показывает текущую папку. А если дать ей аргумент - папку /home - она покажет содержимое именно этой папки, не сходя с места:
$ ls /home
student
Команде ls сказали: «покажи не здесь, а вон там, в /home». Точно так же cd Downloads - это программа cd с аргументом Downloads: «перейди именно в Downloads». Аргумент отвечает на вопрос «с чем работать».
Флаги - как именно сделать
Флаг (его ещё называют опция или ключ) меняет поведение команды. Флаг легко узнать: он начинается с дефиса -. Это как уточнение «без сахара» в заказе - то же действие, но с настройкой.
Сравни обычный ls и ls -l:
$ ls
Desktop Documents Downloads
$ ls -l
drwxr-xr-x 3 student staff 96 May 28 10:12 Desktop
drwxr-xr-x 5 student staff 160 May 27 18:40 Documents
drwxr-xr-x 8 student staff 256 May 29 09:03 Downloads
Та же программа ls, тот же список папок - но флаг -l (от слова long, «подробно») велел показать всё в столбик и с деталями: права доступа, владелец, размер, дата изменения. Действие то же, оформление другое.
Флаги можно сочетать с аргументами. Команда ls -l /home - это «покажи подробно (флаг -l) содержимое папки /home (аргумент)»:
$ ls -l /home
drwxr-xr-x 4 student student 4096 May 29 09:03 student
У каждой программы свои флаги, и их не нужно запоминать - можно спросить у самого компьютера. Способ зависит от системы:
- Linux и WSL2 (Ubuntu): печатай имя программы и флаг
--help, напримерls --help. Компьютер выведет список всех флагов с описанием - это встроенная шпаргалка. - macOS: здесь у
lsдругая, более старая версия, иls --helpона не понимает - в ответ напечатает короткую строчку вродеls: illegal option -- -и подсказку по использованию (usage). Это не поломка и не твоя ошибка - просто на Mac справку смотрят иначе: командойman, напримерman ls(man- от manual, «руководство»). Откроется подробное описание; листать вниз - стрелками или пробелом, выйти - клавишейq. Кстати,man lsработает и в Linux/WSL2 - так что эту команду можно считать универсальной.
Приглашение - символ перед командой
Тот самый $ (или % на Mac) в начале строки называется приглашение (по-английски prompt). Это не часть твоей команды - это сообщение от компьютера: «я свободен и готов принять команду, печатай».
Понимать приглашение полезно по двум причинам.
Во-первых, в примерах из интернета и из этого курса строки часто начинаются с $. Это значит «вот команда, которую надо ввести». Сам знак $ печатать не надо - он уже стоит на экране. Печатаешь только то, что после него.
Во-вторых, пока команда работает (например, что-то скачивается), приглашение НЕ показывается - компьютер занят. Как только снова видишь $ на новой строке - значит, команда закончилась и можно вводить следующую.
$ mkdir reports
$
Первая строка - твоя команда. Вторая строка с одиноким $ - это вернувшееся приглашение: команда выполнена, компьютер снова ждёт.
Сообщение об ошибке - это подсказка, а не ругань
Рано или поздно компьютер ответит ошибкой. Новичка это пугает: кажется, что он что-то сломал. На самом деле ошибка - это просто вежливое сообщение: «я не смог сделать вот это вот по такой-то причине». Её надо не бояться, а читать.
Разберём типичную ошибку по частям:
$ cd reprots
cd: no such file or directory: reprots
Читается слева направо: программа cd сообщает, что нет такой папки, и называет проблемное имя - reprots. Видно опечатку: переставлены буквы, надо reports. Ошибка не отругала, а прямо показала, где смотреть.
Ещё одна частая ошибка - command not found:
$ maek reports
maek: command not found
Компьютер говорит: «нет программы с именем maek». Это значит, что первое слово (имя программы) написано с ошибкой или такой программы нет. Здесь опечатка в make, но даже без неё урок один: первое слово команды - это всегда имя программы, и компьютер ищет его в своём ящике инструментов.
Привыкай читать ошибки целиком, а не закрывать в панике. Английский текст можно скопировать и перевести или загуглить - почти на любую ошибку давно есть объяснение. Разбору ошибок и тому, как из них выбираться, посвящён отдельный модуль курса - «Когда что-то сломалось».
Попробуй сам
Потренируйся разбирать команды на части прямо в терминале:
- Запусти
lsбез ничего, потомls -l. Сравни: одна программа, но флаг-lпоменял вид вывода. - Запусти
ls -l /(аргумент/- это самая верхняя папка компьютера, корень). Посмотри: тот же подробный вид, но для другой папки. - Намеренно сделай опечатку: напечатай
lss. Прочитай ответcommand not foundи найди в нём имя программы, на которое пожаловался компьютер. - Сделай опечатку в аргументе:
cd nesuschestvuet. Прочитай ошибкуno such file or directoryи найди в ней проблемное имя.
Для каждой команды проговори вслух: где здесь имя программы, где флаг, где аргумент. Когда это станет привычкой, любая команда из интернета перестанет быть пугающей загадкой - ты будешь видеть в ней понятную фразу.