Глава 0.3: Терминал и командная строка
Базовые команды, навигация, почему это важно
Зачем разработчику терминал?
Ты можешь подумать: "Зачем мне эта чёрная консоль, если есть красивые интерфейсы?"
Вот почему терминал необходим PHP-разработчику:
┌─────────────────────────────────────────────────────────────────┐
│ ИНСТРУМЕНТЫ, КОТОРЫЕ РАБОТАЮТ │
│ ТОЛЬКО ЧЕРЕЗ ТЕРМИНАЛ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📦 Composer — менеджер пакетов PHP │
│ 🎨 Laravel — artisan команды │
│ 📝 Git — контроль версий │
│ 🐳 Docker — контейнеризация │
│ 📡 SSH — подключение к серверам │
│ 🔧 npm/node — frontend инструменты │
│ 🗄️ MySQL — работа с базой данных │
│ 🧪 PHPUnit — тестирование │
│ │
└─────────────────────────────────────────────────────────────────┘Если ты не умеешь работать с терминалом — ты не сможешь:
- Установить Laravel
- Управлять зависимостями через Composer
- Использовать Git
- Деплоить проекты на сервер
Терминал — это не опция. Это обязательный навык.
1. Какой терминал использовать?
Windows
| Терминал | Описание | Рекомендация |
|---|---|---|
| CMD | Старый, ограниченный | ❌ Не рекомендую |
| PowerShell | Мощный, встроенный | ✅ Годится |
| Git Bash | Unix-команды на Windows | ⭐ Рекомендую |
| Windows Terminal | Современный, красивый | ⭐ Лучший выбор |
| WSL | Полноценный Linux | ⭐ Для продвинутых |
Моя рекомендация: Установи Windows Terminal из Microsoft Store и используй Git Bash внутри него.
macOS
| Терминал | Описание |
|---|---|
| Terminal.app | Встроенный, достаточный |
| iTerm2 | Продвинутый, с фишками |
Оболочка по умолчанию — zsh (с macOS Catalina).
Linux
Любой эмулятор терминала + bash или zsh.
2. Установка Git Bash (Windows)
Git Bash даёт тебе Unix-команды на Windows. Это важно, потому что большинство туториалов написаны под Linux/Mac.
Шаг 1: Скачай Git
- Перейди на https://git-scm.com/downloads
- Скачай версию для Windows
- Запусти установщик
Шаг 2: Настройки при установке
Оставь всё по умолчанию, кроме:
Select Components:
✅ Git Bash Here (добавляет в контекстное меню)
✅ Git GUI Here
Choosing the default editor:
→ Выбери "Use Visual Studio Code as Git's default editor"
Adjusting your PATH:
→ "Git from the command line and also from 3rd-party software"
Choosing HTTPS transport backend:
→ "Use the OpenSSL library"
Line ending conversions:
→ "Checkout Windows-style, commit Unix-style line endings"Шаг 3: Проверь установку
Открой Git Bash (найди в меню Пуск) и выполни:
git --versionДолжно показать что-то вроде:
git version 2.43.0.windows.13. Установка Windows Terminal
Шаг 1: Установка
- Открой Microsoft Store
- Найди "Windows Terminal"
- Установи
Шаг 2: Настрой Git Bash как профиль
- Открой Windows Terminal
- Нажми стрелку вниз рядом с вкладками → Параметры
- Слева: Добавить новый профиль → Новый пустой профиль
- Заполни:
- Имя:
Git Bash - Командная строка:
C:\Program Files\Git\bin\bash.exe - Начальный каталог:
%USERPROFILE% - Значок:
C:\Program Files\Git\mingw64\share\git\git-for-windows.ico
- Имя:
- Сохрани
Шаг 3: Сделай Git Bash по умолчанию
В настройках: Запуск → Профиль по умолчанию → Git Bash
4. Анатомия терминала
Когда ты открываешь терминал, ты видишь приглашение (prompt):
user@computer:~/projects$
│ │ │ │
│ │ │ └── $ означает "готов к вводу"
│ │ │
│ │ └── Текущая директория (~ = домашняя папка)
│ │
│ └── Имя компьютера
│
└── Имя пользователяВ Git Bash на Windows:
username@DESKTOP-ABC123 MINGW64 ~/projects
$Важно: Когда в туториалах пишут команду, символ $ — это просто обозначение приглашения. Его не нужно вводить.
# В туториале написано:
$ php -v
# Ты вводишь только:
php -v5. Файловая система: как компьютер хранит файлы
Прежде чем учить команды, нужно понять структуру файловой системы.
Windows
C:\
├── Users\
│ └── YourName\
│ ├── Desktop\
│ ├── Documents\
│ └── Downloads\
├── Program Files\
├── Windows\
└── laragon\
└── www\
└── my-project\Разделитель папок: \ (обратный слэш)
Linux/Mac (и Git Bash)
/
├── home/
│ └── username/
│ ├── Desktop/
│ ├── Documents/
│ └── projects/
├── var/
│ └── www/
├── etc/
└── usr/Разделитель папок: / (прямой слэш)
Важные обозначения
| Символ | Значение | Пример |
|---|---|---|
/ | Корень файловой системы | /home/user |
~ | Домашняя папка пользователя | ~/projects = /home/user/projects |
. | Текущая директория | ./file.php = файл в текущей папке |
.. | Родительская директория | ../ = на уровень выше |
6. Навигация: перемещение по папкам
pwd — где я сейчас?
Print Working Directory — показывает текущую директорию.
$ pwd
/home/user/projectsls — что здесь есть?
List — показывает содержимое директории.
$ ls
file1.txt file2.php folder1 folder2Полезные флаги ls:
# Подробный список (права, размер, дата)
$ ls -l
-rw-r--r-- 1 user user 1234 Jan 27 10:00 file1.txt
drwxr-xr-x 2 user user 4096 Jan 27 09:00 folder1
# Показать скрытые файлы (начинаются с точки)
$ ls -a
. .. .gitignore .env file1.txt folder1
# Комбинация: подробно + скрытые
$ ls -la
# Человекочитаемые размеры (KB, MB)
$ ls -lhРасшифровка ls -l:
-rw-r--r-- 1 user group 1234 Jan 27 10:00 file.txt
│├──┤├─┤├─┤ │ │ │ │ │ │
││ │ │ │ │ │ │ │ └── Имя файла
││ │ │ │ │ │ │ └── Дата изменения
││ │ │ │ │ │ └── Размер в байтах
││ │ │ │ │ └── Группа владельца
││ │ │ │ └── Владелец
││ │ │ └── Количество ссылок
││ │ └── Права для остальных (r=read, w=write, x=execute)
││ └── Права для группы
│└── Права для владельца
└── Тип (- = файл, d = директория)cd — перейти в папку
Change Directory — переход в другую директорию.
# Перейти в папку projects
$ cd projects
# Перейти на уровень выше
$ cd ..
# Перейти на два уровня выше
$ cd ../..
# Перейти в домашнюю папку
$ cd ~
$ cd # Просто cd без аргументов тоже работает
# Перейти по абсолютному пути
$ cd /var/www/html
# Перейти в предыдущую директорию
$ cd -Практика навигации
# Допустим, ты в домашней папке
$ pwd
/home/user
# Посмотри, что есть
$ ls
Desktop Documents Downloads projects
# Перейди в projects
$ cd projects
# Проверь, где ты
$ pwd
/home/user/projects
# Посмотри содержимое
$ ls
calculator phonebook
# Перейди в calculator
$ cd calculator
# Вернись назад
$ cd ..
# Или сразу домой
$ cd ~7. Работа с файлами и папками
mkdir — создать папку
Make Directory
# Создать папку
$ mkdir my-project
# Создать вложенные папки (с флагом -p)
$ mkdir -p projects/php/calculator
# Создаст projects, внутри php, внутри calculatortouch — создать файл
# Создать пустой файл
$ touch index.php
# Создать несколько файлов
$ touch file1.php file2.php file3.phpcp — копировать
Copy
# Копировать файл
$ cp file.txt copy.txt
# Копировать файл в папку
$ cp file.txt folder/
# Копировать папку (с флагом -r, recursive)
$ cp -r folder1 folder2mv — переместить/переименовать
Move
# Переместить файл в папку
$ mv file.txt folder/
# Переименовать файл
$ mv old-name.txt new-name.txt
# Переместить и переименовать
$ mv file.txt folder/newname.txtrm — удалить
Remove
# Удалить файл
$ rm file.txt
# Удалить папку (пустую)
$ rmdir folder
# Удалить папку с содержимым (ОСТОРОЖНО!)
$ rm -r folder
# Удалить с подтверждением
$ rm -i file.txt
# Принудительно, без вопросов (ОЧЕНЬ ОСТОРОЖНО!)
$ rm -rf folder⚠️ ВНИМАНИЕ: rm удаляет безвозвратно. Нет корзины, нет отмены. Дважды проверяй команду перед выполнением!
# ЭТО УДАЛИТ ВСЮ СИСТЕМУ (никогда не делай!)
$ rm -rf /
# Поэтому всегда проверяй путь:
$ rm -rf ./folder # Точка в начале = текущая папка, безопаснее8. Просмотр содержимого файлов
cat — показать содержимое
$ cat file.txt
Привет, это содержимое файла.
Вторая строка.head / tail — начало / конец файла
# Первые 10 строк
$ head file.txt
# Первые 5 строк
$ head -n 5 file.txt
# Последние 10 строк
$ tail file.txt
# Последние 20 строк
$ tail -n 20 file.txt
# Следить за файлом в реальном времени (логи!)
$ tail -f /var/log/apache2/error.logless — постраничный просмотр
$ less large-file.txtУправление в less:
Space— следующая страницаb— предыдущая страница/text— поиск "text"n— следующее совпадениеq— выход
9. Поиск
find — поиск файлов
# Найти все PHP-файлы в текущей папке и подпапках
$ find . -name "*.php"
# Найти файл по имени
$ find . -name "index.php"
# Найти папки
$ find . -type d -name "config"
# Найти файлы больше 10MB
$ find . -size +10Mgrep — поиск текста в файлах
# Найти строку в файле
$ grep "function" file.php
# Поиск во всех PHP-файлах
$ grep "echo" *.php
# Рекурсивный поиск (во всех подпапках)
$ grep -r "password" .
# Показать номера строк
$ grep -n "TODO" *.php
# Игнорировать регистр
$ grep -i "error" log.txt10. Редактирование файлов
nano — простой редактор
$ nano file.txt┌────────────────────────────────────────────────────────────┐
│ GNU nano 6.2 file.txt │
├────────────────────────────────────────────────────────────┤
│ │
│ Тут ты редактируешь текст │
│ │
│ │
├────────────────────────────────────────────────────────────┤
│ ^G Help ^O Write Out ^W Where Is ^K Cut ^X Exit │
└────────────────────────────────────────────────────────────┘Ctrl+O— сохранитьCtrl+X— выйтиCtrl+W— поискCtrl+K— вырезать строкуCtrl+U— вставить
vim — продвинутый редактор
$ vim file.txtVim сложнее, но мощнее. Базовые команды:
i— режим вставки (можно печатать)Esc— выйти из режима вставки:w— сохранить:q— выйти:wq— сохранить и выйти:q!— выйти без сохранения
Совет: Для начала используй nano. Vim изучишь позже, если захочешь.
11. Перенаправление и пайпы
> и >> — запись в файл
# Записать вывод в файл (перезаписать)
$ echo "Hello" > file.txt
# Добавить в конец файла
$ echo "World" >> file.txt
# Записать список файлов
$ ls -la > file-list.txt| — пайп (конвейер)
Передаёт вывод одной команды на вход другой.
# Найти PHP-файлы и посчитать их
$ find . -name "*.php" | wc -l
# Показать только первые 5 результатов поиска
$ grep -r "function" . | head -n 5
# Найти процесс
$ ps aux | grep "php"wc — подсчёт
Word Count
# Количество строк, слов, символов
$ wc file.txt
10 45 234 file.txt
# 10 строк, 45 слов, 234 символа
# Только строки
$ wc -l file.txt
# Посчитать файлы в папке
$ ls | wc -l12. Права доступа (Linux/Mac)
Понимание прав
-rwxr-xr--
│││ │││ │││
│││ │││ └┴┴── Остальные: r-- (только чтение)
│││ └┴┴────── Группа: r-x (чтение + выполнение)
└┴┴────────── Владелец: rwx (всё)r(read) — чтениеw(write) — записьx(execute) — выполнение
chmod — изменить права
# Сделать файл исполняемым
$ chmod +x script.sh
# Числовая запись (rwx = 4+2+1 = 7)
$ chmod 755 script.sh # rwxr-xr-x
$ chmod 644 file.txt # rw-r--r--chown — изменить владельца
$ chown user:group file.txt
$ chown -R user:group folder/ # Рекурсивно13. Переменные окружения
Просмотр
# Все переменные
$ env
# Конкретная переменная
$ echo $PATH
$ echo $HOME
$ echo $USERPATH — важнейшая переменная
PATH содержит список папок, где система ищет исполняемые файлы.
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/home/user/.local/binКогда ты вводишь php, система ищет файл php в этих папках.
Добавление в PATH (временно)
$ export PATH=$PATH:/new/pathДобавление в PATH (постоянно)
Добавь в файл ~/.bashrc (или ~/.zshrc для zsh):
export PATH=$PATH:/new/pathЗатем:
$ source ~/.bashrc14. Полезные команды для разработки
clear — очистить экран
$ clearИли сочетание Ctrl+L
history — история команд
$ history
501 cd projects
502 ls
503 php -vВыполнить команду из истории:
$ !503 # Выполнит php -vwhich — где находится программа
$ which php
/usr/bin/php
$ which composer
/usr/local/bin/composerman — документация
$ man ls # Документация по ls
$ man grep # Документация по grepНавигация как в less, выход — q.
curl — HTTP-запросы
# GET-запрос
$ curl https://example.com
# Показать заголовки
$ curl -I https://example.com
# POST-запрос
$ curl -X POST -d "name=Ivan" https://example.com/api
# Сохранить в файл
$ curl -o file.html https://example.comwget — скачивание файлов
$ wget https://example.com/file.zip15. Команды для PHP-разработки
PHP
# Версия
$ php -v
# Выполнить код
$ php -r "echo 'Hello';"
# Выполнить файл
$ php script.php
# Запустить сервер
$ php -S localhost:8000
# Проверить синтаксис
$ php -l file.php
# Интерактивный режим
$ php -a
Interactive shell
php > echo 1 + 1;
2
php > exitComposer
# Версия
$ composer -V
# Создать проект
$ composer create-project laravel/laravel my-app
# Установить зависимости
$ composer install
# Добавить пакет
$ composer require guzzlehttp/guzzle
# Добавить dev-зависимость
$ composer require --dev phpunit/phpunit
# Обновить пакеты
$ composer update
# Автозагрузка
$ composer dump-autoloadGit (подробнее в отдельной главе)
# Инициализация
$ git init
# Статус
$ git status
# Добавить файлы
$ git add .
# Коммит
$ git commit -m "Initial commit"
# Отправить на сервер
$ git push origin mainLaravel Artisan
# Список команд
$ php artisan list
# Создать контроллер
$ php artisan make:controller UserController
# Создать модель с миграцией
$ php artisan make:model Post -m
# Миграции
$ php artisan migrate
# Очистить кеш
$ php artisan cache:clear16. Горячие клавиши терминала
| Сочетание | Действие |
|---|---|
Tab | Автодополнение команд и путей |
Ctrl+C | Прервать выполнение |
Ctrl+D | Выход (то же, что exit) |
Ctrl+L | Очистить экран |
Ctrl+A | В начало строки |
Ctrl+E | В конец строки |
Ctrl+U | Удалить от курсора до начала |
Ctrl+K | Удалить от курсора до конца |
Ctrl+W | Удалить слово перед курсором |
Ctrl+R | Поиск по истории |
↑ / ↓ | Предыдущая/следующая команда |
!! | Повторить последнюю команду |
Tab — твой лучший друг
# Введи начало и нажми Tab
$ cd pro[Tab]
$ cd projects/ # Автодополнение!
# Если несколько вариантов — Tab дважды покажет список
$ cd p[Tab][Tab]
photos/ projects/ public/17. Алиасы — свои сокращения
Устал вводить длинные команды? Создай алиас!
Временный алиас
$ alias ll="ls -la"
$ alias ..="cd .."
$ alias gs="git status"
# Теперь можно:
$ ll
$ ..
$ gsПостоянные алиасы
Добавь в ~/.bashrc или ~/.zshrc:
# Навигация
alias ..="cd .."
alias ...="cd ../.."
alias ll="ls -la"
# Git
alias gs="git status"
alias ga="git add"
alias gc="git commit"
alias gp="git push"
alias gl="git log --oneline"
# PHP
alias pa="php artisan"
alias serve="php -S localhost:8000"
# Composer
alias ci="composer install"
alias cu="composer update"
alias cr="composer require"После изменения:
$ source ~/.bashrc18. Шпаргалка команд
┌─────────────────────────────────────────────────────────────────┐
│ ШПАРГАЛКА ТЕРМИНАЛА │
├──────────────────┬──────────────────────────────────────────────┤
│ НАВИГАЦИЯ │ │
├──────────────────┼──────────────────────────────────────────────┤
│ pwd │ Где я? │
│ ls │ Что здесь? │
│ ls -la │ Подробный список + скрытые │
│ cd folder │ Перейти в папку │
│ cd .. │ На уровень выше │
│ cd ~ │ В домашнюю папку │
│ cd - │ В предыдущую папку │
├──────────────────┼──────────────────────────────────────────────┤
│ ФАЙЛЫ И ПАПКИ │ │
├──────────────────┼──────────────────────────────────────────────┤
│ mkdir folder │ Создать папку │
│ mkdir -p a/b/c │ Создать вложенные папки │
│ touch file │ Создать файл │
│ cp src dst │ Копировать │
│ cp -r dir1 dir2 │ Копировать папку │
│ mv src dst │ Переместить/переименовать │
│ rm file │ Удалить файл │
│ rm -r folder │ Удалить папку с содержимым │
├──────────────────┼──────────────────────────────────────────────┤
│ ПРОСМОТР │ │
├──────────────────┼──────────────────────────────────────────────┤
│ cat file │ Показать содержимое │
│ head file │ Первые 10 строк │
│ tail file │ Последние 10 строк │
│ tail -f file │ Следить за файлом │
│ less file │ Постраничный просмотр │
├──────────────────┼──────────────────────────────────────────────┤
│ ПОИСК │ │
├──────────────────┼──────────────────────────────────────────────┤
│ find . -name "x" │ Найти файл по имени │
│ grep "text" file │ Найти текст в файле │
│ grep -r "t" . │ Рекурсивный поиск текста │
├──────────────────┼──────────────────────────────────────────────┤
│ РАЗНОЕ │ │
├──────────────────┼──────────────────────────────────────────────┤
│ clear / Ctrl+L │ Очистить экран │
│ history │ История команд │
│ which program │ Где находится программа │
│ echo $VAR │ Показать переменную │
│ Ctrl+C │ Прервать выполнение │
│ Tab │ Автодополнение │
└──────────────────┴──────────────────────────────────────────────┘19. Упражнения
Упражнение 1: Навигация (10 минут)
# 1. Открой терминал и узнай, где ты
$ pwd
# 2. Перейди в домашнюю папку
$ cd ~
# 3. Посмотри содержимое
$ ls -la
# 4. Создай папку для проектов
$ mkdir -p projects/php-learning
# 5. Перейди в неё
$ cd projects/php-learning
# 6. Проверь путь
$ pwd
# Должно быть: /home/user/projects/php-learningУпражнение 2: Создание структуры проекта (15 минут)
Создай структуру с помощью команд терминала:
calculator/
├── index.php
├── css/
│ └── style.css
├── js/
│ └── script.js
└── includes/
├── header.php
└── footer.phpРешение:
$ mkdir calculator
$ cd calculator
$ touch index.php
$ mkdir css js includes
$ touch css/style.css
$ touch js/script.js
$ touch includes/header.php includes/footer.php
# Проверь результат
$ ls -RУпражнение 3: Работа с файлами (10 минут)
# 1. Создай файл test.txt
$ echo "Первая строка" > test.txt
# 2. Добавь ещё строку
$ echo "Вторая строка" >> test.txt
# 3. Посмотри содержимое
$ cat test.txt
# 4. Скопируй файл
$ cp test.txt backup.txt
# 5. Переименуй оригинал
$ mv test.txt renamed.txt
# 6. Удали backup
$ rm backup.txt
# 7. Проверь, что осталось
$ lsУпражнение 4: Поиск (15 минут)
# 1. Перейди в папку с каким-нибудь проектом (или создай тестовые файлы)
# 2. Найди все PHP-файлы
$ find . -name "*.php"
# 3. Найди файлы, где есть слово "echo"
$ grep -r "echo" .
# 4. Посчитай количество PHP-файлов
$ find . -name "*.php" | wc -l
# 5. Найди самый большой файл
$ ls -lhS | head -5Упражнение 5: PHP из терминала (10 минут)
# 1. Проверь версию PHP
$ php -v
# 2. Выполни простой код
$ php -r "echo 2 + 2;"
# 3. Создай файл hello.php
$ echo '<?php echo "Hello from CLI!\n";' > hello.php
# 4. Выполни его
$ php hello.php
# 5. Проверь синтаксис
$ php -l hello.php
# 6. Запусти встроенный сервер (и открой http://localhost:8000)
$ php -S localhost:8000
# Ctrl+C чтобы остановить20. Вопросы для самопроверки
Что делает команда
cd ..?Чем отличается
>от>>?Как создать папку с подпапками одной командой?
Что означает
~в пути?Как найти все PHP-файлы в проекте?
Что делает
|(пайп)?Как посмотреть последние 20 строк файла?
Зачем нужен Tab в терминале?
21. Частые ошибки
"command not found"
$ composr install
bash: composr: command not foundПричина: Опечатка или программа не установлена / не в PATH.
Решение: Проверь написание. Установи программу. Добавь в PATH.
"Permission denied"
$ ./script.sh
bash: ./script.sh: Permission deniedРешение:
$ chmod +x script.sh
$ ./script.sh"No such file or directory"
$ cd projetcs
bash: cd: projetcs: No such file or directoryПричина: Папка не существует или опечатка.
Решение: Проверь ls, используй Tab для автодополнения.
Застрял в vim
Если случайно открыл vim и не можешь выйти:
Нажми Esc, затем введи :q! и нажми EnterРезюме главы
┌────────────────────────────────────────────────────────────────┐
│ ЗАПОМНИ ГЛАВНОЕ │
├────────────────────────────────────────────────────────────────┤
│ │
│ • Терминал — обязательный инструмент разработчика │
│ • pwd, ls, cd — базовая навигация │
│ • mkdir, touch, cp, mv, rm — работа с файлами │
│ • Tab — автодополнение, используй постоянно! │
│ • Ctrl+C — прервать, Ctrl+L — очистить │
│ • find и grep — поиск файлов и текста │
│ • > записывает в файл, >> добавляет │
│ • | (pipe) — передаёт вывод следующей команде │
│ • Алиасы экономят время на частых командах │
│ │
└────────────────────────────────────────────────────────────────┘Следующая глава: Глава 1.1: Синтаксис PHP — переменные, типы данных, операторы, как PHP выполняет код