Рейтинговые книги
Читем онлайн Искусство программирования на языке сценариев командной оболочки - Мендель Купер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 50 51 52 53 54 55 56 57 58 ... 96

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

848 bozo 17 0 996 996 800 R 5.6 1.2 0:00 top

1 root 8 0 512 512 444 S 0.0 0.6 0:04 init

2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd

...

nice

Запускает фоновый процесс с заданным приоритетом. Приоритеты могут задаваться числом из диапазона от 19 (низший приоритет) до -20 (высший приоритет). Но только root может указать значение приоритета меньше нуля (отрицательные значения). См. так же команды renice, snice и skill.

nohup

Запуск команд в режиме игнорирования сигналов прерывания и завершения, что предотвращает завершение работы команды даже если пользователь, запустивший ее, вышел из системы. Если после команды не указан символ &, то она будет исполняться как процесс "переднего плана". Если вы собираетесь использовать nohup в сценариях, то вам потребуется использовать его в связке с командой wait, чтобы не породить процесс "зомби".

pidof

Возвращает идентификатор процесса (pid) по его имени. Поскольку многие команды управления процессами, такие как kill и renice, требуют указать pid процесса, а не его имя, то pidof может сослужить неплохую службу при идентификации процесса по его имени. Эта коменда может рассматриваться как приблизительный эквивалент внутренней переменной $PPID.

bash$ pidof xclock

880

Пример 13-4. Использование команды pidof при остановке процесса

#!/bin/bash

# kill-process.sh

NOPROCESS=2

process=xxxyyyzzz # Несуществующий процесс.

# Только в демонстрационных целях...

# ... чтобы не уничтожить этим сценарием какой-нибудь процесс.

#

# Если с помощью этого сценария вы задумаете разрыватть связь с Internet, то

# process=pppd

t=`pidof $process` # Поиск pid (process id) процесса $process.

# pid требует команда 'kill' (невозможно остановить процесс, указав его имя).

if [ -z "$t" ] # Если процесс с таким именем не найден, то 'pidof' вернет null.

then

echo "Процесс $process не найден."

exit $NOPROCESS

fi

kill $t # В некоторых случаях может потребоваться 'kill -9'.

# Здесь нужно проверить -- был ли уничтожен процесс.

# Возможно так: " t=`pidof $process` ".

# Этот сценарий мог бы быть заменен командой

# kill $(pidof -x process_name)

# но это было бы не так поучительно.

exit 0

fuser

Возвращает идентификаторы процессов, использующих указанный файл(ы) или каталог. С ключом -k, завершает найденные процессы. Может с успехом использоваться для защиты системы, особенно в сценариях разграничения доступа к системным службам.

crond

Планировщик заданий. С его помощью выполняются такие задачи, как очистка и удаление устаревших файлов системных журналов, обновление базы данных slocate. Это суперпользовательская версия команды at (хотя любой пользователь может создать собственную таблицу crontab). Эта утилита запускается как фоновый процесс-daemon и выполняет задания, находящиеся в файле /etc/crontab.

Команды управления процессами и загрузкой

init

init -- предок (родитель) всех процессов в системе. Вызывается на последнем этапе загрузки системы и определяет уровень загрузки (runlevel) из файла /etc/inittab.

telinit

Символическая ссылка на init -- инструмент для смены уровня загрузки (runlevel), как правило используется при обслуживании системы или восстановлении файловой системы. Может быть вызвана только суперпользователем. Эта команда может быть очень опасна, при неумелом обращении -- прежде чем использовать ее, убедитесь в том, что вы совершенно точно понимаете что делаете!

runlevel

Выводит предыдущий и текущий уровни загрузки (runlevel). Уровень загрузки может иметь одно из 6 значений: 0 -- остановка системы, 1 -- однопользовательский режим, 2 или 3 -- многопользовательский режим, 5 -- многопользовательский режим и запуск X Window, 6 -- перезагрузка. Уровни загрузки определяются из файла /var/run/utmp.

halt, shutdown, reboot

Набор команд для остановки системы, обычно перед выключением питания.

Команды для работы с сетью

ifconfig

Утилита конфигурирования и запуска сетевых интерфейсов. Чаще всего используется в сценариях начальной загрузки системы, для настройки и запуска сетевых интерфейсов или для их остановки перед остановкой или перезагрузкой.

# Фрагменты кода из /etc/rc.d/init.d/network

# ...

# Проверка сетевой полсистемы.

[ ${NETWORKING} = "no" ] && exit 0

[ -x /sbin/ifconfig ] || exit 0

# ...

for i in $interfaces ; do

if ifconfig $i 2>/dev/null | grep -q "UP" >/dev/null 2>&1 ; then

action "Останавливается $i: " ./ifdown $i boot

fi

# Ключ "-q", характерный для GNU-версии "grep", означает "quiet" ("молча"), т.е. подавляет вывод.

# Поэтому нет необходимости переадресовывать вывод на /dev/null.

# ...

