Чёрный экран, мигающий курсор, ни одной подсказки. Первый контакт с терминалом у большинства людей вызывает один и тот же рефлекс — закрыть окно и больше не открывать. Это нормальная реакция на инструмент, который не прощает ошибок и не показывает кнопок.
Но за пугающим фасадом скрывается всего пара десятков команд, которые закрывают 90% повседневных задач. Навигация по директориям, поиск файлов, запуск скриптов, проверка API, работа с Git — всё это умещается в короткий справочник, который укладывается в голову за один вечер.
Этот материал — не учебник по операционным системам и не манифал. Это рабочий набор команд, которые нужны разработчикам, продакт-менеджерам, аналитикам и всем, кто регулярно сталкивается с командной строкой в реальных проектах. Не теория — практика.
Терминал — это не про запоминание флагов. Это про понимание того, как устроена файловая система, как процессы управляют ресурсами и как данные передаются по сети. Команды — лишь способ сказать системе, что нужно сделать.
Где вы находитесь — навигация
Файловая система — это дерево. Корень — /, от него расходятся ветви: /home, /var, /usr. Каждая команда в терминале выполняется из какой-то точки этого дерева — текущей директории. Если не знать, где вы стоите, любая команда с относительным путём даст непредсказуемый результат.
pwd — выводит полный путь к текущей директории. Команда, которую стоит набрать первой, если вы не понимаете, где оказались. Возвращает абсолютный путь от корня файловой системы.
ls — выводит содержимое текущей директории. Сама по себе команда выдаёт только имена, но с флагом -l появляется детальная информация: права, владелец, размер, дата последнего изменения. Флаг -a выводит также скрытые файлы — те, чьё имя начинается с точки. Комбинация ls -la даёт полную картину в одной строке.
cd — переход в другую директорию. Это не команда в привычном смысле — она меняет контекст, в котором работают последующие команды:
cd Documents # войти в директорию Documents
cd .. # на уровень выше
cd ~ # домашняя директория
cd - # вернуться туда, где были до этого
Символ ~ — это сокращение для домашней директории пользователя. На macOS это /Users/имя, на Linux — /home/имя. Точка и две точки — относительные пути: одна точка означает текущую директорию, две — родительскую.
tree — рисует структуру вложенных директорий в виде дерева. Не входит в базовую поставку большинства систем. Установка:
brew install tree # macOS
apt install tree # Linux
Совет: если вы потерялись в файловой системе, наберите pwd, затем cd ~ — это вернёт вас в домашнюю директорию, безопасную точку отсчёта.
Файлы и папки — создание, копирование, удаление
Шесть команд покрывают весь базовый набор операций с файлами: создать, скопировать, переместить, удалить, прочитать, открыть.
mkdir — создаёт папку. Флаг -p создаёт всю цепочку вложенных директорий за один вызов:
mkdir название # создать одну папку
mkdir -p путь/к/папке # создать всю цепочку вложенных папок
touch — создаёт пустой файл. Если файл уже существует, команда обновляет его временную метку, не меняя содержимое.
cp — копирование. Флаг -r рекурсивно копирует папку со всем содержимым:
cp откуда куда # скопировать файл
cp -r папка/ новая_папка/ # скопировать папку целиком
mv — перемещение или переименование. Одна команда для двух операций: если путь назначения совпадает с исходной директорией, файл переименовывается. Если нет — перемещается.
rm — удаление. В терминале нет корзины — файл стирается безвозвратно. Флаг -r удаляет рекурсивно (папку с содержимым), -f форсирует удаление без подтверждения:
rm файл # удалить файл
rm -rf папка/ # удалить папку со всем содержимым
Внимание: rm -rf — команда без отмены. Она не спрашивает подтверждения и не отправляет файлы в корзину. Одна опечатка в пути — и директория исчезает. Всегда проверяйте путь перед нажатием Enter.
cat — выводит содержимое файла в терминал. Для коротких файлов этого достаточно. Для длинных — less, который открывает файл с постраничной прокруткой: стрелки вверх-вниз для навигации, q для выхода.
open — открывает текущую папку в файловом менеджере системы. На macOS это Finder, команда open . На Linux — xdg-open .
Поиск — find и grep
Две команды, два разных поиска. find ищет файлы по имени, дате, размеру, правам. grep ищет текст внутри файлов. Вместе они закрывают 90% поисковых задач в терминале.
find обходит директорию рекурсивно и возвращает пути, соответствующие условию. Поиск по расширению:
find . -name "*.json" # все JSON-файлы в текущей папке и вложенных
grep ищет строки, содержащие указанный текст. Флаг -r включает рекурсивный обход всех файлов в директории. Флаг -i отключает учёт регистра:
grep "текст" файл # найти строки в одном файле
grep -r "текст" . # рекурсивный поиск по всем файлам
grep -i "текст" файл # поиск без учёта регистра
Инсайт: find и grep можно объединять через конвейер. find . -name “*.log” | xargs grep “ERROR” — найти все лог-файлы и вытащить строки с ошибками. Это мощнее, чем любой GUI-поисковик.
Процессы — что работает и как остановить
Каждая запущенная в терминале команда — это процесс. Процесс имеет идентификатор PID (Process ID — числовой номер, который операционная система присваивает каждому запущенному процессу), имя, потребление CPU и памяти. Управление процессами — это управление ресурсами машины.
ps aux — выводит список всех запущенных процессов в системе. Колонки: пользователь, PID, загрузка CPU, загрузка памяти, команда запуска.
top и htop — интерактивные мониторы процессов. top предустановлен почти везде, но показывает плоскую таблицу. htop удобнее: цветной интерфейс, сортировка по любой колонке, управление прямо из списка. Устанавливается отдельно:
brew install htop # macOS
apt install htop # Linux
kill PID — завершает процесс по его идентификатору. PID видно в выводе ps aux или htop. kill -9 PID — принудительное завершение, если процесс не реагирует на обычный сигнал.
Ctrl + C прерывает выполнение текущей команды. Ctrl + Z приостанавливает процесс — он уходит в фон, не завершаясь. fg возвращает его на передний план, bg продолжает выполнение в фоне:
command & # запустить команду в фоне, не блокируя терминал
Важно: Ctrl + C и Ctrl + Z — разные операции. Ctrl + C убивает процесс. Ctrl + Z замораживает его. Если вы нажали Ctrl + Z случайно, процесс не умер — он ждёт в фоне. fg вернёт его обратно.
Сеть — curl, wget, ping, ssh
Четыре команды, которые заменяют браузер, скачивалка и панель администратора. Если вы работаете с API, деплоите на сервер или проверяете доступность хоста — это ваш ежедневный инструмент.
curl — отправляет HTTP-запрос к URL и выводит ответ в терминал. Для быстрой проверки API не нужен Postman — достаточно одной строки:
curl https://example.com
POST-запрос с JSON-телом и заголовком Content-Type — это уже полноценный API-клиент в одной команде:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"key":"value"}' \
https://api.example.com
wget — скачивает файл по URL. В отличие от curl, wget оптимизирован именно для загрузки: поддерживает докачку, рекурсивное скачивание сайтов, ограничение скорости.
wget https://example.com/file.zip
ping — проверяет доступность хоста. Отправляет ICMP-пакеты (межсетевые диагностические сообщения — стандартный протокол для проверки соединения между двумя узлами сети) и показывает время отклика. Прервать — Ctrl + C.
ssh — подключение к удалённому серверу по протоколу SSH (Secure Shell — криптографический протокол, который обеспечивает защищённый доступ к командной строке другого компьютера через сеть):
ssh user@host
Git — десять команд на каждый день
Git — система контроля версий. Она отслеживает изменения в файлах, позволяет возвращаться к предыдущим версиям и синхронизировать работу между несколькими людьми. Если вы работаете с кодом или конфигурациями, без Git не обойтись.
Десять команд, которые покрывают весь жизненный цикл репозитория — от создания до публикации:
git init # создать новый репозиторий в текущей директории
git clone URL # скопировать репозиторий с удалённого сервера
git status # какие файлы изменились
git add . # добавить все правки в индекс
git commit -m "Описание" # зафиксировать правки в истории
git push # отправить коммиты на сервер
git pull # забрать свежие изменения с сервера
git log --oneline # компактная история коммитов
git diff # показать незафиксированные правки
git checkout -b новая-ветка # создать новую ветку и переключиться на неё
Это далеко не исчерпывающий список — в Git больше сотни команд. Но эти десять закрывают основной цикл: создать репозиторий, внести правки, зафиксировать, отправить на сервер, получить обновления, просмотреть историю, переключить ветку. Остальное — по мере необходимости.
Переменные окружения — настройка среды
Переменные окружения — это настройки, которые доступны всем программам, запущенным в текущей сессии терминала. PATH — одна из них: список директорий, где терминал ищет исполняемые файлы. Когда вы набираете python, терминал обходит каждую директорию из PATH и запускает первый найденный python.
echo $PATH # вывести значение переменной PATH
export устанавливает переменную окружения для текущей сессии. После закрытия терминала она исчезает. Чтобы переменная сохранялась между сессиями, строку export нужно добавить в конфигурационный файл оболочки:
export ПЕРЕМЕННАЯ=значение # установить для текущей сессии
echo $ПЕРЕМЕННАЯ # вывести значение
На macOS и новых версиях Linux по умолчанию используется zsh — конфигурационный файл ~/.zshrc. На старых Linux и многих серверах — bash, файл ~/.bashrc. Эти файлы читаются при каждом запуске терминала, поэтому переменные из них доступны всегда.
Совет: API-ключи и токены лучше хранить в переменных окружения, а не в коде. export OPENAI_API_KEY=sk-… в ~/.zshrc — и ключ доступен всем скриптам, не засвечен в репозитории.
Конвейер, перенаправление, алиасы — сборка из блоков
Сила терминала — не в отдельных командах, а в их композиции. Три механизма превращают десяток простых команд в гибкий инструмент: конвейер, перенаправление вывода и алиасы.
Конвейер (pipe)
Символ вертикальной черты | передаёт вывод одной команды как входной поток для другой. Это позволяет выстраивать цепочки без временных файлов:
ls -la | grep ".json" # оставить только .json из вывода ls
cat лог.txt | grep "ERROR" # вытащить строки с ERROR из лога
Перенаправление вывода
Символ > записывает вывод команды в файл, перезаписывая его. >> — добавляет в конец, не трогая существующее содержимое:
echo "hello" > файл.txt # записать строку в файл (перезапись)
ls >> список.txt # добавить список файлов в конец файла
Алиасы
Алиас — короткое имя для длинной команды. Добавляется в ~/.zshrc или ~/.bashrc:
alias ll="ls -la"
alias gs="git status"
После перезапуска терминала ll заменяет ls -la, а gs — git status. Экономия нажатий, которая складывается в часы за год.
История и автодополнение
history выдаёт пронумерованный список всех команд, которые вы вводили в текущей сессии. Ctrl + R запускает инкрементальный поиск: набираете часть команды — терминал подставляет ближайшее совпадение из истории. Tab включает автодополнение: дописывает имя команды, файла или директории. Двойной Tab выводит все доступные варианты.
Шпаргалка — команды на каждый день
Десять команд, которые покрывают типичные задачи. Если вы только начинаете — держите эту таблицу под рукой.
| Задача | Команда |
|---|---|
| Текущая директория | pwd |
| Список файлов | ls -la |
| Сменить директорию | cd папка |
| Новая папка | mkdir название |
| Удалить файл | rm файл |
| Найти файл по имени | find . -name “имя” |
| Найти строку в файлах | grep -r “текст” . |
| Загрузить файл | wget URL |
| Проверить API | curl URL |
| Статус репозитория | git status |
Ограничения
Ограничения
Нет корзины — rm удаляет файлы безвозвратно.
В отличие от графического интерфейса, где удаление отправляет файл в корзину и его можно восстановить, терминал стирает данные сразу. Флаг -rf усугубляет ситуацию: он удаляет папку рекурсивно и без подтверждения. Единственная защита — привычка проверять путь перед нажатием Enter и держать бэкапы важных данных.
Платформозависимость — Команды open и xdg-open работают на разных системах.
open — macOS, xdg-open — Linux. tree и htop не предустановлены по умолчанию на большинстве систем. Пакетные менеджеры разные: brew для macOS, apt для Debian/Ubuntu. Команда, работающая на одном компьютере, может отсутствовать на другом.
Переменные окружения исчезают — export устанавливает переменную только для текущей сессии терминала.
После закрытия окна или перезапуска системы переменная пропадает. Чтобы настройка сохранялась, строку export нужно добавить в ~/.zshrc или ~/.bashrc — конфигурационные файлы, которые читаются при каждом запуске оболочки.
PATH определяет, что запустится — Когда вы набираете имя команды, терминал обходит директории из переменной PATH по порядку.
Если в нескольких директориях есть файл с одним именем, выполнится первый найденный. Это может привести к ситуации, когда набираешь python, а запускается старая версия из системной директории вместо новой из пользовательской.
Антипаттерны
Антипаттерны
rm -rf по абсолютному пути — Команда rm -rf / удалит всю файловую систему, если у вас достаточно прав.
Даже rm -rf с опечаткой в пути может стереть не ту директорию. Правильный подход — перейти в нужную папку через cd, проверить местоположение через pwd, и только потом rm -rf с относительным путём. Никогда не запускайте rm -rf с путём, который начинается с /, без двойной проверки.
Хранение ключей в коде — Запись API-ключей и токенов прямо в скриптах — распространённая ошибка.
Если скрипт попадёт в Git-репозиторий, ключ утечёт. Правильный подход — переменные окружения через export в ~/.zshrc, а в коде читать через os.environ или аналогичный API. Файл ~/.zshrc не входит в репозиторий, ключ остаётся локальным.
Игнорирование git status — Выполнение git add .
без предварительного git status — это добавление в индекс всего, что лежит в папке, включая временные файлы, логи и случайно созданные артефакты. Сначала посмотрите, что изменилось, потом добавляйте осознанно. git status занимает две секунды и спасает от попадания мусора в историю коммитов.
Ctrl + Z вместо Ctrl + C — Ctrl + Z не убивает процесс — он приостанавливает его и переводит в фон.
Процесс продолжает занимать память и порт. Если вы хотели остановить сервер, а нажали Ctrl + Z, порт останется занятым, и новый запуск упадёт с ошибкой «address already in use». Для остановки — Ctrl + C. Для приостановки с последующим возвратом — Ctrl + Z и fg.
Чеклист
Чеклист
Терминал — это не экзамен на знание флагов. Это язык, на котором система понимает вас без посредников. Двадцать команд, конвейер и Tab — и вам не нужен графический интерфейс для работы с файлами, сетью и Git.
Проверьте pwd перед операциями с файлами — Перед rm, mv или cp всегда выполняйте pwd, чтобы убедиться, что вы в правильной директории.
Команда без абсолютного пути работает относительно текущей папки. Если вы не там, где думаете, результат будет непредсказуемым. Одна секунда на pwd экономит часы восстановления.
Используйте Tab для автодополнения — Tab дописывает имена файлов, папок и команд.
Это не только быстрее, но и защищает от опечаток. Если Tab не срабатывает — значит, терминал не нашёл однозначного совпадения, и стоит проверить, существует ли файл. Двойной Tab показывает все варианты.
Настройте алиасы для частых команд — Добавьте 5-10 алиасов в ~/.zshrc для команд, которые набираете каждый день.
alias ll=“ls -la”, alias gs=“git status”, alias gp=“git push”. После перезапуска терминала каждая экономит несколько секунд и снижает риск опечатки в длинной команде.
Проверяйте API через curl перед интеграцией — curl URL в терминале показывает ответ сервера за секунду.
Перед тем как писать код интеграции, выполните curl-запрос и посмотрите статус-код и тело ответа. Это быстрее, чем запускать отладчик в коде, и сразу показывает, доступен ли endpoint и какой формат данных он возвращает.
git status и git diff перед каждым коммитом — Две команды перед git add и git commit: git status показывает, что изменилось, git diff — что именно.
Это занимает пять секунд и гарантирует, что в коммит попадёт только то, что вы хотите. Без этой проверки в историю легко добавить временные файлы или отладочный код.
Ссылки
Ссылки
- Документация: GNU Coreutils Manual
- Стандарт: POSIX.1-2017 — Shell & Utilities
- Документация: Git Reference
- Документация: curl Manual