Чёрный экран, мигающий курсор, ни одной подсказки. Первый контакт с терминалом у большинства людей вызывает один и тот же рефлекс — закрыть окно и больше не открывать. Это нормальная реакция на инструмент, который не прощает ошибок и не показывает кнопок.

Но за пугающим фасадом скрывается всего пара десятков команд, которые закрывают 90% повседневных задач. Навигация по директориям, поиск файлов, запуск скриптов, проверка API, работа с Git — всё это умещается в короткий справочник, который укладывается в голову за один вечер.

Этот материал — не учебник по операционным системам и не манифал. Это рабочий набор команд, которые нужны разработчикам, продакт-менеджерам, аналитикам и всем, кто регулярно сталкивается с командной строкой в реальных проектах. Не теория — практика.

Терминал — это не про запоминание флагов. Это про понимание того, как устроена файловая система, как процессы управляют ресурсами и как данные передаются по сети. Команды — лишь способ сказать системе, что нужно сделать.

Где вы находитесь — навигация

Файловая система — это дерево. Корень — /, от него расходятся ветви: /home, /var, /usr. Каждая команда в терминале выполняется из какой-то точки этого дерева — текущей директории. Если не знать, где вы стоите, любая команда с относительным путём даст непредсказуемый результат.

pwd — выводит полный путь к текущей директории. Команда, которую стоит набрать первой, если вы не понимаете, где оказались. Возвращает абсолютный путь от корня файловой системы.

Терминал с командами pwd, ls, cd и find для навигации по папкам

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 — и ключ доступен всем скриптам, не засвечен в репозитории.

Конвейер, перенаправление, алиасы — сборка из блоков

Сила терминала — не в отдельных командах, а в их композиции. Три механизма превращают десяток простых команд в гибкий инструмент: конвейер, перенаправление вывода и алиасы.

Терминал с командами find, grep, pipe и перенаправлением вывода в файл

Конвейер (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
Проверить APIcurl 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 — что именно.

Это занимает пять секунд и гарантирует, что в коммит попадёт только то, что вы хотите. Без этой проверки в историю легко добавить временные файлы или отладочный код.

Ссылки

Ссылки