Терминал пугает. Чёрный экран с мигающим курсором выглядит как приглашение в бездну, где одна неверная команда может всё сломать. Но правда гораздо прозаичнее. Терминал — это просто ещё один способ общения с компьютером. Текстовый. Быстрый. Честный. Без посредников в виде графических меню и кнопок «ОК». Ты говоришь компьютеру, что делать — он делает. А если не понимает — честно пишет об этом красным текстом.
Для разработчика терминал не просто удобный инструмент. Это фундамент. Скорость работы с файлами, запуск скриптов, управление сервером по SSH, установка пакетов, работа с Git и Docker — всё это живёт в командной строке. Графический интерфейс удобен для просмотра веб-страниц, но когда нужно переименовать сотню файлов, найти ошибку в логах или автоматизировать сборку проекта, мышь становится обузой. Клавиатура и текст — вот настоящая производительность.
Многие новички месяцами обходят терминал стороной. Копируют команды из интернета, не понимая, что они делают. Это как учиться водить машину, глядя только на спидометр. Рано или поздно придётся заглянуть под капот. И лучше сделать это сейчас. Ты не обязан становиться гуру терминала. Достаточно выучить 10–15 команд. Их хватит на 80% повседневных задач. Остальное приходит с практикой.
Сегодня ты научишься уверенно работать в командной строке. Мы разберём навигацию по файловой системе, создание и редактирование файлов, просмотр логов, поиск данных, написание простых скриптов и многое другое. Я покажу команды и для Bash (Linux и macOS), и для PowerShell (Windows), чтобы ты мог работать в любой среде. Это не магия. Это набор из полутора десятков команд, которые ты выучишь за час и будешь использовать годами.
К концу статьи ты перестанешь бояться чёрного экрана и начнёшь получать удовольствие от скорости, которую даёт командная строка. Поехали.
Что такое командная строка на самом деле
Представь, что операционная система — это огромный завод. Графический интерфейс с окнами и кнопками — это пульт управления с красивыми кнопками. Удобно. Понятно. Но ограниченно. Командная строка — это прямой доступ к станкам и механизмам завода. Ты можешь дотянуться до того, что скрыто от глаз обычного пользователя. Можешь автоматизировать то, что через кнопки пришлось бы делать часами.
Теперь давай разберёмся с терминами. Их путают даже опытные пользователи, а ясность здесь важна.
Оболочка (shell) — это программа, которая принимает текстовые команды от пользователя и передаёт их операционной системе для выполнения. Оболочка — это переводчик между тобой и ядром системы. Ты пишешь «покажи мне файлы в этой папке», оболочка переводит это на язык системных вызовов, ядро выполняет работу и возвращает результат. Оболочка показывает его тебе. Всё просто.
Оболочек существует много. Самая популярная в мире Linux и macOS — Bash (Bourne Again Shell). Она появилась в 1989 году и до сих пор остаётся стандартом де-факто. В 2019 году macOS сменила Bash на Zsh в качестве оболочки по умолчанию, но принципы работы у них очень близки. Для новичка разница между Bash и Zsh практически незаметна.
В Windows ситуация иная. Традиционная командная строка Windows (cmd.exe) — это рудимент. Она до сих пор существует, но пользоваться ею для разработки не стоит. Современная оболочка Windows называется PowerShell. Она мощнее, умнее и устроена принципиально иначе. Если Bash работает с текстом, то PowerShell работает с объектами. Это ключевое различие, и мы к нему ещё вернёмся.
Терминал — это окно, в котором работает оболочка. Программа, которая отображает текст, принимает ввод с клавиатуры и показывает вывод. На macOS это приложение Terminal.app, на Linux — GNOME Terminal, Konsole или любой другой эмулятор терминала, в Windows — Windows Terminal или консоль PowerShell. Терминал и оболочка — не одно и то же. Терминал — это рама, оболочка — картина внутри.
Командная строка — это интерфейс взаимодействия с оболочкой. Строка, в которую ты вводишь команды. В широком смысле этим термином часто обозначают всю экосистему: терминал плюс оболочку плюс набор команд.
Теперь о различии между Bash и PowerShell. Оно глубже, чем просто синтаксис команд. Bash следует философии Unix: «всё есть текст». Вывод любой программы — это поток символов. Обработка данных — это манипуляции с текстом. Конвейер в Bash передаёт текст от одной команды к другой. PowerShell следует иной философии: «всё есть объект». Вывод команды — это структурированные данные, у которых есть свойства и методы. Конвейер в PowerShell передаёт не текст, а объекты целиком.
На практике это означает, что PowerShell часто требует больше кода для простых операций, но даёт гораздо больше контроля над данными. Bash лаконичен и быстр для типовых задач. Оба подхода имеют право на жизнь. Разработчику стоит знать основы обеих систем.
whoami и нажми Enter. Посмотри, что ответит компьютер. Просто чтобы почувствовать: ты уже что-то делаешь.
Первый запуск: открываем терминал
Хватит теории. Давай запустим терминал и введём первую команду. Это важный психологический шаг — перейти от чтения к действию.
macOS. Открой Finder, перейди в папку «Программы», затем в «Утилиты» и запусти Terminal.app. Альтернативный способ — нажми Cmd+Пробел для вызова Spotlight, введи «Terminal» и нажми Enter. Перед тобой появится окно с белым или чёрным фоном и строкой приглашения.
Linux. Нажми Ctrl+Alt+T — это стандартное сочетание для вызова терминала в большинстве дистрибутивов. Или найди «Terminal» в меню приложений. Результат будет похож на macOS, но детали оформления зависят от твоего дистрибутива и темы оформления.
Windows. Нажми Win+X и выбери «Windows PowerShell» из меню. Или нажми Win, введи «PowerShell» и нажми Enter. Откроется синее окно с белым текстом — классический вид PowerShell.
Ты увидишь нечто подобное:
user@hostname:~$
Это приглашение командной строки. Разберём его по частям, потому что в нём зашифрована полезная информация. user — имя текущего пользователя. hostname — имя компьютера. Символ ~ (тильда) — это сокращённое обозначение домашней директории пользователя. Знак $ означает, что оболочка работает с правами обычного пользователя и готова принимать команды. В PowerShell приглашение выглядит иначе, но содержит ту же суть: путь к текущей папке и символ >.
Теперь введи свою первую команду. Набери whoami и нажми Enter. Эта команда работает одинаково в Bash и PowerShell. Ты увидишь своё имя пользователя. Компьютер ответил. Ты только что успешно поговорил с ним на его языке. Первый шаг сделан.
Кстати, если ты работаешь на macOS и хочешь проверить, какая у тебя оболочка, введи echo $SHELL. Система ответит что-то вроде /bin/zsh или /bin/bash.
whoami, посмотри на результат. Затем введи date (Bash) или Get-Date (PowerShell) — это покажет текущие дату и время. Почувствуй, что терминал тебя слушается.
Приглашение выглядит по-разному, но суть одна
whoami — самая безопасная первая команда.
Навигация по файловой системе — твой главный навык
Файловая система — это дерево папок и файлов. Терминал всегда находится в какой-то конкретной папке. Первое, чему нужно научиться — понимать, где ты находишься, и перемещаться куда нужно.
Где я? Команда pwd (print working directory) показывает текущую директорию. Она работает одинаково в Bash и PowerShell. Введи её, и ты увидишь полный путь к папке, в которой сейчас находится терминал. Например, /home/user/projects или C:\Users\User\projects. Это твоя точка отсчёта. Всегда знай, где ты находишься.
Что вокруг? Команда ls (list) показывает содержимое текущей папки. В PowerShell тоже работает ls — это алиас для Get-ChildItem. Попробуй прямо сейчас. Ты увидишь список файлов и папок. Синие имена — папки, белые — файлы, зелёные — исполняемые файлы. Цвета могут отличаться в зависимости от настроек.
У ls есть полезные флаги. Флаг -l показывает детальную информацию: права доступа, владельца, размер, дату изменения. Флаг -a показывает скрытые файлы, чьи имена начинаются с точки. Флаг -h делает размеры файлов человекочитаемыми (KB, MB вместо байтов). Их можно комбинировать: ls -lah. В PowerShell аналог выглядит как Get-ChildItem -Force для скрытых файлов, а детальный вывод включается через | Format-Table -Auto или просто использованием ls.
Рекомендую прямо сейчас попробовать ls -la в Bash или Get-ChildItem -Force в PowerShell. Ты увидишь файлы, о существовании которых даже не подозревал. Не пугайся их. Большинство из них — служебные конфигурационные файлы, которые создала система или установленные программы.
Как перемещаться. Команда cd (change directory) меняет текущую директорию. cd Documents переместит в папку Documents внутри текущей. cd .. поднимет на уровень выше. cd ~ или просто cd без аргументов вернёт в домашнюю директорию. cd / переместит в корень файловой системы.
В PowerShell все эти команды работают точно так же. Синтаксис cd универсален, и это прекрасно.
Абсолютные и относительные пути. Абсолютный путь начинается от корня файловой системы. В Linux и macOS корень обозначается как /. В Windows — C:\ (или другая буква диска). Пример абсолютного пути: /home/user/Documents/report.txt. Относительный путь начинается от текущей директории. Если ты в /home/user, то путь Documents/report.txt — относительный.
Полезное правило: если путь начинается с / (в Linux/macOS) или с буквы диска (в Windows) — он абсолютный. Во всех остальных случаях — относительный. Понимание этой разницы спасёт тебя от ошибки «No such file or directory».
Tab — твой лучший друг. Начни вводить имя папки или файла и нажми Tab. Оболочка попробует автодополнить имя. Если вариантов несколько, нажми Tab дважды — увидишь все возможные. Это экономит часы времени и спасает от опечаток. Прямо сейчас попробуй: введи cd D и нажми Tab.
Абсолютный путь начинается с корня, относительный — от того места, где вы находитесь
pwd). Посмотри, какие файлы и папки есть вокруг (ls). Перейди на рабочий стол (cd Desktop). Проверь, что ты на рабочем столе (pwd). Вернись домой (cd ~). Поднимись на уровень выше от дома (cd ..). Вернись обратно (cd ~). Проделай это несколько раз, чтобы мышцы запомнили клавиши.
pwd показывает текущую папку. ls — содержимое. cd перемещает. Tab дополняет имена. Абсолютный путь идёт от корня, относительный — от текущей папки.
Работа с файлами и папками
Теперь, когда ты умеешь перемещаться по файловой системе, пора научиться с ней взаимодействовать. Создавать, копировать, перемещать и удалять файлы и папки — базовые операции, которые нужны каждый день.
Создание папки. Команда mkdir (make directory) создаёт новую папку. Она работает одинаково в Bash и PowerShell. mkdir my_project создаст папку с именем my_project в текущей директории. Можно создать вложенную структуру одной командой: mkdir -p project/src/components создаст цепочку папок. В PowerShell флаг называется -Force: mkdir -Force project/src/components. Это удобно, когда нужно быстро развернуть структуру проекта.
Создание файла. В Bash для этого используется touch. touch index.html создаст пустой файл. Если файл уже существует, touch обновит его временную метку, не трогая содержимое. В PowerShell аналог — New-Item. New-Item index.html создаст пустой файл. Обе команды просты и безопасны — пустой файл не навредит.
Копирование. cp в Bash, Copy-Item в PowerShell. Синтаксис: cp что_копировать куда_копировать. cp report.txt backup/ скопирует файл report.txt в папку backup. Чтобы скопировать папку со всем содержимым, нужен флаг -r (рекурсивно): cp -r project/ backup/. В PowerShell: Copy-Item report.txt -Destination backup/. Для папок: Copy-Item project/ -Destination backup/ -Recurse.
Перемещение и переименование. mv в Bash, Move-Item в PowerShell. Перемещение и переименование — это одна и та же операция с точки зрения файловой системы. mv old_name.txt new_name.txt переименует файл. mv file.txt Documents/ переместит файл в папку Documents. В PowerShell: Move-Item old_name.txt new_name.txt и Move-Item file.txt -Destination Documents/.
Удаление. Самый опасный раздел. Команда rm (remove) в Bash удаляет файлы безвозвратно. Корзины нет. Восстановить файл после rm очень сложно, а чаще всего невозможно. rm file.txt удалит файл. rm -r folder/ удалит папку и всё её содержимое.
rm -rf. Эта команда удаляет всё без подтверждения. Буквально всё. Если ты случайно укажешь не тот путь, можно стереть системные файлы. Перед тем как нажать Enter на команде с rm, перечитай её дважды. Убедись, что путь правильный.
Лайфхак: используй флаг -i (interactive), чтобы оболочка спрашивала подтверждение перед каждым удалением: rm -ri folder/. Это спасло тысячи нервных клеток.
В PowerShell удаление выполняет Remove-Item. Remove-Item file.txt удалит файл. Remove-Item folder/ -Recurse удалит папку. Здесь тоже нет корзины, будь внимателен.
Золотое правило новичка. Перед тем как нажать Enter на команде с rm или Remove-Item, перечитай её дважды. С опытом это станет автоматическим, но в начале лучше перестраховаться.
test_dir. Перейди в неё. Создай файл hello.txt. Скопируй его в hello_copy.txt. Переименуй копию в goodbye.txt. Удали goodbye.txt. Выйди из папки и удали test_dir. Всё это можно сделать за десять секунд. Попробуй — это отличная тренировка.
mkdir создаёт папки, touch и New-Item — файлы. cp и Copy-Item копируют. mv и Move-Item перемещают и переименовывают. rm и Remove-Item удаляют безвозвратно — будь осторожен.
Просмотр содержимого файлов
Создавать и перемещать файлы — это полдела. Рано или поздно понадобится заглянуть внутрь. Для этого есть несколько команд, от простого вывода на экран до интерактивного просмотра огромных логов.
Вывести всё. cat (concatenate) читает содержимое файла и выводит его в терминал. cat app.log покажет весь файл. Если файл маленький — это удобно. Если в файле десять тысяч строк, терминал заполнится текстом, и найти нужное будет невозможно. Для быстрого взгляда на небольшой конфигурационный файл cat идеален.
В PowerShell cat тоже работает как алиас для Get-Content. Get-Content app.log делает то же самое. Приятно, когда команды совпадают.
Пролистать постранично. Для больших файлов есть less в Bash. less app.log откроет файл в постраничном режиме. Стрелки вверх и вниз — прокрутка по строкам. Пробел — страница вниз. Клавиша q — выход. Поиск: нажми /, введи слово и нажми Enter. n — следующее совпадение. less — одна из тех команд, которые становятся второй натурой. Ты будешь использовать её постоянно.
В PowerShell аналог — more. more app.log тоже открывает постраничный просмотр, но с меньшими возможностями. Для серьёзной работы с логами в PowerShell лучше использовать Get-Content app.log | Out-Host -Paging.
Первые и последние строки. Часто не нужен весь файл, а только его начало или конец. head app.log покажет первые 10 строк. head -n 20 app.log — первые 20. tail app.log покажет последние 10 строк. tail -n 50 app.log — последние 50. Эти команды незаменимы для быстрой проверки логов.
В PowerShell: Get-Content app.log -Head 10 для первых строк и Get-Content app.log -Tail 10 для последних.
Живой просмотр логов. Отдельного упоминания заслуживает tail -f. Эта команда не просто показывает последние строки, а остаётся активной и выводит новые строки по мере их добавления в файл. tail -f /var/log/nginx/access.log покажет запросы к веб-серверу в реальном времени. Это must-have для отладки. Выход — Ctrl+C.
В PowerShell аналог: Get-Content app.log -Wait. Работает так же — следит за файлом и показывает новые строки.
echo "строка" >> file.txt). Посмотри его содержимое через cat. Добавь ещё 20 строк и посмотри первые 5 через head. Посмотри последние 5 через tail. Если работаешь в Bash, открой файл через less и попрактикуйся в навигации.
cat выводит файл целиком. less даёт постраничную навигацию. head и tail показывают начало и конец. tail -f следит за логами в реальном времени — незаменимая команда для отладки.
Комбинируем команды: сила конвейера
Настоящая мощь терминала раскрывается, когда ты начинаешь комбинировать простые команды в сложные цепочки. Секретный ингредиент — конвейер (pipe).
Что такое конвейер. Символ | (вертикальная черта) перенаправляет вывод одной команды на вход другой. Данные текут слева направо, как по конвейеру на заводе. Первая команда производит данные, вторая их обрабатывает, третья форматирует. Ты можешь соединять команды в цепочки произвольной длины.
Это работает и в Bash, и в PowerShell. Но с важным отличием. В Bash по конвейеру передаётся текст. В PowerShell — объекты.
Конвейер в Bash. ls -l | grep ".txt" — классический пример. ls -l выводит список файлов с деталями. Этот вывод передаётся команде grep, которая фильтрует строки и оставляет только те, что содержат «.txt». Результат — список только текстовых файлов.
Другой пример: cat access.log | grep "ERROR" | wc -l. cat читает файл. grep фильтрует строки с «ERROR». wc -l считает количество строк. Результат — число ошибок в логе. Три простых команды, скомбинированных в одну полезную.
Конвейер в PowerShell. Get-ChildItem | Where-Object { $_.Extension -eq ".txt" } делает то же самое: фильтрует файлы по расширению. Разница в том, что Where-Object работает не с текстом, а с объектами. $_ — это текущий объект в конвейере. $_.Extension — его свойство. Такой подход мощнее, потому что не зависит от формата вывода.
Пример посложнее: Get-ChildItem -Recurse | Where-Object { $_.Length -gt 1MB } | Sort-Object Length -Descending. Эта цепочка рекурсивно ищет все файлы, отбирает те, что больше мегабайта, и сортирует по размеру от большего к меньшему. В Bash такое сделать одной строкой уже непросто.
Перенаправление вывода в файл. Иногда результат нужно не увидеть на экране, а сохранить. Символ > перенаправляет вывод в файл, перезаписывая его. ls -l > files.txt создаст файл со списком. Символ >> добавляет вывод в конец файла, не стирая его содержимое. echo "Новая строка" >> log.txt допишет строку.
В PowerShell эти операторы работают так же. Но есть и альтернатива: Out-File и Add-Content. Get-ChildItem | Out-File files.txt сохранит вывод в файл.
Склеивание файлов. cat file1.txt file2.txt > merged.txt объединит два файла в один. Изначально команда cat для этого и создавалась — её имя происходит от concatenate (соединять). Вывод нескольких файлов склеивается и может быть перенаправлен в новый файл.
Конвейер передаёт вывод одной команды на вход другой, как конвейер на заводе
ls -la | grep "^d" — это покажет только папки (строки, начинающиеся с d). В PowerShell выполни Get-ChildItem | Where-Object { $_.PSIsContainer }. Затем попробуй сохранить результат в файл через > result.txt и проверь содержимое через cat result.txt.
| соединяет команды в цепочки. Bash передаёт текст, PowerShell — объекты. > сохраняет вывод в файл, >> добавляет в конец. Это база для автоматизации.
Поиск и фильтрация: находим иголку в стоге сена
Конвейер научил нас передавать данные между командами. Теперь пора освоить инструменты, которые помогают находить в этих данных нужное. Поиск — вторая по частоте операция после навигации. Разработчик постоянно что-то ищет: где лежит файл, в каком логе ошибка, какая строка кода вызывает проблему.
Поиск текста в выводе команд
Самый частый сценарий: ты получил список файлов, строк лога или какой-то другой вывод и хочешь оставить только те строки, которые содержат определённое слово.
Bash: grep. Команда grep (global regular expression print) фильтрует текст по шаблону. Она принимает поток строк и выводит только те, которые соответствуют условию. ls -l | grep ".txt" покажет только текстовые файлы. cat app.log | grep "ERROR" найдёт все строки с ошибками. grep -i "error" app.log — то же самое, но без учёта регистра. grep -v "DEBUG" app.log — наоборот, исключит строки с DEBUG и покажет всё остальное. grep умеет искать не только по точному совпадению, но и по регулярным выражениям, что даёт почти безграничные возможности для фильтрации.
PowerShell: Select-String. Аналог grep в PowerShell — Select-String. Get-Content app.log | Select-String "ERROR" найдёт строки с ошибками. Get-ChildItem | Select-String "TODO" просканирует содержимое файлов и найдёт те, где встречается слово TODO. PowerShell также поддерживает регулярные выражения.
Поиск файлов по имени
Иногда нужно найти файл, но ты не помнишь, в какой он папке. Или хочешь собрать все файлы определённого типа из проекта.
Bash: find. Команда find ищет файлы и папки по имени, типу, размеру и другим критериям. find . -name "*.txt" найдёт все текстовые файлы в текущей папке и всех вложенных. find . -type d -name "test*" найдёт все папки, имя которых начинается с test. find . -mtime -1 покажет файлы, изменённые за последние сутки.
PowerShell: Get-ChildItem с параметрами. PowerShell обходится без отдельной команды find — его Get-ChildItem умеет искать рекурсивно с фильтрацией. Get-ChildItem -Recurse -Filter "*.txt" найдёт все текстовые файлы. Get-ChildItem -Recurse | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-1) } покажет файлы, изменённые за последние 24 часа.
Поиск текста внутри файлов
Самая мощная разновидность поиска: найти не сам файл, а конкретную строку внутри десятков или сотен файлов.
Bash: grep -r. Рекурсивный grep сканирует все файлы в папке и её подпапках. grep -r "TODO" ./src/ найдёт все вхождения TODO в исходном коде. grep -rl "конкретная_функция" ./project/ покажет только имена файлов, без содержимого. Это незаменимо при рефакторинге и отладке.
PowerShell: Select-String с путём. Select-String -Path ".\src\*.js" -Pattern "TODO" просканирует все JavaScript-файлы и покажет строки с TODO. Работает быстро и удобно.
Пример из жизни
Допустим, твой веб-сервер упал, и ты хочешь понять причину. Логи лежат в /var/log/nginx/. Вот цепочка команд в Bash, которая даст ответ за секунды:
grep -r "ERROR" /var/log/nginx/ | tail -20
Эта строка рекурсивно ищет ERROR во всех логах nginx и показывает последние 20 совпадений. Ты сразу видишь, что произошло перед падением. Без терминала пришлось бы открывать несколько файлов в редакторе и листать их вручную.
grep и Select-String фильтруют текст по шаблону. find и Get-ChildItem ищут файлы по имени и свойствам. Рекурсивный поиск текста внутри файлов (grep -r) — один из самых мощных инструментов разработчика.
find или Get-ChildItem. Затем найди среди них те, которые содержат какое-нибудь слово, через grep -r или Select-String. Почувствуй, как быстро это работает по сравнению с графическим поиском.
Права доступа (Bash, основы)
Рано или поздно ты столкнёшься с ошибкой Permission denied. Она означает, что у тебя нет прав на выполнение операции. Понимание прав доступа — важная часть работы в терминале, особенно в Linux и macOS.
Три типа прав. В Unix-подобных системах у каждого файла и папки есть три типа доступа: чтение (read, r), запись (write, w) и выполнение (execute, x). Для файла «чтение» означает возможность просмотреть содержимое. «Запись» — изменить. «Выполнение» — запустить как программу. Для папки логика немного иная: «чтение» позволяет увидеть содержимое папки, «запись» — создавать и удалять файлы внутри, «выполнение» — входить в папку.
Три уровня. Права назначаются на трёх уровнях: владелец файла (user), группа (group) и все остальные (others). Когда ты вводишь ls -l, то видишь строку вида -rw-r--r--. Первый символ — тип (дефис для файла, d для папки). Следующие три символа — права владельца. Ещё три — права группы. Последние три — права остальных.
Команда chmod. Она меняет права доступа. chmod +x script.sh делает файл исполняемым для всех. chmod 755 script.sh устанавливает права в числовом виде: владелец может всё (7 = rwx), группа и остальные — читать и выполнять (5 = r-x). Для новичка достаточно запомнить chmod +x — эта команда пригодится, чтобы запускать скрипты.
Команда sudo. Иногда для операции нужны права суперпользователя. sudo (superuser do) выполняет команду от имени root. sudo apt update обновит список пакетов в Linux. sudo rm protected_file.txt удалит защищённый файл. С sudo нужно быть осторожным: он снимает все ограничения. Не злоупотребляй и всегда перепроверяй команду перед запуском с sudo.
В PowerShell концепция прав другая, основанная на ACL (списках контроля доступа). Для новичка важнее знать, что запуск PowerShell от имени администратора даёт повышенные привилегии, а для управления правами есть команды Get-Acl и Set-Acl.
chmod +x делает файл запускаемым. sudo даёт права суперпользователя. С sudo будь осторожен.
Простые скрипты: автоматизируем рутину
Скрипт — это просто текстовый файл с командами. Ты берёшь последовательность действий, которую выполняешь регулярно, записываешь в файл и запускаешь одной командой. Это и есть автоматизация.
Bash-скрипт для бэкапа. Представь, что каждый день ты копируешь папку с проектом в другое место, чтобы не потерять данные. Вот как это автоматизировать:
#!/bin/bash
BACKUP_DIR=~/backups/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
cp -r ~/project/* $BACKUP_DIR
echo "Бэкап сохранён в $BACKUP_DIR"
Разберём построчно. #!/bin/bash — шебанг, он говорит системе, какой интерпретатор использовать. BACKUP_DIR=~/backups/$(date +%Y%m%d) создаёт переменную с путём к папке бэкапа и сегодняшней датой. mkdir -p $BACKUP_DIR создаёт папку, если её нет. cp -r ~/project/* $BACKUP_DIR копирует все файлы проекта. echo выводит сообщение об успехе.
Сохрани этот код в файл backup.sh. Сделай его исполняемым: chmod +x backup.sh. Запусти: ./backup.sh. Готово. Ты только что написал свою первую программу для автоматизации.
PowerShell-скрипт для бэкапа. Та же задача на PowerShell:
$backupDir = "$home\backups\$(Get-Date -Format 'yyyyMMdd')"
New-Item -ItemType Directory -Force -Path $backupDir
Copy-Item -Path "$home\project\*" -Destination $backupDir -Recurse
Write-Host "Бэкап сохранён в $backupDir"
Принцип тот же. $backupDir — переменная с путём. New-Item -Force создаёт папку. Copy-Item -Recurse копирует файлы. Write-Host выводит сообщение. Сохрани как backup.ps1 и запусти из PowerShell: .\backup.ps1. Возможно, потребуется разрешить выполнение скриптов командой Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
Почему скрипты важны. Скрипт делает две вещи: экономит время и исключает человеческую ошибку. Когда ты автоматизируешь рутинную задачу, ты больше никогда не забудешь важный шаг и не сделаешь опечатку. Скрипт выполнит всё одинаково в сотый и в тысячный раз.
chmod +x делает скрипт исполняемым. Автоматизация экономит время и исключает ошибки.
Типичные ошибки новичков и как их читать
Ошибки в терминале — это нормально. Они не значат, что ты сделал что-то непоправимое. Чаще всего терминал просто говорит: «Я не понял, что ты имеешь в виду». Научись читать ошибки — и ты перестанешь их бояться.
command not found (Bash) / The term is not recognized (PowerShell). Самая частая ошибка. Терминал не знает такую команду. Причины: опечатка, программа не установлена, или команда набрана с неправильным регистром. Bash и PowerShell чувствительны к регистру. LS и ls — разные вещи. Решение: проверь написание, убедись, что программа установлена (which имя_программы в Bash), исправь регистр.
Permission denied. Нет прав на выполнение операции. Для файла — забыл chmod +x. Для системной операции — нужен sudo. Для чужого файла — нужно запросить доступ у владельца. Это защита, а не наказание.
No such file or directory. Файл или папка не найдены. Причины: опечатка в пути, забыл перейти в нужную папку, пробелы в имени файла без кавычек. Лайфхак с пробелами: всегда заключай имена файлов с пробелами в кавычки. cd "My Documents" работает, cd My Documents — нет. Альтернатива — обратный слеш перед пробелом: cd My\ Documents.
is a directory. Ты пытаешься выполнить операцию, предназначенную для файла, над папкой. Например, cat на папку выдаст эту ошибку. cat ожидает файл. Для папки используй ls.
syntax error near unexpected token (Bash). Обычно означает, что ты забыл закрыть кавычку или скобку. Проверь парные символы: каждая открывающая кавычка должна иметь закрывающую. Это как скобки в математике.
Access to the path is denied (PowerShell). Аналог Permission denied. Часто возникает при попытке записать файл в защищённую папку вроде C:\Program Files. Решение: запусти PowerShell от имени администратора или выбери другую папку для записи.
Ошибки в PowerShell. Они красные и многострочные. Не пугайся объёма. Читай первую строку — она самая полезная. Обычно там сказано, что именно пошло не так. Остальное — стек вызовов, который новичку редко бывает нужен.
Универсальный совет. Если видишь ошибку, которую не понимаешь — скопируй её текст в поисковик. Заключи в кавычки для точного поиска. С вероятностью 99% кто-то уже сталкивался с этой ошибкой, и решение есть на Stack Overflow. Это навык, который используют даже опытные разработчики. Никто не помнит все ошибки наизусть.
Ошибка в терминале ├── "command not found" → Проверь написание, установи программу ├── "Permission denied" → Нужен sudo или chmod +x ├── "No such file or directory" → Проверь путь, добавь кавычки для пробелов ├── "is a directory" → Ты используешь папку как файл, проверь команду ├── "syntax error" → Проверь парные кавычки и скобки └── Непонятная ошибка → Скопируй в Google в кавычках
command not found — проверь написание. Permission denied — проверь права. No such file or directory — проверь путь. Гугли ошибку целиком в кавычках.
Шпаргалка: 23 команды на каждый день
Сохрани эту шпаргалку. В первые недели она будет твоей опорой.
pwdpwdlslsls -lls | Format-Tablels -als -Forcecd папкаcd папкаcd ..cd ..cd ~cd ~mkdir папкаmkdir папкаtouch файлNew-Item файлcp что кудаCopy-Item что кудаmv что кудаMove-Item что кудаrm файлRemove-Item файлrm -r папкаRemove-Item -Recurse папкаcat файлcat файлhead файлGet-Content -Head файлtail файлGet-Content -Tail файлtail -f файлGet-Content -Wait файлgrep "слово"Select-String "слово"find . -name "*.txt"Get-ChildItem -Recurse -Filter "*.txt"clearClear-Hostwc -lMeasure-Object -LinechmodGet-Acl / Set-Aclman командаGet-Help командаСохрани эту шпаргалку — она выручит в первые недели работы
Что дальше: куда расти
Ты освоил базу. Её хватит для повседневной работы. Но терминал — это бездонный инструмент. Вот несколько направлений, куда стоит копнуть дальше, когда почувствуешь уверенность.
Очистка экрана. Самая простая и недооценённая команда. После десятка операций терминал захламляется. clear в Bash (или Ctrl+L) и Clear-Host в PowerShell очистят экран и вернут приглашение командной строки наверх. Попробуй прямо сейчас.
Алиасы. Если ты часто вводишь длинную команду, создай для неё короткое имя. В Bash: alias gp="git push". После этого gp будет работать как git push. В PowerShell: Set-Alias gp git push. Алиасы живут до закрытия терминала, а чтобы сохранить их навсегда, пропиши в конфигурационном файле (~/.bashrc или профиль PowerShell).
История команд. Терминал помнит всё, что ты вводил. history в Bash покажет список последних команд. Get-History в PowerShell делает то же. Нажми Ctrl+R и начни вводить часть команды — оболочка найдёт её в истории. Повторное нажатие Ctrl+R листает варианты. Это спасает, когда нужно повторить команду из прошлой недели.
Переменные окружения. Это глобальные настройки системы. echo $PATH в Bash покажет список папок, где оболочка ищет программы. $env:PATH в PowerShell. Понимание переменных окружения пригодится, когда ты начнёшь настраивать языки программирования и инструменты разработки.
Менеджеры пакетов. Командная строка — основной способ установки программ для разработчика. macOS: Homebrew (brew install). Linux: apt (sudo apt install) или dnf. Windows: winget (winget install) или Chocolatey. Графический установщик — это прошлый век. Терминал + менеджер пакетов = скорость и воспроизводимость.
Следующая статья. Когда освоишь терминал, пора браться за Git. Это система контроля версий, без которой не обходится ни один современный проект. В нашем следующем гайде «Что такое Git и как им пользоваться: от коммита до пулл-реквеста» ты научишься сохранять историю изменений, работать с ветками и участвовать в командной разработке.
Заключение
Терминал — это не страшно. Это удобно. Сегодня ты сделал первый и самый важный шаг: перестал бояться чёрного экрана и начал говорить с компьютером на его языке.
Ты узнал, как открывать терминал в любой операционной системе. Научился ориентироваться в файловой системе с помощью pwd, ls и cd. Освоил создание, копирование, перемещение и удаление файлов и папок. Научился заглядывать внутрь файлов через cat, less, head и tail. Понял, как работает конвейер и как комбинировать простые команды в мощные цепочки. Освоил поиск файлов и текста через grep, find и их PowerShell-аналоги. Написал свой первый скрипт для автоматизации. Узнал, что ошибки — это не приговор, а подсказка.
Это база. Её достаточно для уверенной работы. Всё остальное — практика и постепенное расширение кругозора.
Открой терминал прямо сейчас. Попробуй три команды из шпаргалки. Перейди в папку с проектами. Посмотри, какие файлы там лежат. Найди среди них текстовые файлы через grep. Очисти экран через clear. Сделай это. Прямо сейчас. Через неделю ты будешь чувствовать себя в терминале как рыба в воде.
Дальше будет Git, Docker и много практики. Подпишись на обновления блога, чтобы не пропустить следующие статьи.
Мы собрали все команды из статьи в компактный PDF. Сохрани на рабочий стол или распечатай — пригодится в первую неделю работы с терминалом.
Скачать PDF