echo "В настоящее время активны устройства:"

echo `/sbin/ifconfig | grep ^[a-z] | awk '{print $1}'`

# ^^^^^ скобки необходимы для предотвращения подстановки имен файлов (globbing).

# Следующий код делает то же самое.

# echo $(/sbin/ifconfig | awk '/^[a-z]/ { print $1 })'

# echo $(/sbin/ifconfig | sed -e 's/ .*//')

# Спасибо S.C. за комментарии.

См. также Пример 29-6.

route

Выводит сведения о таблице маршрутизации ядра или вносит туда изменения.

bash$ route

Destination Gateway Genmask Flags MSS Window irtt Iface

pm3-67.bozosisp * 255.255.255.255 UH 40 0 0 ppp0

127.0.0.0 * 255.0.0.0 U 40 0 0 lo

default pm3-67.bozosisp 0.0.0.0 UG 40 0 0 ppp0

chkconfig

Проверка сетевой конфигурации. Обслуживает список, запускаемых на этапе загрузки, сетевых сервисов, список сервисов хранится в каталогах /etc/rc?.d (строго говоря, chkconfig работает не только с сетевыми сервисами, а с сервисами вообще, не зависимо от того сетевые это службы или нет. прим. перев.).

Изначально эта утилита была перенесена в Red Hat Linux из ОС IRIX, chkconfig входит в состав далеко не всех дистрибутивов Linux.

bash$ chkconfig --list

atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off

rwhod 0:off 1:off 2:off 3:off 4:off 5:off 6:off

...

tcpdump

"Сниффер" ("sniffer") сетевых пакетов. Инструмент для перехвата и анализа сетевого трафика по определенным критериям.

Дамп трафика ip-пакетов между двумя узлами сети -- bozoville и caduceus:

bash$ tcpdump ip host bozoville and caduceus

Конечно же, вывод команды tcpdump может быть проанализирован с помощью команд обработки текста, обсуждавшихся выше.

Команды для работы с файловыми системами

mount

Выполняет монтирование файловой системы, обычно на устройстве со сменными носителями, такими как дискеты или CDROM. Файл /etc/fstab содержит перечень доступных для монтирования файловых систем, разделов и устройств, включая опции монтирования, благодаря этому файлу, монтирование может производиться автоматически или вручеую. Файл /etc/mtab содержит список смонтированных файловых систем и разделов (включая виртуальные, такие как /proc).

mount -a -- монтирует все (all) файловые системы и разделы, перечисленные в /etc/fstab, за исключением тех, которые имеют флаг noauto. Эту команду можно встретить в сценариях начальной загрузки системы из /etc/rc.d (rc.sysinit или нечто похожее).

mount -t iso9660 /dev/cdrom /mnt/cdrom

# Монтирование CDROM-а

mount /mnt/cdrom

# Более короткий и удобный вариант, если точка монтирования /mnt/cdrom описана в /etc/fstab

Эта команда может даже смонтировать обычный файл как блочное устройство. Достигается это за счет связывания файла с loopback-устройством. Эту возможность можно использовать для проверки ISO9660 образа компакт-диска перед его записью на болванку[ 39 ].

Пример 13-5. Проверка образа CD

# С правами root...

mkdir /mnt/cdtest # Подготовка точки монтирования.

mount -r -t iso9660 -o loop cd-image.iso /mnt/cdtest # Монтирование образа диска.

# ключ "-o loop" эквивалентен "losetup /dev/loop0"

cd /mnt/cdtest # Теперь проверим образ диска.

ls -alR # Вывод списка файлов

umount

Отмонтирует смонтированную файловую систему. Перед тем как физически вынуть компакт-диск или дискету из устройства, это устройство должно быть отмонтировано командой umount, иначе файловая система может оказаться поврежденной (особенно это относится к накопителям на гибких магнитных дисках, прим. перев.).

umount /mnt/cdrom

# Теперь вы можете извлечь диск из привода.

Утилита automount, если она установлена, может выполнять атоматическое монтирование/размонтирование устройств со сменными носителями, такие как дискеты и компакт-диски. На ноутбуках со сменными устройствами FDD и CDROM, такой подход может привести к возникновению определенных проблем.

sync

Принудительный сброс содержимого буферов на жесткий диск (синхронизация содержимого буферов ввода-вывода и устройства-носителя). Несмотря на то, что нет такой уж острой необходимости в этой утилите, тем не менее sync придает уверенности системным администраторам или пользователям в том, что их данные будут сохранены на жестком диске, и не будут потеряны в случае какого-либо сбоя. В былые дни, команда sync; sync (дважды -- для абсолютной уверенности) была упреждающей мерой перед перезагрузкой системы.

1 ... 50 51 52 53 54 55 56 57 58 ... 96
На этой странице вы можете бесплатно читать книгу Искусство программирования на языке сценариев командной оболочки - Мендель Купер бесплатно.
Похожие на Искусство программирования на языке сценариев командной оболочки - Мендель Купер книги

Оставить комментарий