День 01 · Программа, терминал, первый запуск · страница 2 из 6

Терминал: минимум на сегодня

Программы на 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  Videos

ls показывает содержимое текущей папки. Если 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