KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Мендель Купер - Искусство программирования на языке сценариев командной оболочки

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Мендель Купер, "Искусство программирования на языке сценариев командной оболочки" бесплатно, без регистрации.
Перейти на страницу:

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 (дважды -- для абсолютной уверенности) была упреждающей мерой перед перезагрузкой системы.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*