Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Администрирование ОС Linux. Учебное пособие
.pdf
elif <оператор сравнения2>; then
<действия 2>
else
<действие 3>
fi
Оператор if позволяет упрощать конструкцию. Разделы elif и
else не являются обязательными. Для правильной работы достаточно
использования только конструкции if-fi.
Для примера приведу скрипт:
#!/bin/bash
if [ -f /etc/passwd ]; then
echo "/etc/passwd – обычный файл"
else
echo "/etc/passwd – не обычный файл"
fi
exit
В этом сценарии проверяется, обычный ли файл /etc/passwd и
выводится соответствующее сообщение на экран.
Естественно мы не сможем обойтись и без таких конструкций, как
циклы.
Простейшим циклом является цикл перебора for .
for <ЭЛЕМЕНТ> in $<СПИСОК>
do
<действия>
done
Циклу передается переменная со списком параметров, разделенных
пробелом, знаком перевода строки или табуляции. Дальше цикл
выполняет действия для каждого элемента из списка, например:
#!/bin/bash
echo "Поиск каталогов в $HOME"
echo
Администрирование ОС LinuxС.В. Гончарук
81

#перейдем в домашний каталог
pushd $HOME
#получим список файлов
LIST=$(ls -a $HOME)
#организуем цикл для каждого из
#значений в переменной LIST
for ITEM in $LIST
do
#если вхождение – каталог, выведем его на экран
if [ -d $ITEM ]; then
echo "$ITEM"
fi
done
#вернемся в прежнюю директорию
popd
#выход
exit
Однако цикл перебора подходит нам не во всех случаях. Во многих
случаях нам необходим цикл с условием. Это цикл while.
while <условие>
do
<действия>
done
Цикл while выполняется до тех пор, пока истинно
<условие>.Попробую показать на примере организации цикла со
счетчиком. Для вычислений я буду использовать команду expr ,
позволяющую выполнять математические операции с переменными
bash :
#!/bin/bash
#определяем наличие первого параметра
#командной строки
if [ -z $1 ]; then
echo "Использование: $0 количество_проверок"
exit
fi
Администрирование ОС LinuxС.В. Гончарук
82

#очистим экран
clear
#определим переменную счетчика цикла
COUNTER=0
#организуем цикл на $1 итераций
while [ $COUNTER -lt $1 ]
do
echo "Загрузка системы (за $1 секунд)"
echo echo "секунда $COUNTER"
echo "-- загрузка системы --"
#команда определения средней загрузки
/usr/bin/uptime
echo "-- место на дисках --"
#определение свободного места на винчестере
df -h
echo "----------------"
echo
#пауза 1 секунду
/bin/sleep 1
#очистим экран
clear
#приращение переменной цикла
COUNTER=`expr $COUNTER + 1`
done
#выход
exit
Организация вывода имени программы не очень удачно выполнено в
данном случае, потому что будет выводиться не только имя запущенной
программы, а и путь, набранный нами в командной строке. Исправить
это нам поможет директива basename, выделяющая из пути имя
файла. Вот как будет выглядеть фрагмент приведенного выше сценария с
ее применением:
#!/bin/bash
#определяем наличие первого параметра
#командной строки
if [ -z $1 ]; then
echo Использование: `basename $0` количество_проверок
Администрирование ОС LinuxС.В. Гончарук
83

exit
fi
...
Администрирование ОС LinuxС.В. Гончарук
84

Планирование заданий. Работа с дисковыми
накопителями
Понятие планирования заданий. Команда at . Демон cron . Команда
crontab. Работа с дисковыми накопителями, команда mount.
Ход занятия
1. Очень часто в Linux администратор встречается с проблемой, когда
выполнение какой-либо программы (или shell -сценария) может
происходить и без его присутствия, но необходим инструмент,
реализующий эту возможность.
В современных Linux-системах для этой цели принято использовать
механизмы планирования заданий. Реализованы эти механизмы с
помощью демонов планирования заданий – at и cron .
С помощью этих программ появляется возможность установить
выполнение программы на заранее известное время. Команда at
используется в тех случаях, когда выполнение задания - разовая
процедура. Если же задание предполагается выполнять с какой-либо
периодичностью, то лучше всего использовать демон cron и команду
crontab.
Методика планирования представляет из себя понимание процессов,
происходящих с сервером (или персональным компьютером) в каждый
момент времени. Для планирования применяется форма, аналогичная
приведенной ниже с дискретизацией в 5 минут:
01
число
0м 5м 10м 15м 20м 25м 30м 35м 40м 45м 50м 55м
0ч Резервная копия
1ч
2ч
Обновления
Linux
Установка обновлений
Linux
3ч
4ч
Смотри недельную форму
Администрирование ОС LinuxС.В. Гончарук
85

5ч
6ч
7ч
8ч Резерв для непредвиденных случаев
9ч
10ч
11ч
12ч
13ч Mozilla
14ч
15ч
16ч
17ч
18ч
Проверка
>
19ч с помощью tripware целостности файловой >
20ч системы
21ч
22ч
Самая высокая загрузка системы в это время
23ч
Составляется расписание на каждый день месяца. Совместно с ней
составляется форма по дням недели, которая позволяет планировать
выделенные 2 часа (или больше, если это потребуется). Пример такой
формы для понедельника:
понедельник 0м 5м 10м 15м 20м 25м 30м 35м 40м 45м 50м 55м
4ч Отчет SARG
5ч
Эти формы позволят оптимально использовать время работы сервера и
грамотно планировать задания.
Администрирование ОС LinuxС.В. Гончарук
86

