Введение в bash
Интерфейс командной строки, потоки ввода/вывода, пайпы и основные команды для администрирования Linux.
🐚 Что такое оболочка (shell) и bash?
Операционная система Linux во многом имеет схожую структуру и систему команд с ОС Unix. Пользователь может работать с помощью командной строки (оболочки). Оболочка (shell) – это программа, которая предоставляет пользователю интерфейс для взаимодействия с операционной системой путем выполнения команд. Оболочка является одной из важнейших частей системы.
Многие важные части системы являются сценариями оболочки (shell script) – файлами, содержащими последовательность команд оболочки.
Существуют различные варианты оболочек Unix, но все они, как правило, заимствуют функции у оболочки
Bourne shell (/bin/sh). В системе Linux используется улучшенная версия Bourne shell –
bash. Bash является оболочкой по умолчанию в большинстве дистрибутивов
Linux. Существуют также другие оболочки, например sh, zsh,
fish. Окно, в котором вы взаимодействуете с оболочкой, называется терминалом.
🔧 Основные команды
-a– отображение всех файлов, включая скрытые (начинаются с точки).-l– подробный список: разрешения, владелец, группа, дата, размер.-c– сортировка файлов по времени модификации/создания (сначала новые).-d– вывод только директорий, без их содержимого.-F– показывает информацию о типе объекта (например, добавляет `/` к папкам).
| Команда | Описание | Полезные ссылки |
|---|---|---|
cd /путь/к/папке |
Смена текущего рабочего каталога на указанный. | Примеры cd |
pwd |
Вывести в терминал полный пустой путь к текущей директории. | Примеры pwd |
echo "строка" |
Выводить строку текста в терминал. Применяется в скриптах и для редактирования конфигов. | Примеры echo |
cat файл1 файл2 |
Выводит содержимое одного или нескольких файлов. Выполняет их конкатенацию. | Примеры cat |
man команда |
Позволяет получить справку (manual) по переданной команде, функции или программе. | Что такое man |
📁 Работа с файлами и директориями
-f(force) – игнорировать несуществующие, не запрашивать подтверждений.-i(interactive) – выводить запрос перед удалением каждого файла.-v(verbose) – выводить информацию об удаляемых файлах.
Полезные ссылки по разделу: Права chmod Команда chown Команда cp Команда mv
📦 Работа с архивами
Архивирование — процесс объединения нескольких файлов/директорий в один файл. Сжатие — уменьшение размера файла. Архивы часто дополнительно сжимаются.
Подробнее об архивации: losst.pro/arhivatsiya-v-linux
🔀 Потоки ввода/вывода и перенаправление
В Linux есть три стандартных потока:
STDIN— стандартный ввод (файловый дескриптор 0). Используется для получения данных от пользователя или процесса.STDOUT— стандартный вывод (файловый дескриптор 1). Куда передаются результаты команд (обычно в экран).STDERR— стандартный поток ошибок (файловый дескриптор 2). Куда передаются сообщения об ошибках.
Перенаправления
Конвейеры (Пипе | Pipe) и xargs
Pipe ( | ) служит для передачи вывода одной команды (STDOUT)
напрямую на стандартный ввод (STDIN) другой.
Примеры использования xargs: losst.pro/komanda-xargs-linux
🛠️ Полезные утилиты bash (для изучения)
Изучите самостоятельно, в каких случаях используются следующие утилиты (ссылки ведут на развернутые статьи):
| Утилита | Что это? | Ресурсы |
|---|---|---|
htop |
Интерактивный продвинутый диспетчер процессов | Статья на Habr |
grep |
Поиск строк по шаблону / регулярному выражению | Гайд Selectel |
df |
Показ свободного места на файловых системах | Обзор df |
du |
Размер, занимаемый файлами и папками на диске | Обзор du |
find |
Утилита для поиска файлов по параметрам | Статья на Habr |
nano |
Самый простой текстовый консольный редактор | Для новичков |
less |
Постраничный просмотр текста и логов в консоли | Обзор less |
sed / awk |
Потоковые текстовые редакторы и язык обработки | Awk в Linux, Шпаргалка sed/awk |
head / tail |
Чтение файла с самого начала (head) или с конца (tail) | -- |
lsof |
Просмотр списка открытых файлов и сетевых портов | Статья на Habr |
netstat |
Отображение сетевых соединений и таблиц маршрутизации | Пособие по netstat |
ps |
Просмотр снимка запущенных процессов | Обзор ps |
ssh / scp |
Безопасный доступ и копирование по сети | Команды SSH |
lsblk / mount |
Работа с дисками и точками монтирования файлов | Wiki-статья |
Советы
Больше практики! Придумывайте себе простые реальные задачи и автоматизируйте их скриптами. Самые частые примеры из жизни сисадмина:
- Ротация файлов (удаление старых логов).
- Резервное копирование (бэкапирование важных папок).
- Очистка дискового пространства по расписанию.
- Отправка отчетов и уведомлений по почте.
- Выполнение пакетных скриптов для настройки архитектуры.
Используйте нейросети: Просить ИИ (AI) помочь с написанием кода — это отличная, современная и абсолютно нормальная практика, которая сильно экономит время и упрощает рутину. Но есть золотое правило: вы должны понимать, что именно написано в коде. Прежде чем запустить скрипт, разберитесь, как работает каждая команда, чтобы при необходимости вы смогли самостоятельно найти баг или изменить логику.
Что почитать: Настоятельно рекомендую изучить культовый цикл статей по bash-скриптам от RUVDS на Хабре.
🏋️ Практические упражнения
Скрипт мониторинга системы и управления логами
Цель: создать скрипт, который выполняет мониторинг системы и сохраняет результаты в лог-файлы.
Требования:
- Используйте команды для проверки загрузки CPU, памяти, места на диске.
- Выводите результаты в лог-файл, разделяя STDOUT и STDERR.
- Реализуйте ротацию логов (например, сохраняйте логи за последние 3 дня, старые удаляйте).
- Добавьте обработку сигналов (SIGINT, SIGTERM), чтобы скрипт корректно завершался.
- Добавьте опцию для вывода отладочной информации (set -x).
Показать решение
Разбор скрипта:
#!/bin/bash— шебанг, указывающий на использование интерпретатора bash.set -x— (закомментировано) включает режим отладки, выводя каждую команду перед выполнением.LOG_DIR,LOG_FILE,ERR_FILE— переменные для путей к директориям и файлам логов.mkdir -p "$LOG_DIR"— создание директории для логов, если она еще не создана.cleanup() { ... }— функция для корректного завершения работы.trap cleanup SIGINT SIGTERM— перехват сигналов прерывания (Ctrl+C) и сигнала завершения.{ ... } >> "$LOG_FILE" 2>> "$ERR_FILE"— блок команд, вывод которых перенаправляется в основной лог, а ошибки — в лог ошибок.find ... -mtime +3 -exec rm {} \;— поиск и удаление логов старше 3 дней (ротация).
Система резервного копирования и проверки целостности
Цель: автоматизировать процесс резервного копирования файлов и проверку целостности.
Требования:
- Напишите скрипт для инкрементального копирования (rsync) или создания архивов (tar).
- Выполните проверку целостности архива с помощью md5sum.
- Запишите успех в STDOUT-лог, а ошибки в STDERR-лог.
- Настройте выполнение через cron.
Показать решение
Разбор скрипта:
SRC,DEST,ARCHIVE— задание переменных для путей исходных данных, папки бэкапа и имени файла.mkdir -p "$DEST"— создание директории назначения, если она не существует.tar -czf "$ARCHIVE" "$SRC"— создание сжатого архива исходной папки.2> /var/log/backup_error.log— перенаправление сообщений об ошибках в лог.if ... then ... else— логика проверки успешного завершения команды архивации.md5sum— создание файла с контрольной суммой для будущей проверки целостности архива.echo "$(date) ..."— запись сообщения об успехе или ошибке с текущей датой в лог-файл.
Анализ процессов и диагностика системы
Цель: провести диагностику системы с помощью инструментов анализа.
Требования:
- Создайте высокую нагрузку на CPU (или запустите процесс) и изучите его с помощью top/htop и /proc.
- Создайте процессы-сироты или зомби и отследите их через ps.
- Выполните анализ команды ls с расшифровкой системных вызовов через strace.
- Измените приоритет процесса с помощью nice/renice и посмотрите влияние на систему.
Показать решение
Автоматизация управления пользователями
Цель: создать скрипт для массового управления пользователями из CSV.
Требования:
- Считывание пользователей из CSV-файла (имя,группа) и их создание.
- Генерация паролей и создание SSH-ключей.
- Добавление в группы, контроль прав (chmod/chown) на домашние директории.
- Логирование создания и ошибок. Добавить возможность массового удаления.
Показать решение
Разбор скрипта:
while IFS=',' read -r— цикл для чтения CSV-файла построчно с разделителем «запятая».id "$username"— проверка существования пользователя в системе перед созданием.useradd -m -g— создание пользователя с домашней директорией и привязкой к группе.passwd --stdin— автоматическая установка пароля (требует прав суперпользователя).ssh-keygen -N ""— генерация RSA-ключей без ввода пароля для автоматизации.chown -R— рекурсивная смена владельца папки.ssh.chmod 700— ограничение прав доступа к SSH-ключам (только для владельца).