Терминал: минимум на сегодня
Программы на Go собираются и запускаются командами в терминале. Редактор умеет нажимать кнопки за вас, но сервисы на работе живут на серверах, где кнопок нет, — только терминал. Сегодня нужно немного: понимать, где вы, видеть, что лежит в папке, и переходить в другую.
Приглашение
Когда терминал ждёт команду, он показывает строку-приглашение:
stagiaire@lab:~$| Кусок | Что значит |
|---|---|
stagiaire |
имя пользователя, под которым вы работаете — у вас своё |
lab |
имя компьютера — у вас своё |
~ |
папка, в которой вы сейчас стоите; ~ — сокращение для домашней папки |
$ |
«жду команду» |
Команду печатают после $ и отправляют клавишей Enter.
В примерах курса приглашение показано, чтобы было видно, в какой папке выполняется команда. Печатать его не нужно — только то, что после $. Там, где приглашения нет, команда просто написана отдельной строкой.
Папку в Linux обычно называют каталогом. Это одно и то же; дальше будут встречаться оба слова.
pwd — где я
Ситуация. Вы запускаете программу, а терминал отвечает, что файлов нет. Первый вопрос — вы вообще в той папке?
stagiaire@lab:~$ pwd
/home/stagiaireКак читать. Полный путь от самого верха: корень /, в нём папка home, в ней stagiaire. Это ваша домашняя папка — та самая ~. Название — от print working directory, «напечатай рабочий каталог».
Что может пойти не так. Ничего: pwd не ошибается. Неожиданный путь значит одно — вы не там, где думали.
ls — что здесь лежит
Ситуация. Вы перешли в папку задания и хотите убедиться, что файл программы на месте.
stagiaire@lab:~$ ls
Desktop Documents Downloads gocourse Music Pictures Public Templates Videosls показывает содержимое текущей папки. Если Ubuntu на русском, часть имён будет русской — «Рабочий стол», «Загрузки». Для курса это неважно: всё учебное лежит в gocourse.
Содержимое другой папки — не заходя в неё:
stagiaire@lab:~$ ls gocourse/day01
fix1 fix2 fix3 go.mod hello receiptПодробный вид — ключ -l. Ключ — буква после минуса, которая меняет поведение команды:
stagiaire@lab:~$ ls -l gocourse/day01
total 24
drwxrwxr-x 2 stagiaire stagiaire 4096 Sep 29 02:36 fix1
drwxrwxr-x 2 stagiaire stagiaire 4096 Sep 29 02:36 fix2
drwxrwxr-x 2 stagiaire stagiaire 4096 Sep 29 02:36 fix3
-rw-rw-r-- 1 stagiaire stagiaire 22 Sep 29 02:36 go.mod
drwxrwxr-x 2 stagiaire stagiaire 4096 Sep 29 02:36 hello
drwxrwxr-x 2 stagiaire stagiaire 4096 Sep 29 02:36 receiptКак читать. Сегодня важен только первый символ строки: d — это папка (directory), - — обычный файл. go.mod — файл, остальное — папки. Остальные колонки: права, владелец, размер в байтах, дата изменения, имя. Имя пользователя, дата и буквы в середине прав у вас будут свои — права зависят от настроек машины.
Что может пойти не так.
| Что видите | Что это значит | Что делать |
|---|---|---|
ls: cannot access 'gocoures': No such file or directory |
опечатка в имени или вы не в той папке | pwd, потом набрать имя через Tab |
| пустой вывод | папка пуста | так бывает: в hello сегодня пусто, пока вы не создадите файл |
Попробуйте сейчас: где вы и что вокруг.
Цель: увидеть свою домашнюю папку и отличить в ней папки от файлов.
▶ Выполнитеpwd ls ls gocourse/day01 ls -l gocourse/day01
pwdпокажет вашу домашнюю папку. Вls -lнайдите строки, которые начинаются сd, — это папки заданий дня;go.modначинается с-.Готово, когда:
ls -l gocourse/day01напечатал строки папокfix1,fix2,fix3,hello,receiptсdв начале и строкуgo.modс-(пункт проверкиt_nav).
cd — перейти в другую папку
Ситуация. Команды Go работают с файлами той папки, где вы стоите. Чтобы запустить программу из hello, надо в неё перейти.
stagiaire@lab:~$ cd gocourse/day01
stagiaire@lab:~/gocourse/day01$Как читать. Вывода нет, и это правильно: успешная команда в терминале молчит, сообщение появляется только при проблеме. Об успехе говорит приглашение — было ~, стало ~/gocourse/day01.
Полезные формы:
| Команда | Что делает |
|---|---|
cd hello |
войти в папку hello внутри текущей |
cd .. |
подняться на уровень вверх |
cd ~/gocourse |
перейти по пути от домашней папки, откуда бы вы ни были |
cd |
вернуться домой |
Что может пойти не так.
| Что видите | Что это значит | Что делать |
|---|---|---|
bash: cd: helo: No such file or directory |
такой папки здесь нет | ls покажет, что есть |
bash: cd: go.mod: Not a directory |
это файл, в файл войти нельзя | в ls -l у папок строка начинается с d |
mkdir — создать папку
stagiaire@lab:~/gocourse/day01$ mkdir scratch
stagiaire@lab:~/gocourse/day01$ ls
fix1 fix2 fix3 go.mod hello receipt scratchТоже молчит при успехе. Если папка уже есть — mkdir: scratch: File exists. Ключ -p создаёт сразу цепочку папок и не ругается на существующие: mkdir -p a/b/c.
Удалить пустую папку — rmdir scratch.
Приёмы, которые экономят часы
| Приём | Что делает |
|---|---|
Tab |
дописывает имя папки или файла. Напечатайте cd goc и нажмите Tab — получится cd gocourse/. Не дописал — два Tab подряд покажут варианты |
↑ и ↓ |
листают прошлые команды. Не надо перепечатывать go run . десятый раз |
Ctrl+C |
прерывает команду, которая зависла или работает слишком долго |
Ctrl+Shift+C / Ctrl+Shift+V |
копировать / вставить в терминале. Обычный Ctrl+C здесь не копирует, а прерывает |
clear или Ctrl+L |
очистить экран |
Tab — самый важный. Имена, набранные через Tab, не бывают с опечаткой: если Tab не дописывает, такого имени в папке нет.
Что может пойти не так.
| Что видите | Что это значит | Что делать |
|---|---|---|
Command 'sl' not found, but can be installed with:, ниже sudo apt install sl |
опечатка в имени команды; Ubuntu заодно предлагает поставить чужую программу с таким именем | ничего не устанавливайте — перепечатайте: ls |
после Ctrl+C в терминале появилось ^C и новое приглашение |
команда прервана | так и задумано |
напечатанное не отвечает, курсор на новой строке без $ |
команда ещё работает или ждёт ввода | подождать или Ctrl+C |
Попробуйте сейчас: пройдитесь по папке дня.
Цель: зайти в папку дня, спуститься в
helloи вернуться, следя за путём вpwd. Имена набирайте черезTab.▶ Выполнитеcd ~/gocourse/day01 pwd ls ls -l cd hello pwd ls cd .. pwdЧто должно получиться:
pwdсначала покажет путь, который кончается на/gocourse/day01, потом на/day01/hello, потом снова на/day01.lsвhelloничего не напечатает — программы там ещё нет, её вы напишете на следующей странице.Нажмите стрелку
↑несколько раз — терминал покажет команды, которые вы только что вводили.Готово, когда: последний
pwdснова кончается на/gocourse/day01, а стрелка↑листает эти команды (пункт проверкиt_nav).
Дальше: первая программа — course next