Андрей Робачевский - Операционная система UNIX
- Название:Операционная система UNIX
- Автор:
- Жанр:
- Издательство:BHV - Санкт-Петербург
- Год:1997
- Город:Санкт-Петербург
- ISBN:5-7791-0057-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Робачевский - Операционная система UNIX краткое содержание
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей
Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
...
done
Скрипт очистки давно не используемых файлов во временных каталогах (обычно он запускается при загрузке системы) использует оператор for .
for dir in /tmp /usr/tmp /home/tmp
do
find $dir ! -type d -atime +7 -exec rm {} \;
done
При этом удаляются все файлы в указанных каталогах ( /tmp, /usr/tmpи /home/tmp), последний доступ к которым осуществлялся более недели назад.
Селекторы
Оператор case предоставляет удобную форму селектора:
case слово in
шаблон1 )
command
...
;;
шаблон2 )
command
...
;;
*)
command
...
;;
esac
Значение слово
сравнивается с шаблонами, начиная с первого. Если совпадение найдено, то выполняются команды соответствующего раздела, который заканчивается двумя символами ';'. Шаблоны допускают наличие масок, которые были рассмотрены нами в разделе "Подстановки, выполняемые командным интерпретатором". Раздел с шаблоном '*' аналогичен разделу default в синтаксисе селектора switch языка С: если совпадения с другими шаблонами не произошло, то будут выполняться команды раздела '*)'. В качестве примера использования селектора приведем скрипт запуска и останова системы печати в SCO UNIX.
state=$1
set `who -r`
case $state in
'start')
if [ $9 = "2" -o $9 = "3" ]
then
exit
fi
[ -f /usr/lib/lpshed ] && /usr/lib/lpshed
;;
'stop')
[ -f /usr/lib/lpshut ] && /usr/lib/lpshut
;;
*)
echo "usage $0 start|stop"
;;
esac
В случае, когда скрипт вызван с параметром start
, будет произведен запуск системы печати. Если параметр скрипта — stop
, то система печати будет остановлена. Запуск скрипта с любым другим параметром приведет к выводу сообщения об ошибке.
Ввод
Как мы уже видели, присвоение значений переменным может осуществляться явно или с помощью вывода некоторой программы. Команда read предоставляет удобный способ присвоить переменным значения, считанные из стандартного потока ввода. Это может быть строка, введенная пользователем или считанная из файла в случае перенаправления потока.
Команда read считывает строку из стандартного потока ввода и последовательно присваивает переменным, переданным в качестве параметров, значения слов строки. Если число слов в строке превышает число переменных, то в последней переменной будут сохранены все оставшиеся слова. Продемонстрируем это на простом примере:
Текст скрипта test5.sh:
#!/bin/sh
echo "input: "
while read var1 var2 var3
do
echo var1=$var1
echo var2=$var2
echo var3=$var3
echo "input: "
done
Запуск скрипта
$ test5.sh
input: пример работы команды read
var1=пример
var2=работы
var3=команды read
input: еще пример
var1=еще
var2=пример
var3=
input: ^D
$
В приведенном примере read в цикле считывает пользовательский ввод. Цикл завершается, когда достигнут конец файла (что эквивалентно пользовательскому вводу < Ctrl >+< D >), поскольку при этом read возвращает неудачу (код возврата равен 1) и while завершает работу. В первом цикле число введенных слов превышает количество переменных, поэтому значение переменной var3
состоит из двух слов. Во втором цикле значение var3
пусто.
Система управления заданиями
Командный интерпретатор может поддерживать управление заданиями. Для Bourne shell ( /bin/sh), который мы рассматриваем, систему управления заданиями включает парный ему интерпретатор /bin/jsh. В остальном этот интерпретатор имеет те же возможности.
В системе управления заданиями каждая команда (простая или составная), которую пользователь запускает со своего терминала, называется заданием . Все задания могут выполняться либо в текущем режиме, либо в фоновом режиме, либо быть приостановлены. Задание в каждом из этих состояний обладает рядом характеристик:
Состояние задания | Характеристики |
---|---|
Выполняется в текущем режиме | Задание может считывать данные и выводить данные на терминал пользователя |
Выполняется в фоновом режиме | Заданию запрещен ввод с терминала. Возможность вывода на терминал определяется дополнительными установками |
Приостановлено | Задание не выполняется |
Каждое задание при запуске получает уникальный идентификатор, называемый номером задания , который используется в командах системы управления. Синтаксис номера задания, применяемый в командах:
% jobid
где jobid
может принимать следующие значения:
% или + |
Текущее задание — самое последнее запущенное или вновь запущенное задание |
- |
Предыдущее задание (по отношению к текущему) |
? строка |
Задание, для которого строка присутствует в командной строке запуска |
n |
Задание с номером n |
pref |
Задание, на которое можно уникально указать префиксом pref , например, команда ls(1) , запущенная в фоновом режиме, адресуется заданием %ls |
Система управления заданиями позволяет использовать следующие дополнительные команды:
bg [% jobid ] |
Продолжает выполнение остановленного задания в фоновом режиме. Без параметра относится к текущему заданию. |
fg [% jobid ] |
Продолжает выполнение остановленного задания в текущем режиме. Если задание jobid выполнялось в фоновом режиме, команда перемещает его в текущий режим. |
jobs [-p | -l] [% jobid ... ] |
Выводит информацию об остановленных и фоновых заданиях с указанными номерами. Если последний аргумент опущен, выводится информация обо всех остановленных и фоновых заданиях. Приведенные ниже опции изменяют формат вывода: -l Вывести идентификатор группы процессов и рабочий каталог. -р Вывести только идентификатор группы процессов. |
kill [-signo] % jobid |
Обеспечивает те же возможности, что и команда kill(1) , но по отношению к заданиям. |
stop % jobid |
Останавливает выполнения фонового задания. |
wait % jobid |
Ожидает завершения выполнения задания jobid и возвращает его код возврата. |
Приведенный ниже пример иллюстрирует использование команд управления заданиями и не нуждается в комментариях:
Читать дальшеИнтервал:
Закладка: