Программирование с ИИ
ENRU
Е

Терминал — необходимый минимум

двадцать команд, которых хватает

Что это

Столько терминала, сколько нужно, чтобы запускать свои программы, читать логи и понимать, что предлагает ИИ. Примеры — Linux и macOS; в Windows то же самое доступно через PowerShell или WSL.

Где я и что здесь

pwd                 # в какой папке нахожусь
ls                  # что здесь
ls -la              # всё, включая скрытое, с размерами и датами
cd проект           # войти в папку
cd ..               # на уровень вверх
cd                  # домой

Скрытые файлы — те, что начинаются с точки: .env, .gitignore. Без -la их не видно, и именно поэтому о них забывают.

Посмотреть файл

cat app.py          # целиком
head -20 app.py     # первые 20 строк
tail -20 app.py     # последние 20
tail -f logs/app.log  # последние и дальше в реальном времени
wc -l app.py        # сколько строк

tail -f — главная команда при отладке работающей программы: оставить в отдельном окне и смотреть, что пишется, пока нажимаешь кнопки.

Найти

$ grep -rn "ошибка" logs/
logs/app.log:1:ошибка
logs/app.log:3:ошибка снова

$ find . -name "*.py"
./app.py

$ grep -c "ошибка" logs/app.log
2

grep -rn — рекурсивно, с номерами строк. Это та команда, которой ищут, где в проекте используется функция, откуда читается настройка и не попал ли ключ в код:

grep -rn "sk-\|password\|api_key" .

Файлы

cp файл копия           # копировать
cp -r папка копия       # копировать папку
mv старое новое         # переместить или переименовать
rm файл                 # удалить без корзины
mkdir -p a/b/c          # создать папки, включая промежуточные
du -sh .                # сколько весит папка

Запуск и остановка

python3 app.py          # запустить
Ctrl+C                  # остановить работающую программу
Ctrl+D                  # закончить ввод (выйти из python, из ssh)
./script.sh             # запустить скрипт
chmod +x script.sh      # разрешить запуск

Если ./script.sh отвечает Permission denied — не хватает chmod +x.

Соединять команды

команда1 && команда2    # вторая только если первая удалась
команда1 | команда2     # вывод первой на вход второй
команда > файл          # вывод в файл (перезаписать)
команда >> файл         # дописать в конец
команда 2>&1            # ошибки туда же, куда обычный вывод

&& — то, из чего состоит любая команда сборки: tsc -b && vite build означает «проверить типы, и только если получилось — собирать» (статья 12.1).

Код возврата

$ python3 -c "import sys; sys.exit(3)"
$ echo $?
3

$? — чем закончилась последняя команда. Ноль значит «успешно», всё остальное — нет. На этом работают и &&, и проверки в сборке: программа может напечатать «готово» и при этом вернуть ошибку.

Переменные окружения

PORT=8080 python3 app.py     # задать только для этого запуска
export API_KEY=abc           # задать на всю сессию терминала
echo $API_KEY                # посмотреть
env | grep API               # перечислить подходящие

Переменная, заданная через export, живёт до закрытия окна и не попадает ни в какие файлы — этим она и хороша для ключей (статья 13.4).

Что ещё пригодится

history | grep docker    # что я набирал про docker
Ctrl+R                   # поиск по истории команд
curl -s -o /dev/null -w "%{http_code}\n" localhost:8000/   # код ответа
df -h                    # сколько места на дисках
ps aux | grep python     # какие процессы запущены
kill <номер>             # остановить процесс

Команду curl из этого списка стоит запомнить: она отвечает на вопрос «мой сервер вообще жив?» без браузера и без догадок (статья 14.3).