Bash основы
Командная оболочка для взаимодействия с ОС через текстовые команды: навигация, файлы, потоки
Зачем нужно
- Управлять файлами и процессами быстрее чем через GUI
- Работать с Git, npm, серверами
- Автоматизировать рутинные задачи
- Работать на серверах без графического интерфейса
Где используется
- Ежедневная разработка (Git, npm, сборка)
- Системное администрирование
- CI/CD пайплайны
- Docker и серверы
Предпосылки
- Базовое понимание файловой системы
Что такое Shell
Shell (оболочка) — программа-посредник между пользователем и ОС.
| Shell | Система | Описание |
|---|---|---|
| Bash | Linux, macOS (до Catalina) | Самый распространённый |
| Zsh | macOS (с Catalina) | Расширенный Bash |
| PowerShell | Windows | Объектно-ориентированный |
| Git Bash | Windows | Bash-эмулятор для Windows |
# Узнать текущий shell
echo $SHELL
# /bin/bash или /bin/zsh
Навигация по файловой системе
pwd — текущая директория
pwd
# /home/user/projects
ls — содержимое директории
# Базовый вывод
ls
# Подробный список
ls -l
# drwxr-xr-x 4 user group 128 Apr 6 10:00 src
# -rw-r--r-- 1 user group 256 Apr 6 10:00 index.js
# Показать скрытые файлы
ls -a
# Комбинировать: подробный + скрытые
ls -la
# Человеко-читаемые размеры
ls -lh
# -rw-r--r-- 1 user group 2.5K index.js
# Сортировка по времени (новые первые)
ls -lt
# Рекурсивно (все вложенные)
ls -R
cd — переход в директорию
# Перейти в папку
cd projects
# В домашнюю директорию
cd ~
# или просто
cd
# На уровень вверх
cd ..
# Два уровня вверх
cd ../..
# В предыдущую директорию
cd -
# Абсолютный путь
cd /home/user/projects/my-app
Работа с файлами и папками
Создание
# Создать файл (пустой или обновить дату)
touch index.html
touch style.css script.js # несколько файлов
# Создать папку
mkdir src
# Создать вложенные папки
mkdir -p src/components/ui
# Создать файл с содержимым
echo "Hello World" > hello.txt
# Многострочный контент
cat > config.txt << 'EOF'
host=localhost
port=3000
EOF
Копирование
# Копировать файл
cp index.html backup.html
# Копировать в папку
cp index.html src/
# Копировать папку (рекурсивно)
cp -r src/ src-backup/
Перемещение и переименование
# Переместить файл
mv old-file.js src/
# Переименовать
mv old-name.js new-name.js
# Переместить и переименовать
mv src/temp.js dist/main.js
Удаление
# Удалить файл
rm temp.txt
# Удалить папку (рекурсивно)
rm -r old-folder/
# Удалить принудительно (без подтверждения) — ОСТОРОЖНО!
rm -rf node_modules/
# Удалить пустую папку
rmdir empty-folder/
Просмотр файлов
# Вывести содержимое
cat index.html
# С нумерацией строк
cat -n index.html
# Постраничный просмотр
less index.html
# q — выйти, / — поиск, n — следующее совпадение
# Первые/последние строки
head -20 log.txt # первые 20 строк
tail -20 log.txt # последние 20 строк
tail -f log.txt # следить за файлом в реальном времени
echo — вывод текста
echo "Hello, World!"
# Записать в файл (перезаписать)
echo "новый текст" > file.txt
# Дописать в файл
echo "ещё строка" >> file.txt
# Переменные окружения
echo $HOME
echo $PATH
echo $USER
Pipes и перенаправление
Pipe (|) — передача вывода
# Вывод одной команды → вход другой
ls -la | head -5 # первые 5 строк вывода ls
cat log.txt | wc -l # количество строк в файле
history | grep "git" # найти git-команды в истории
Перенаправление
# > — записать в файл (перезаписать)
echo "data" > output.txt
# >> — дописать в файл
echo "more data" >> output.txt
# 2> — перенаправить ошибки
npm build 2> errors.log
# &> — и stdout, и stderr
npm build &> all-output.log
# /dev/null — отбросить вывод
npm install > /dev/null 2>&1
Полезные операторы
# && — следующая команда ТОЛЬКО если предыдущая успешна
mkdir project && cd project && git init
# || — следующая команда ТОЛЬКО если предыдущая провалилась
cd project || echo "Папка не найдена"
# ; — выполнить последовательно (независимо от результата)
echo "start"; npm test; echo "done"
Переменные
# Создать переменную (без пробелов вокруг =)
NAME="Ivan"
PORT=3000
# Использовать
echo "Hello, $NAME"
echo "Server on port $PORT"
# Переменные окружения
export NODE_ENV=production
# Посмотреть все переменные окружения
env
# Подстановка команды
CURRENT_DATE=$(date)
FILE_COUNT=$(ls | wc -l)
echo "Файлов: $FILE_COUNT"
Права доступа (кратко)
# Формат: rwx rwx rwx
# │ │ └── Остальные (others)
# │ └────── Группа (group)
# └────────── Владелец (owner)
# r=read(4), w=write(2), x=execute(1)
ls -l
# -rwxr-xr-- 1 user group 1024 index.js
# rwx = 7 (владелец: всё)
# r-x = 5 (группа: чтение + выполнение)
# r-- = 4 (остальные: только чтение)
# Сделать файл исполняемым
chmod +x script.sh
# Числовой формат
chmod 755 script.sh # rwxr-xr-x
chmod 644 index.html # rw-r--r--
Частые ошибки
rm -rf /— удалит ВСЮ файловую систему. Никогда не выполняйте от root- Пробелы в
=—NAME = "Ivan"не работает, нужноNAME="Ivan" - Забыть кавычки —
cd my folderне работает, нужноcd "my folder" >вместо>>— перезапись вместо дописывания- Не проверить
pwdпередrm -rf— убедитесь что вы в правильной папке
Практика
- Создайте структуру проекта командами:
mkdir -p,touch - Создайте файл, запишите в него текст, допишите ещё строку
- Используйте
|для подсчёта файлов в директории - Создайте переменную и используйте её в
echo - Попробуйте
&&для цепочки команд - Используйте
cat,head,tail,lessдля просмотра файлов
Связанные темы
Ресурсы
- Bash Manual — официальная документация
- Linux Command Line (русский) — справочник
- explainshell.com — объяснение любой команды
- ShellCheck — линтер для shell-скриптов