Читать книгу: «Работа в командной строке linux», страница 3
5.4. Переменные окружения в crontab
Cron работает в минимальном окружении. Можно задать переменные:* MAILTO — адрес для отправки вывода команды;* PATH — путь поиска команд;* SHELL — оболочка для выполнения.
Пример:
MAILTO=admin@example.com
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash
0 2 * * * /home/user/backup.sh
5.5. Основы сетевых команд
1. ping — проверка доступности хоста:
ping google.com
ping -c 4 192.168.1.1 # 4 пакета
2. ifconfig / ip — информация о сетевых интерфейсах:
ip addr show # Показать все интерфейсы
ip addr show eth0 # Информация по eth0
3. netstat / ss — статистика сетевых соединений:
ss -tuln # Показать открытые порты (TCP/UDP)
netstat -rn # Таблица маршрутизации
4. traceroute — трассировка маршрута:
traceroute google.com
5. nslookup / dig — DNS‑запросы:
dig google.com # Расширенная информация
nslookup google.com # Базовый запрос
6. curl / wget — загрузка файлов:
wget https://example.com/file.zip
curl -O https://example.com/data.txt
7. ssh — безопасное подключение:
ssh user@192.168.1.10
ssh -p 2222 user@server.com # Подключение на нестандартный порт
8. scp — копирование файлов по SSH:
scp file.txt user@remote:/home/user/
scp -r folder/ user@remote:/backup/
5.6. Практические упражнения
1. Откройте редактор crontab: crontab -e.
2. Добавьте задание для вывода текущей даты в файл /tmp/cron_test.log каждую минуту:
* * * * * date >> /tmp/cron_test.log
3. Сохраните и выйдите. Проверьте файл через 2–3 минуты: cat /tmp/cron_test.log.
4. Добавьте задание на ежедневное создание архива каталога /var/log в /backups/ в 2:00 ночи.
5. Установите отправку уведомлений на email (если настроена почта) для одной из задач.
6. Проверьте доступность google.com командой ping -c 3 google.com.
7. Получите IP‑адрес вашего компьютера командой ip addr show.
8. Просмотрите открытые порты командой ss -tuln.
9. Выполните DNS‑запрос для вашего домена с помощью dig.
10. Скопируйте любой файл на другой сервер (если есть доступ) командой scp.
5.7. Типичные проблемы и решения
Проблема 1. Задача не выполняется.* Причина: неправильный путь к команде или файлу.* Решение: используйте абсолютные пути (например, /usr/bin/python вместо python).
Проблема 2. Вывод команды не отправляется на email.* Причина: не настроена почтовая служба.* Решение: перенаправьте вывод в файл: 0 2 * * * /script.sh >> /var/log/script.log 2>&1.
Проблема 3. Задачи выполняются слишком часто.* Причина: ошибка в синтаксисе расписания.* Решение: проверьте значения полей и специальные символы.
Заключение
Вы освоили:* автоматизацию задач с помощью cron;* синтаксис и форматы расписаний crontab;* базовые сетевые команды для диагностики и передачи данных;* решение типичных проблем при настройке автоматизации.
Эти навыки позволят вам:* планировать резервные копии, обновления и мониторинг;* диагностировать сетевые проблемы;* безопасно передавать файлы между серверами.
В следующей главе мы рассмотрим основы написания скриптов на Bash — создание циклов, условных операторов и обработку аргументов командной строки.
Глава 6. Основы написания скриптов на Bash
Введение
Bash (Bourne Again SHell) — стандартная командная оболочка в Linux и мощный скриптовый язык. Скрипты Bash позволяют автоматизировать рутинные задачи: от резервного копирования до развёртывания приложений.
В этой главе вы:* научитесь создавать и запускать Bash‑скрипты;* освоите работу с переменными и аргументами командной строки;* изучите условные операторы и конструкции выбора;* познакомитесь с различными типами циклов;* выполните практические задания для закрепления навыков.
6.1. Создание и запуск скриптов
1. Создание скрипта
Создайте файл с расширением .sh (например, hello.sh) и откройте его в редакторе (nano, vim и т. д.).
2. Шебанг (shebang)
Первая строка скрипта должна указывать на используемую оболочку:
#!/! /bin/bash
3. Пример простого скрипта
#! /bin/bash
echo "Привет, мир!"
4. Предоставление прав на выполнение
Сделайте скрипт исполняемым:
chmod +x hello.sh
Или с более строгими правами (только владелец может выполнять):
chmod 700 hello.sh
5. Запуск скрипта* ./hello.sh — запуск исполняемого файла в текущей директории;* bash hello.sh — запуск через интерпретатор Bash (не требует прав на выполнение).
6.2. Переменные
Объявление и использование:
name="Иван"
echo "Привет, $name!"
Специальные переменные:* $0 — имя скрипта;* $1, $2, … — аргументы командной строки;* $# — количество аргументов;* $@ — все аргументы;* $? — код возврата последней команды (0 — успех).
Пример:
#! /bin/bash
echo "Имя скрипта: $0"
echo "Первый аргумент: $1"
echo "Количество аргументов: $#"
6.3. Ввод данных от пользователя
Команда read запрашивает ввод и сохраняет его в переменную:
echo -n "Введите ваше имя: "
read username
echo "Привет, $username!"
Опции read:* -p — приглашение в одной строке: read -p "Введите имя: " name;* -s — скрытый ввод (для паролей).
6.4. Условные операторы
Конструкция if-then-else:
if [ условие ]; then
команды
elif [ другое_условие ]; then
другие_команды
else
команды_по_умолчанию
fi
Операторы сравнения:* Числа: -eq (равно), -ne (не равно), -gt (больше), -lt (меньше), -ge (больше или равно), -le (меньше или равно).* Строки: = (равно), != (не равно), -z (пустая строка), -n (не пустая строка).* Файлы: -e (существует), -f (обычный файл), -d (каталог), -r (доступен для чтения), -w (доступен для записи), -x (исполняемый).
Пример проверки существования файла:
#! /bin/bash
if [ -e "$1" ]; then
echo "Файл $1 существует"
else
echo "Файл $1 не найден"
fi
6.5. Конструкция case
Используется для множественного выбора:
case переменная in
шаблон1)
команды1
;;
шаблон2)
команды2
;;
*)
команды_по_умолчанию
;;
esac
Пример определения типа файла:
#! /bin/bash
case "$1" in
*.txt)
echo "Это текстовый файл"
;;
*.sh)
echo "Это скрипт Bash"
;;
*)
echo "Неизвестный тип файла"
;;
esac
6.6. Циклы
1. Цикл for — перебирает элементы списка:
for i in 1 2 3 4 5; do
echo "Число: $i"
done
Можно использовать диапазон: for i in {1..10} или команду seq: for i in $(seq 1 5).
2. Цикл while — выполняется, пока условие истинно:
count=1
while [ $count -le 5 ]; do
echo "Итерация: $count"
((count++))
done
3. Цикл until — выполняется, пока условие ложно:
attempt=1
until ping -c 1 google.com &> /dev/null; do
echo "Попытка $attempt... Сервер недоступен"
sleep 2
((attempt++))
done
echo "Сервер доступен!"
6.7. Функции
Функции позволяют группировать команды:
my_function() {
echo "Привет из функции!"
echo "Аргумент функции: $1"
}
# Вызов функции
my_function "Привет"
6.8. Перенаправление ввода/вывода и конвейеры
• > — перенаправление вывода в файл (перезаписывает);
• >> — добавление вывода в конец файла;
• < — перенаправление ввода из файла;
• | — конвейер (передаёт вывод одной команды на вход другой).
Примеры:
ls -la > file_list.txt # Вывод ls в файл
date >> log.txt # Добавление даты в лог
sort < unsorted.txt > sorted.txt # Сортировка содержимого файла
ps aux | grep firefox # Поиск процессов firefox
6.9. Практические упражнения
1. Создайте скрипт greet.sh, который:
1. • запрашивает имя пользователя;
1. • выводит приветствие: «Привет, [имя]!».
2. Напишите скрипт check_args.sh, который проверяет, передан ли хотя бы один аргумент. Если нет — выводит сообщение «Использование: $0 » и завершает работу. Если аргумент есть — выводит «Привет, $1!».
3. Создайте скрипт file_type.sh, использующий case, который определяет тип файла по расширению (.txt, .sh, .jpg и др.) и выводит соответствующее сообщение.
4. Напишите скрипт counter.sh, который с помощью цикла while считает от 1 до 10 и выводит каждое число.
5. Создайте скрипт backup.sh, который:
5. • принимает путь к каталогу как аргумент;
5. • проверяет существование каталога;
5. • создаёт архив этого каталога с текущей датой в имени (например, backup_2024-04-13.tar.gz).
6. Напишите функцию log_message, которая принимает строку и добавляет её в файл /tmp/script.log с отметкой времени. Протестируйте функцию.
Заключение
Вы освоили основы программирования на Bash:* создание и запуск скриптов;* работу с переменными и вводом данных;* условные операторы (if, case);* циклы (for, while, until);* функции и перенаправление ввода‑вывода.
Эти навыки позволят вам:* автоматизировать рутинные операции;* писать скрипты для системного администрирования;* обрабатывать текстовые данные и файлы;* создавать инструменты для мониторинга и развёртывания.
В следующей главе мы рассмотрим продвинутые техники работы с Bash: обработку ошибок, отладку скриптов, работу с массивами и ассоциативными массивами, а также создание интерактивных меню.
Глава 7. Продвинутые техники работы с Bash: обработка ошибок, отладка, массивы и интерактивные меню
Введение
В этой главе вы освоите продвинутые возможности Bash, которые позволят создавать более надёжные, гибкие и удобные скрипты. Вы изучите:* обработку ошибок и кодов возврата;* отладку скриптов;* работу с массивами и ассоциативными массивами;* создание интерактивных меню;* использование продвинутых арифметических операций.
7.1. Обработка ошибок и кодов возврата
Каждая команда в Bash возвращает код возврата (exit code):* 0 — успех;* ≠0 — ошибка (конкретное число зависит от типа ошибки).
Ключевые переменные:* $? — код возврата последней выполненной команды;* set -e — немедленно завершать скрипт при ошибке;* trap — перехватывать сигналы и ошибки.
Пример проверки кода возврата:
#! /bin/bash
cp file.txt /backup/
if [ $? -ne 0 ]; then
echo "Ошибка копирования!"
exit 1
fi
Использование set -e:
#! /bin/bash
set -e
cp important.txt /safe/location/
echo "Файл успешно скопирован" # Эта строка не выполнится при ошибке копирования
Перехват ошибок с trap:
#! /bin/bash
cleanup() {
echo "Выполняется очистка..."
rm -f /tmp/temp_file
}
trap cleanup EXIT
# При завершении скрипта (нормальном или аварийном) выполнится функция cleanup
Бесплатный фрагмент закончился.
Начислим +6
Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.
Участвовать в бонусной программе
