Shell-скрипты для админов: как автоматизировать рутинные задачи и сэкономить время

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 - скачивают данные с веба. Нужны для мониторинга и интеграции.

Эти инструменты - ваша палитра. Скрипт - это картина, собранная из этих кистей.

Как писать надёжные скрипты

Не все скрипты работают с первого раза. Вот правила, которые помогут избежать катастроф:

  1. Всегда используйте #!/bin/bash в первой строке. Это гарантирует, что скрипт запустится в Bash, а не в старом sh.
  2. Проверяйте, существует ли пользователь/файл/директория перед тем, как что-то менять. Иначе скрипт может удалить всё, что не должен.
  3. Используйте set -euo pipefail в начале скрипта. Это заставит его остановиться при любой ошибке: несуществующей переменной, падении команды, сбое в пайпе.
  4. Логируйте всё. Добавьте echo "[INFO] ..." >> /var/log/myscript.log в ключевые точки. Потом вы будете благодарны себе.
  5. Тестируйте на тестовой машине. Никогда не запускайте новый скрипт на продакшене без проверки.
Инструменты командной строки изображены как кисти на палитре рядом с файлом скрипта.

Где учиться дальше

Скрипты - это не магия. Это навык. Как велосипед. Сначала падаешь, потом едешь.

Попробуйте:

  • Создать скрипт, который проверяет, свободно ли место на диске и отправляет письмо, если свободно меньше 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".

Начните сегодня. Напишите один скрипт. Даже если он просто выводит "Привет, мир". Потом - добавьте лог. Потом - сделайте, чтобы он что-то делал. Через неделю вы перестанете вручную выполнять рутину. И начнёте думать о том, что действительно важно.