После того, как будут выписаны все задания, стоящие в текущий момент,
нужно будет найти подходящее место для вновь вставляемого задания.
Опытные системные администраторы считают, что стоит выделять
около часа в сутки в расписании заданий для того, чтобы всегда можно
было вставить непредвиденное разовое задание, а также освобождать
от выполнения заданий время наивысшей загрузки системы. Не
рекомендуется планировать несколько заданий на одно и то же время.
2. Семейство команд at (at, atq, atrm) представляет собой
инструменты для выполнения задания в определенное время по
таймеру. Для правильного функционирования данной команды в
системе должен быть запущен демон atd . Демон atd поддерживает
очередь заданий, которые должны быть выполнены в то или иное
время.
Для постановки задания (или нескольких заданий в очередь на одно и
то же время) вам необходимо выполнить команду at:
Пример 1.
[student@Klass801 student]$ at 19:00
at> /home/student/bin/first.sh
>Control-D>
job 1 at 2004-12-01 13:01
[student@Klass801 student]$_
Результат выполнения команды, указанной демоном at будет записан в
Ваш почтовый ящик linux (/var/spool/mail/student).Но
система планирования at позволяет и управлять поставленными в
очередь заданиями. Просмотреть очередь заданий можно используя
команду atq:
Пример 2.
[student@Klass801 student]$ atq
1 2004-12-01 13:01 a student
[student@Klass801 student]$
Команда at позволяет поставить в очередь несколько заданий, которые
будут последовательно выполнены друг за другом. Сделать это можно
Администрирование ОС LinuxС.В. Гончарук
87

как в интерактивном режиме (набрав команду at в командной строке),
так и указав команде at параметр -f:
[student@Klass801 student]$ at -f commands 14:50
job 8 at 2004-12-05 14:50
[student@Klass801 student]$_
Команда atrm удаляет из очереди задание:
[root@ns root]# atq
7 2004-12-05 14:48 a root
8 2004-12-05 14:50 a root
[root@ns root]# atrm 7
[root@ns root]# atq
8 2004-12-05 14:50 a root
[root@ns root]#
При планировании заданий с помощью команды at стоит уделять
особое внимание времени выполнения задания, чтобы средняя загрузка
системы не превысила предельно допустимое значение.
3. В отличие от команд at,демон cron и команда управления
планированием crontab позволят Вам точно планировать задания.
Как в случае с at, задания запускает программа-демон crond. Команда
crontab служит лишь для управления заданиями. Перед
использованием команды необходимо создать файл, описывающий
таблицу заданий. Формат файла таков:
минуты часы дни_месяца месяц дни_недели команда
минуты – числа от 0 до 59, или *
часы – числа от 0 до 23, или *
дни_месяца – числа от 1 до 31, или *
месяц – числа от 1 до 12, или *
дни_недели – числа от 0 до 7, причем 0 или 7 – воскресенье, или *; например:
0 10 * * * /home/student/bin/script #запуск в 10:00 ежедневно
15 * * * 1 /home/student/bin/script2 #в 15 минут каждого часа в понедельник
Команда crontab позволяет использовать периоды:
10-15 * /2 * * /home/student/bin/script3 #каждую минуту, с 10 до 15 минут по
Администрирование ОС LinuxС.В. Гончарук
88

#четным дням каждого месяца
После создания файла заданий необходимо вызвать команду crontab
и указать ей в качестве параметра имя файла с заданиями :
[student@Klass801 student]$ crontab jobs
Просмотреть список заданий, установленных Вами можно с помощью
параметра -l :
[student@Klass801 student]$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.1333 installed on Sat Dec 4 15:56:57 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
10 * * * * /home/student/bin/script
[student@Klass801 student]$
Очистить список заданий можно с помощью параметра -r :
[student@Klass801 student]$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.1333 installed on Sat Dec 4 15:56:57 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
10 * * * * /home/student/bin/script
[student@Klass801 student]$ crontab -r
[student@Klass801 student]$ crontab -l
no crontab for student
[student@Klass801 student]$
Команда crontab позволяет также и редактировать список заданий с
помощью параметра -e.В качестве редактора будет использоваться
редактор, указанный (в порядке очередности) в переменной окружения
$VISUAL, $EDITOR или /bin/vi . После сохранения файла,
crontab автоматически переинициализирует таблицу заданий.
Параметр -u User позволяет управлять заданиями других
пользователей. При использовании этого параметра не из под
суперпользователя, вам придется ввести пароль.
4. Очень часто планирование заданий связано с созданием резервных
Администрирование ОС LinuxС.В. Гончарук
89

копий. Как правило, резервные копии создаются на внешние носители
(магнитные ленты, диски и прочее). Сегодня мы с вами попробуем
научиться монтировать различные внешние устройства. Монтирование
– подключение файловых систем внешних накопителей в один из
каталогов корневой ФС (точку монтирования). Для монтирования
устройств в Unix применяется команда mount.При запуске без
параметров mount покажет все ФС, смонтированные на текущий
момент, а также параметры, используемые при монтировании.
root@ADM:/home/oem# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
/sys on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,noexec,nosuid,nodev,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
devshm on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
lrm on /lib/modules/2.6.20-15-generic/volatile type tmpfs (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
Эта команда принимает много параметров, но мы с вами поговорим о
следующих:
-t FS – указывает файловую систему, которая используется на
внешнем устройстве
-r – смонтировать ФС в режиме "только чтение"
-w – смонтировать ФС в режиме "чтение/запись"
-o – указать дополнительные опции монтирования, такие как
кодировку, набор символов, под каким пользователем монтировать и
прочие. Параметры зависят от типа файловой системы, и их стоит
уточнять в man. Общий синтаксис mount выглядит как:
mount -t FS -w/-r device mountpoint -o external_fs_options
Например:
Администрирование ОС LinuxС.В. Гончарук
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
