Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
8:30pm up 3 min, 3 users, load average: 0.49, 0.32, 0.13
45 processes: 44 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 13.6% user, 7.3% system, 0.0% nice, 78.9% idle
Mem: 78396K av, 65468K used, 12928K free, 0K shrd, 2352K buff
Swap: 157208K av, 0K used, 157208K free 37244K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
848 bozo0 R :00 top
1 root S :04 init
2 root SW :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 UHppp0
127.0.0.0 * 255.0.0.0 Ulo
default pm3-67.bozosisp 0.0.0.0 UGppp0
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 (дважды -- для абсолютной уверенности) была упреждающей мерой перед перезагрузкой системы.
Иногда возникает необходимость принудительной синхронизации буферов ввода-вывода с содержимым на магнитном носителе, как, например, при надежном удалении файла (см. Пример 12-42) или когда наблюдаются скачки напряжения в сети электроснабжения.
losetup
Устанавливает и конфигурирует loopback-устройства.
Пример 13-6. Создание файловой системы в обычном файле
SIZE=1048576 # 1 Мб
head - c $SIZE < /dev/zero > file # Создается файл нужного размера.
losetup /dev/loop0 file # Файл назначается как loopback-устройство.
mke2fs /dev/loop0 # Создание файловой системы.
mount - o loop /dev/loop0 /mnt # Монтирование только что созданной файловой системы.
# Спасибо S. C.
mkswap
Создание swap-раздела или swap-файла. Созданный swap-раздел (файл) нужно затем подключить командой swapon.
swapon, swapoff
Разрешает/запрещает использование swap-раздела (файла). Эта команда обычно используется во время загрузки системы или во время остановки.
mke2fs
Создает файловую систему ext2. Должна вызываться с правами суперпользователя.
Пример 13-7. Добавление нового жесткого диска
#!/bin/bash
# Добавление в систему второго жесткого диска.
# Программное конфигурирование. Предполагается, что устройство уже подключено к аппаратуре компьютера.
# Взято из статьи автора документа.
# "Linux Gazette", выпуск #38, http://www. .
ROOT_UID=0 # Этот сценарий должен запускать только root.
E_NOTROOT=67 # Код ошибки, если сценарий запущен простым пользователем.
if [ "$UID" - ne "$ROOT_UID" ]
then
echo "Для запуска этого сценария вы должны обладать правами root."
exit $E_NOTROOT
fi
# Будьте крайне осторожны!
# Если что-то пойдет не так, то вы можете потерять текущую файловую систему.
NEWDISK=/dev/hdb # Предполагается, что /dev/hdb -- это новое устройство. Проверьте!
MOUNTPOINT=/mnt/newdisk # Или выберите иное устройство для монтирования.
fdisk $NEWDISK
mke2fs - cv $NEWDISK1 # Проверка на "плохие" блоки (bad blocks) и подробный вывод.
# Обратите внимание: /dev/hdb1, *не* то же самое, что /dev/hdb!
mkdir $MOUNTPOINT
chmod 777 $MOUNTPOINT # Сделать новое устройство доступным для всех пользователей.
# Теперь проаерим...
# mount - t ext2 /dev/hdb1 /mnt/newdisk
# Попробуйте создать каталог.
# Если получилось -- отмонтируйте устройство и продолжим.
# Последний штрих:
# Добавьте следующую строку в /etc/fstab.
# /dev/hdb1 /mnt/newdisk ext2 defaults 1 1
exit 0
См. также Пример 13-6 и Пример 28-3.
tune2fs
Настройка отдельных параметров файловой системы ext2, например счетчик максимального количества монтирований без проверки. Должна вызываться с привилегиями пользователя root.
| Очень опасная утилита. Вы можете использовать ее только на свой страх и риск, поскольку, по неосторожности, вы запросто можете разрушить файловую систему. |
dumpe2fs
Выводит на stdout очень подробную информацию о файловой системе. Должна вызываться с привилегиями пользователя root.
root#
dumpe2fs /dev/hda7 | grep 'ount count'
dumpe2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
Mount count: 6
Maximum mount count: 20
hdparm
Выводит или изменяет параметры настройки жесткого диска. Должна вызываться с привилегиями пользователя root. Потенциально опасна при неправильном использовании.
fdisk
Создание или изменение таблицы разделов на устройствах хранения информации, обычно -- жестких дисках. Должна вызываться с привилегиями пользователя root.
| Пользуйтесь этой утилитой с особой осторожностью, т. к. при неправильном использовании можно легко разрушить существующую файловую систему. |
fsck, e2fsck, debugfs
Набор команд для проверки, восстановления и отладки файловой системы.
fsck: интерфейсная утилита для проверки файловых систем в UNIX (может вызывать другие утилиты проверки).
e2fsck: проверка файловой системы ext2.
debugfs: отладчик файловой системы ext2. Одно из применений этой универсальной (и опасной) утилиты -- это восстановление удаленных файлов. Только для опытных пользователей!
| Все эти утилиты должны вызываться с привилегиями пользователя root. При неправильном использовании, любая из них может разрушить файловую систему. |
badblocks
Выполняет поиск плохих блоков (физические повреждения носителей) на устройствах хранения информации. Эта команда может использоваться для поиска плохих блоков при форматировании вновь устанавливаемых жестких дисков или для проверки устройств резервного копирования. [40] Например, badblocks /dev/fd0, проверит дискету на наличие поврежденных блоков.
Утилита badblocks может быть вызвана в деструктивном (проверка осуществляется путем записи некоторого шаблона в каждый блок, а затем производится попытка чтения этого блока) или в недеструктивном (неразрушающем -- только чтение) режиме.
mkbootdisk
Создание загрузочной дискеты, которая может быть использована для загрузки системы, если, например, была повреждена MBR (master boot record -- главная загрузочная запись). Команда mkbootdisk -- это сценарий на языке командной оболочки Bash, автор: Erik Troan, располагается в каталоге /sbin.
chroot
CHange ROOT -- смена корневого каталога. Обычно, команды и утилиты ориентируются в файловой системе посредством переменной $PATH, относительно корневого каталога /. Команда chroot изменяет корневой каталог по-умолчанию на другой (рабочий каталог также изменяется). Эта утилита, как правило, используется с целью защиты системы, например, с ее помощью можно ограничить доступ к разделам файловой системы для пользователей, подключающихся к системе с помощью telnet (это называется -- "поместить пользователя в chroot окружение"). Обратите внимание: после выполнения команды chroot изменяется путь к исполняемым файлам системы.
Команда chroot /opt приведет к тому, что все обращения к каталогу /usr/bin будут переводиться на каталог /opt/usr/bin. Аналогично, chroot /aaa/bbb /bin/ls будет пытаться вызвать команду ls из каталога /aaa/bbb/bin, при этом, корневым каталогом для ls станет каталог /aaa/bbb. Поместив строчку alias XX 'chroot /aaa/bbb ls' в пользовательский ~/.bashrc, можно эффективно ограничить доступ команде "XX", запускаемой пользователем, к разделам файловой системы.
| При изменении корневого каталога, вам наверняка потребуется скопировать системные утилиты и разделяемые библиотеки в новый корневой каталог, поскольку после смены корневого каталога, директории с системными утилитами могут оказаться за пределами нового корневого каталога. |
lockfile
Эта утилита входит в состав пакета procmail (www. procmail. org). Она создает lock file, файл-семафор (или, если угодно, файл блокировки), который управляет доступом к заданному файлу, устройству или ресурсу. Lock file служит признаком того, что данный файл, устройство или ресурс "занят" некоторым процессом, и ограничивает (или вообще запрещает) доступ к ресурсу другим процессам.
Файлы блокировок широко применяются для защиты системных почтовых каталогов от одновременной записи несколькими пользователями, для индикации занятости порта модема, и т. п. Сценарии могут использовать файлы блокировок для того, чтобы выяснить -- запущен ли тот или иной процесс. Обратите внимание: если в сценарии будет предпринята попытка создать файл блокировки, когда он уже существует, то такой сценарий скорее всего зависнет.
Как правило, файлы блокировки создаются в каталоге /var/lock. Проверка наличия файла блокировки может быть проверена примерно таким образом:.
appname=xyzip
# Приложение "xyzip" создает файл блокировки "/var/lock/xyzip. lock".
if [ - e "/var/lock/$appname. lock ]
then
...
mknod
Создает специальный файл для блочного или символьного устройства (может потребоваться при установке новых устройств в компьютер).
tmpwatch
Автоматически удаляет файлы, к которым не было обращений в течение заданного периода времени. Обычно вызывается демоном crond для удаления устаревших файлов системного журнала.
MAKEDEV
Утилита предназначена для создания файлов-устройств. Должна запускаться с привилегиями пользователя root, в каталоге /dev.
root#
./MAKEDEV
Это своего рода расширенная версия утилиты mknod.
Команды резервного копирования
dump, restore
Команда dump создает резервные копии целых файловых систем, обычно используется в крупных системах и сетях. [41] Она считывает дисковые разделы и сохраняет их в файле, в двоичном формате. Созданные таким образом файлы, могут быть сохранены на каком-либо носина жестком диске или магнитной ленте. Команда restore -- "разворачивает" файлы, созданные утилитой dump.
fdformat
Выполняет низкоуровневое форматирование дискет.
Команды управления системными ресурсами
ulimit
Устанавливает верхний предел для системных ресурсов. Как правило вызывается с ключом - f, что означает наложение ограничений на размер файлов (ulimit - f 1000 ограничит размер вновь создаваемых файлов одним мегабайтом). Ключ - c ограничивает размер файлов coredump (ulimit - c 0 запретит создание coredump-файлов). Обычно, все ограничения прописываются в файле /etc/profile и/или ~/.bash_profile (см. Глава 26).
| Грамотное использование ulimit поможет избежать нападений, целью которых является исчерпание системных ресурсов, известных под названием fork bomb. #!/bin/bash # Этот сценарий служит исключительно демонстрационным целям. # Запускайте его на свой страх и риск -- он ПОДВЕСИТ вашу систему. while true # Бесконечный цикл. do $0 & # Этот сценарий вызывает сам себя. . . #+ порождая дочерние процессы бесконечное число раз. . . #+ точнее -- до тех пор, пока не иссякнут системные ресурсы. done # Это печально известный сценарий "sorcerer's appentice". exit 0 # Сценарий никогда не завершит свою работу. Команда ulimit - Hu XX (где XX -- это верхний предел количества процессов, которые может запустить пользователь одновременно) в /etc/profile вызовет аварийное завершение этого сценария, когда количество процессов превысит установленный предел. |
umask
Установка маски режима создания файлов. Накладывает ограничения на атрибуты по-умлчанию для создаваемых файлов. Маска представляет собой восьмеричное значение и определяет запрещенные атрибуты файла. Например, umask 022 удаляет права на запись для группы и прочих пользователей (у файлов, создававшихся с режимом 777, он оказывается равным 755; а режим 666 преобразуется в 644, т. е. 777 NAND 022 = 755, 666 NAND 022 = 644). [42] Конечно же, впоследствие, пользователь может откорректировать права доступа к своему файлу с помощью команды chmod. Как правило, значение umask устанавливается в файле /etc/profile и/или ~/.bash_profile (см. Глава 26).
rdev
Выводит или изменяет корневое устройство, размер RAM-диска или видео режим. Функциональные возможности утилиты rdev вообще повторяются загрузчиком lilo, но rdev по прежнему остается востребованной, например, при установке электронного диска (RAM-диск). Это потенциально опасная, при неумелом использовании, утилита.
Команды для работы с модулями ядра
lsmod
Выводит список загруженных модулей.
bash$
lsmod
Module Size Used by
autofs 9autoclean)
opl3 11376 0
serial_cs 5unused)
sb 34752 0
uart[sb]
sound 58368 0 [opl3 sb uart401]
soundlow 464 0 [sound]
soundcore 2800 6 [sb sound]
ds 6448 2 [serial_cs]
i82
pcmcia_core 45984 0 [serial_cs ds i82365]
| Команда cat /proc/modules выведет на экран эту же информацию. |
insmod
Принудительная загрузка модуля ядра (старайтесь вместо insmod использовать команду modprobe). Должна вызываться с привилегиями пользователя root.
rmmod
Выгружает модуль ядра. Должна вызываться с привилегиями пользователя root.
modprobe
Загрузчик модулей, который обычно вызывается из сценариев начальной загрузки системы. Должна вызываться с привилегиями пользователя root.
depmod
Создает файл зависимостей между модулями, обычно вызывается из сценариев начальной загрузки системы.
Прочие команды
env
Запускает указанную программу или сценарий с модифицированными переменными окружения (не изменяя среду системы в целом, изменения касаются только окружения запускаемой программы/сценария). Посредством [varname=xxx], устанавливает значение переменной окружения varname, которая будет доступна из запускаемой программы/сценария. Без параметров -- просто выводит список переменных окружения с их значениями.
| В Bash, и других производных от Bourne shell, имеется возможность установки переменных окружения и запуска программы (или сценария) одной командной строкой. var1=value1 var2=value2 commandXXX # $var1 и $var2 -- будут определены только в окружении для 'commandXXX'. |
| В первой строке сценария ("sha-bang") можно указать команду env, если путь к командному интерпретатору не известен. #! /usr/bin/env perl print "Этот сценарий, на языке программирования Perl, будет запущен,\n"; print "даже если я не знаю где в системе находится Perl.\n"; # Прекрасно подходит для написания кросс-платформенных сценариев, # когда Perl может находиться совсем не там, где вы ожидаете. # Спасибо S. C. |
ldd
Выводит список разделяемых библиотек, необходимых для исполняемого файла.
bash$
ldd /bin/ls
libc. so.6 => /lib/libc. so.6 (0x4000c000)
/lib/ld-linux. so.2 => /lib/ld-linux. so.2 (0x)
watch
Периодически запускает указанную программу с заданным интервалом времени.
По-умолчанию интервал между запусками принимается равным 2 секундам, но может быть изменен ключом - n.
watch - n 5 tail /var/log/messages
# Выводит последние 10 строк из системного журнала, /var/log/messages, каждые пять секунд.
strip
Удаляет отладочную информацию из исполняемого файла. Это значительно уменьщает размер исполняемого файла, но при этом делает отладку программы невозможной.
Эту команду часто можно встретить в Makefile-ах, и редко -- в сценариях на языке командной оболочки.
nm
Выводит список символов (используемых в целях отладки), содержащихся в откомпилированном двоичном файле.
rdist
Позволяет на заданных машинах хранить идентичные копии файлов. По умолчанию, rdist просматривает только те файлы, версия которых на удаленных машинах более старая, чем на локальной машине. Это делается сравнением последнего времени модификации и размера файла на локальной машине и на удаленных.
А теперь, используя полученные нами знания, попробуем разобраться с одним из системных сценариев. Один из самых коротких и простых -- это killall, который вызывается для остановки процессов при перезагрузке или выключении компьютера.
Пример 13-8. Сценарий killall, из каталога /etc/rc. d/init. d
#!/bin/sh
# --> Комментарии, начинающиеся с "# -->", добавлены автором документа.
# --> Этот сценарий является частью пакета 'rc'-сценариев
# --> Автор: Miquel van Smoorenburg, <*****@***nl. mugnet. org>
# --> Этот сценарий характерен для дистрибутива Red Hat
# --> (в других дистрибутивах может отсутствовать).
# Остановить все ненужные сервисы которые еще работают (собственно,
# их уже не должно быть, это лишь формальная проверка, на всякий случай)
for i in /var/lock/subsys/*; do
# --> Стандартный заголовок цикла for/in, но, поскольку "do"
# --> находится в той же самой строке, что и for,
# --> необходимо разделить их символом ";".
# Проверяется наличие сценария.
[ ! - f $i ] && continue
# --> Очень интересное использование "И-списка", эквивалентно:
# --> if [ ! - f "$i" ]; then continue
# Получить имя подсистемы.
subsys=${i#/var/lock/subsys/}
# --> В данном случае совпадает с именем файла.
# --> Это точный эквивалент subsys=`basename $i`.
# --> Таким образом получается имя файла блокировки (если он присутствует,
# -->+ то это означает, что процесс запущен).
# --> См. описание команды "lockfile" выше.
# Остановить службу.
if [ - f /etc/rc. d/init. d/$subsys. init ]; then
/etc/rc. d/init. d/$subsys. init stop
else
/etc/rc. d/init. d/$subsys stop
# --> Останавливает задачу или демона
# --> посредством встроенной команды 'stop'.
fi
done
Вобщем все довольно понятно. Кроме хитрого манипулирования с переменными, при определении имени подсистемы (службы), здесь нет ничего нового.
Упражнение 1. Просмотрите сценарий halt в каталоге /etc/rc. d/init. d. Он по размеру немного больше, чем killall, но придерживается той же концепции. Создайте копию этого сценария в своем домашнем каталоге и поэкспериментируйте с ним (НЕ запускайте его с привилегиями суперпользователя). Попробуйте запустить его с ключами - vn (sh -vn scriptname). Добавьте свои комментарии. Замените действующие команды на "echo".
Упражнение 2. Просмотрите другие, более сложные сценарии из /etc/rc. d/init. d. Попробуйте разобраться в их работе. Проверьте их работу, следуя рекомендациям, приведенным выше. За дополнительной информацией вы можете обратиться к документу sysvinitfiles в каталоге /usr/share/doc/initscripts-?.??, который входит в пакет документации к "initscripts".
Глава 14. Подстановка команд
Подстановка команд -- это подстановка результатов выполнения команды [43] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении.
Классический пример подстановки команд -- использование обратных одиночных кавычек (`...`). Команды внутри этих кавычек представляют собой текст командной строки.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |


