Shell и скрипты на Ubuntu: bash, awk, sed, grep
Этот раздел собирает базовый shell-арсенал, без которого серверный быт невозможен: bash как язык, find и grep для навигации, sed и awk для обработки текста, wget для скачивания. Каждый блок ведёт на подробный разбор с примерами.
Что входит в shell-арсенал админа
Большинство задач на сервере решается без редактора кода и интерпретатора Python — достаточно bash и пары стандартных утилит. Набор делится на три класса:
- Язык: bash — условия, циклы, массивы, функции, чтобы автоматизировать рутину.
- Навигация: find и grep — находить файлы и нужные строки в логах.
- Обработка текста: sed и awk — менять файлы пакетно и считать колонки.
- Сеть-утилиты: wget, curl — забирать файлы и API-ответы.
Эти инструменты есть в любой Ubuntu из коробки и комбинируются через пайплайн.
bash как язык: условия и массивы
Скрипты на bash живут до сотни строк, дальше лучше Python. Но базовая логика — if/then/else, циклы for/while, массивы, проверки кодов возврата — покрывает 90% задач автоматизации. Условные конструкции — в bash if-else-elif-fi, массивы — в bash массивы.
find: поиск файлов
find ищет файлы по имени, размеру, времени модификации, типу. С опцией -exec сразу выполняет действие над найденным: удалить, переместить, изменить права. Полный набор паттернов — в find на Linux: руководство.
grep: поиск по содержимому
grep находит строки в файлах по регулярному выражению. Базовая утилита для разбора логов, поиска по конфигам и фильтрации вывода других команд. См. grep на Linux: поиск по тексту.
sed: потоковая правка файлов
sed редактирует файлы построчно по шаблонам — заменяет, удаляет, вставляет. Идеален для пакетных правок конфигов в инвентаре. Базовая замена и хитрости с in-place — в sed на Linux: потоковый редактор.
awk: обработка колонок и отчёты
awk парсит структурированный текст: лог-файлы с колонками, CSV, вывод ls -l или ps. Считает суммы, средние, фильтрует, форматирует. См. awk на Linux: руководство.
wget: скачивание из командной строки
wget забирает файлы по HTTP/FTP с поддержкой докачки и рекурсии. Удобен в скриптах деплоя и в Dockerfile. См. wget на Linux: скачивание файлов.
Связка: пайплайн как программа
Сила shell — в комбинировании. Поиск процессов, занимающих память:
ps aux | awk '$4 > 1.0 {print $2, $4, $11}' | sort -k2 -nr | head
Это найти процессы, потребляющие >1% памяти, отсортировать по объёму и показать топ. Тот же подход — для логов nginx через grep + awk + sort.
Частые вопросы
bash или zsh — что выбрать?
На сервере — bash (он везде и совместим со скриптами). На рабочей машине — что нравится; zsh красивее и удобнее интерактивно, но для скриптов всё равно нужен POSIX-совместимый код.
Когда переходить с bash на Python?
Если скрипт перевалил за 200 строк, оперирует структурами данных сложнее массивов, требует HTTP-клиент или работу с JSON — Python.
Чем awk отличается от sed?
sed — построчная замена и удаление по шаблонам, не понимает структуру строки. awk — мини-язык программирования с автоматическим разбиением строки на поля и арифметикой. Замена → sed, отчёт по логу → awk.
Какую кодировку держать в скриптах?
UTF-8 без BOM. Ubuntu использует UTF-8 по умолчанию, и любые cat/grep/awk работают с ней корректно.
Что запомнить
- bash — основной язык скриптов на сервере, до 200 строк его хватает.
- find — поиск файлов; grep — поиск строк; sed — замена в файлах; awk — отчёты по колонкам.
- Пайплайн
|склеивает утилиты в полноценные программы. - Для скачивания файлов в скриптах —
wget; для API-запросов —curl. - На сервере держим bash, не zsh: совместимость скриптов важнее эстетики.
- Когда скрипт перерастает 200 строк — пересаживаемся на Python.