Читать книгу: «Работа в командной строке 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

Бесплатный фрагмент закончился.

199 ₽
Бесплатно

Начислим +6

Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.

Участвовать в бонусной программе
Возрастное ограничение:
16+
Дата выхода на Литрес:
13 апреля 2026
Дата написания:
2026
Объем:
80 стр.
Правообладатель:
Автор
Формат скачивания: