Shell-скрипты для админов: как автоматизировать рутинные задачи и сэкономить время
мар, 15 2026
Если вы системный администратор, то наверняка сталкивались с ситуацией: один и тот же набор команд вы вводите каждый день - по десять раз. Создать пользователя, скопировать файлы на десять машин, очистить логи, проверить, кто залогинен, выгрузить резервную копию. Каждый раз - руками. Это неэффективно. И утомительно. Shell-скрипты - это не про "хакерские трюки". Это про то, чтобы перестать тратить время на то, что можно автоматизировать.
Что такое shell-скрипт и зачем он вам?
Shell-скрипт - это просто текстовый файл, в котором вы записываете команды, которые вы обычно вводите в терминале. Ничего сложного. Нет компиляции, нет сложных библиотек. Только ваши команды, сохранённые в файле, который можно запустить одним кликом.
Представьте: вам нужно каждый понедельник создать 15 новых пользователей в системе, выдать им доступ к папке, отправить им приветственное письмо и добавить в группу "staff". Вручную - это час работы. Скрипт - это три минуты: запустил, пошёл на кофе, вернулся - всё готово.
Shell-скрипты работают на Linux, macOS и даже на Windows через WSL. Большинство админов используют Bash - это стандартный интерпретатор командной строки в Linux-системах. Он умеет всё: переменные, циклы, условия, функции. И главное - он работает с теми же утилитами, что и вы в терминале: grep, awk, sed, curl, rsync.
Как сделать первый скрипт
Начните с самого простого. Создайте файл backup.sh:
#!/bin/bash # Копируем папку /var/www в резервную директорию cp -r /var/www /backup/www_$(date +%Y%m%d) # Сжимаем резервную копию tar -czf /backup/www_$(date +%Y%m%d).tar.gz /backup/www_$(date +%Y%m%d) # Удаляем исходную копию (она уже сжата) rm -rf /backup/www_$(date +%Y%m%d) # Пишем в лог echo "Резервная копия создана: $(date)" >> /var/log/backup.log
Сохраните. Дайте права на выполнение:
chmod +x backup.sh
Запустите:
./backup.sh
Всё. Теперь у вас есть автоматизированный бэкап. Никаких ручных копирований. Добавьте этот скрипт в cron - и он будет запускаться каждый понедельник в 2:00 ночи. Без вашего участия.
Что можно автоматизировать? Практические примеры
1. Проверка, кто залогинен
Нужно быстро узнать, кто сейчас работает на сервере? Вот скрипт whoislogged.sh:
#!/bin/bash
USER=$1
if [ -z "$USER" ]; then
echo "Использование: ./whoislogged.sh <имя_пользователя>"
exit 1
fi
LOGGED=$(who | grep -i "$USER" | awk '{print $1}' | head -n 1)
if [ "$LOGGED" = "$USER" ]; then
TTY=$(who | grep -i "$USER" | awk '{print $2}' | head -n 1)
echo "Пользователь $USER залогинен на $TTY"
else
echo "Пользователь $USER не залогинен"
fi
Запускаете: ./whoislogged.sh ivanov - и сразу видите, на каком терминале он сидит. Без who вручную, без поиска по списку.
2. Включение/отключение тачпада
На ноутбуке с Linux тачпад иногда мешает, когда вы используете мышь. Скрипт toggle-touchpad.sh:
#!/bin/bash
STATE=$(synclient | grep "TouchpadOff" | awk '{print $3}')
if [ "$STATE" = "0" ]; then
synclient TouchpadOff=1
echo "Тачпад отключен"
else
synclient TouchpadOff=0
echo "Тачпад включен"
fi
Запускаете - и тачпад переключается. Никаких настроек в GUI. Просто скрипт. Можно привязать к горячей клавише.
3. Добавление пользователя в группу админов
В корпоративной среде часто нужно добавлять новых сотрудников в группу sudo. Вот скрипт addadmin.sh:
#!/bin/bash USER=$1 if [ -z "$USER" ]; then echo "Укажите имя пользователя: ./addadmin.sh <имя>" exit 1 fi if id "$USER" &>/dev/null; then grep -q "^$USER" /etc/group | grep -q "sudo" && echo "Пользователь $USER уже в группе sudo" && exit 0 sudo usermod -aG sudo "$USER" echo "Пользователь $USER добавлен в группу sudo" else echo "Пользователь $USER не существует" fi
Скрипт проверяет: существует ли пользователь? Уже в группе sudo? Если нет - добавляет. Без риска ошибки. Без копирования команды вручную.
4. Скачивание погоды в терминале
Да, это не "админская" задача, но показывает, насколько просто можно взаимодействовать с API:
#!/bin/bash curl -4 wttr.in/Moscow
Запускаете - и видите погоду в Москве прямо в терминале. Это работает потому, что curl - это просто утилита, которую можно вызвать из скрипта. Используйте это для мониторинга внешних сервисов: проверяйте, отвечает ли ваш сайт, API, или внешний DNS.
Какие инструменты нужно знать
Shell-скрипт - это не язык программирования в классическом смысле. Это сборка команд. Поэтому знание этих утилит - ключ к мощным скриптам:
- grep - ищет строки по шаблону. Например:
grep "ERROR" /var/log/app.log - awk - извлекает поля из текста.
awk '{print $1}'- выведет первый столбец. - sed - заменяет текст.
sed 's/old/new/g'- заменит "old" на "new" везде. - cut - режет строки по символу.
cut -d: -f1- возьмёт первое поле, разделённое двоеточием. - rsync - копирует файлы эффективно. Лучше, чем
cp, для сетевых операций. - curl и wget - скачивают данные с веба. Нужны для мониторинга и интеграции.
Эти инструменты - ваша палитра. Скрипт - это картина, собранная из этих кистей.
Как писать надёжные скрипты
Не все скрипты работают с первого раза. Вот правила, которые помогут избежать катастроф:
- Всегда используйте
#!/bin/bashв первой строке. Это гарантирует, что скрипт запустится в Bash, а не в старом sh. - Проверяйте, существует ли пользователь/файл/директория перед тем, как что-то менять. Иначе скрипт может удалить всё, что не должен.
- Используйте
set -euo pipefailв начале скрипта. Это заставит его остановиться при любой ошибке: несуществующей переменной, падении команды, сбое в пайпе. - Логируйте всё. Добавьте
echo "[INFO] ..." >> /var/log/myscript.logв ключевые точки. Потом вы будете благодарны себе. - Тестируйте на тестовой машине. Никогда не запускайте новый скрипт на продакшене без проверки.
Где учиться дальше
Скрипты - это не магия. Это навык. Как велосипед. Сначала падаешь, потом едешь.
Попробуйте:
- Создать скрипт, который проверяет, свободно ли место на диске и отправляет письмо, если свободно меньше 10%.
- Написать скрипт, который находит все файлы .tmp старше 7 дней и удаляет их.
- Сделать скрипт, который скачивает логи с 5 серверов и объединяет их в один файл.
Потом - добавьте cron. Потом - systemd. Потом - Ansible. Но начинайте с простого. Один скрипт в день - и через месяц вы будете работать вдвое быстрее.
Почему это работает именно сейчас
Многие думают: "А зачем писать скрипты, если есть Ansible, Puppet, Kubernetes?"
Потому что даже самые сложные системы начинаются с простого скрипта. Ansible - это тоже скрипты. Только написанные на YAML. А вы пишете на Bash. Прямо сейчас. Без лишних зависимостей. Без Docker. Без облачных платформ. Просто терминал, файл и ваш мозг.
В 2026 году, когда всё стало "облачным", админ всё ещё должен уметь заходить на сервер, посмотреть логи, перезапустить сервис, найти пользователя. И если вы делаете это вручную - вы тратите время, которое можно потратить на что-то важнее: оптимизацию, безопасность, новые проекты.
Shell-скрипты - это не устаревшая технология. Это фундамент. И он ещё жив.
Можно ли писать shell-скрипты на Windows?
Да, но не через стандартный cmd или PowerShell. Нужен WSL (Windows Subsystem for Linux). Это полноценная Linux-среда внутри Windows. В ней вы можете писать и запускать bash-скрипты точно так же, как на настоящем Linux-сервере. Без изменений. Без адаптации. Просто установите WSL2 и начните.
Как запустить скрипт без ввода пароля?
Если скрипт требует sudo, вы можете настроить права в файле /etc/sudoers с помощью visudo. Например: username ALL=(ALL) NOPASSWD: /path/to/your/script.sh. Это разрешит запускать только этот скрипт без пароля. Не разрешайте NOPASSWD для всех команд - это опасно. Только для конкретных, проверенных скриптов.
Как проверить, что скрипт работает правильно?
Запустите его с флагом -x: bash -x ./myscript.sh. Он покажет каждую команду, которую выполняет, и её результат. Это как отладчик. Также добавьте set -euo pipefail в начало скрипта - он остановит выполнение при любой ошибке, а не продолжит молча.
Чем shell-скрипты отличаются от Python-скриптов для админов?
Shell-скрипты идеальны для задач, которые уже решаются командами в терминале: копирование, поиск, запуск процессов, работа с файлами. Python лучше, когда нужно обрабатывать сложные данные: JSON, XML, базы данных, API-запросы, парсинг HTML. Но для простых операций - shell быстрее, проще и не требует установки интерпретатора. На сервере может не быть Python, но bash - всегда есть.
Где хранить скрипты? В какую папку?
Для личного использования - ~/bin. Для системных скриптов - /usr/local/bin или /opt/scripts. Главное - чтобы папка была в переменной окружения $PATH. Тогда вы сможете запускать скрипт просто по имени, без ./. Добавьте путь в ~/.bashrc: export PATH="$HOME/bin:$PATH".
Начните сегодня. Напишите один скрипт. Даже если он просто выводит "Привет, мир". Потом - добавьте лог. Потом - сделайте, чтобы он что-то делал. Через неделю вы перестанете вручную выполнять рутину. И начнёте думать о том, что действительно важно.