Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы, среды и оболочки. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
умножения (*), целочисленного деления (/) и получения остатка от де­ления (%):
A=`expr $x + $y`; B=`expr $x - $y`
C=`expr $x / $y`; D=`expr $x % $y`; E=`expr $x “*” $y`
Замечание: символ умножения должен быть взят в кавычки, так как это служебный символ интерпретатора, а имена переменных и знаки операций всегда разделяются пробелами.
Удаление переменных выполняется командой unset, например,
unset VAR_3.
Все локальные переменные доступны только в том процессе shell, в котором они были объявлены. Для того чтобы переменная стала гло­бальной и к ней можно было обращаться из дочерних процессов, ее следует экспортировать командой export. Возможны два способа экс­порта:
при создании переменной
(например, export VAR_4=myfolder);
после создания переменной (например, export VAR_4).
Команда export без аргументов выводит список всех экспортиро­ванных переменных интерпретатора.
Для выполнения командного сценария Linux создает отдельный эк­земпляр командного интерпретатора, поэтому переменные ‘*’, ‘#’ и ‘@’ имеют собственные значения для каждого запущенного сцена­рия. Все переменные, известные сценарию во время выполнения, обра­зуют его окружение, включающее
переменные, которые сценарий получает путем наследования от родительского процесса (от интерпре­татора shell), и собственные локальные переменные.
1.3. ПАРАМЕТРЫ СЦЕНАРИЯ
Сценарий может принимать аргументы, используя механизм фор­мальных и фактических параметров. Для описания формальных пара­метров в программе используются специальные переменные, имена которых состоят из одной цифры (в диапазоне от 0 до 9), перед
кото-
рой стоит символ ‘$’.
При запуске сценария в командной строке указываются значения фактических параметров, которые подставляются на место соответ­ствующих формальных параметров. Формальный параметр $0 содер­жит имя сценария, параметр $1 – значение первого фактического
11
параметра, параметр $2 – второго фактического параметра и т. д. Об­щее число параметров содержится в переменной # .
Если число фактических параметров превышает число формальных параметров, то в сценарии можно использовать команду shift n, кото­рая сдвигает список формальных параметров относительно списка фактических параметров на n позиций (по умолчанию n = 1). Обратите внимание: значение параметра
$0 не изменяется при использовании
команды shift!
При загрузке системы командный интерпретатор shell выполняет команды, содержащиеся в файле /etc/profile, затем команды, содержа­щиеся в файле $HOME
/.profile. Для того чтобы при входе в систему
автоматически устанавливались необходимые переменные, следует откорректировать файл .profile, находящийся в вашем домашнем ката­логе.
1.4. ОПЕРАТОРЫ ЯЗЫКА Shell
1.4.1. ОПЕРАТОР TEST
Оператор TEST проверяет выполнение заданного условия и воз­вращает логическое значение «истина» (0) или «ложь» (1).
Общий формат оператора:
test условие или [ условие ]
Замечание: вторая форма записи оператора предусматривает наличие обязательных пробелов между квадратными скобками и выражением условия. Если строка условия в команде test пустая, то возвращается значение 1.
Возможны условия нескольких видов.
1) Проверка файлов или переменных
формат команды: test ключ имя_файла | имя_переменной
ключ команды задает режим проверки и может принимать следу­ющие значения:
-f – указанный файл является обычным файлом;
-d – указанный файл является обычным каталогом;
-с – указанный файл является символьным устройством;
-r – указанный файл доступен для чтения;
-w – указанный файл доступен для записи;
-s – указанный файл не является пустым;
-n – указанная переменная имеет значение (не пустая);
-z – указанная переменная не имеет значения.
12
Примеры команды:
test –f /usr/user1/file_1 возвращает 0, если файл /usr/user1/file_1 является обычным файлом;
test –w /usr/user1/file_1 возвращает 0, если файл /usr/user1/file_1 доступен для записи;
test –n $ALFA возвращает 0, если переменная ALFA имеет значение.
2) Сравнение строк
формат команды: test строка1 отношение строка2
операции отношения строк: = (равно) или != (не равно).
Примеры команд:
test $A = $B возвращает 0, если значение переменной A равно значению переменной B;
test $A != $B возвращает 0, если значение переменной A не равно значе­нию переменной B.
Замечание: операция отношения обязательно с двух сторон окружается пробелами.
3) Сравнение целых чисел
формат команды: test число1 отношение число2
операции отношения чисел:
-eq – равно; -ne – не равно;
-gt – больше; -ge – больше или равно;
-lt – меньше; -le – меньше или равно.
1.4.2. ОПЕРАТОР IF
Условный оператор IF имеет следующий формат:
if условие then
список_операторов
[elif условие then
список_операторов ]
[else список_операторов]
fi
Здесь условие – любой оператор, возвращающий значение true или false (обычно используется оператор test);
список_операторов – операторы, разделенные точкой с запятой (;).
13
Пример оператора:
if [ -f /tmp/myfile ] then
cksum /tmp/myfile
else
ls /tmp > /tmp/myfile; cksum /tmp/myfile
fi
1.4.3. ОПЕРАТОР CASE
Оператор множественного выбора CASE имеет следующий формат:
Case строка in
шаблон_1) список_операторов;;
шаблон_2) список_операторов;;
шаблон_n) список_операторов;;
esac
Пример оператора:
echo –n ‘please enter symbol from A to C: ‘
read ENTRY
case $ENTRY in
A|a) echo ‘Apple’;;
B|b) echo ‘Baby’;;
C|c) echo ‘Coke’;;
*) echo ‘Please type A, B or C ! ’;;
esac
1.4.4. ОПЕРАТОР FOR
Оператор предопределенного цикла FOR имеет следующий формат:
for имя [in список] do
список_операторов
done
Если список значений для переменной не задан, то в качестве спис­ка используется значение внутренней переменной @, содержащей спи­сок аргументов сценария (см. табл. 3). Пример оператора:
list=”word 1 word2 word3 word4”
for VAL in $LIST do
echo $VAL
done
14
1.4.5. ОПЕРАТОРЫ WHILE И UNTIL
Операторы WHILE и UNTIL предназначены для создания циклов с неопределенным числом исполнения списка операторов. Спи-
сок_операторов оператора WHILE исполняется только тогда, когда условие истинно, а для оператора UNTIL – когда условие ложно. Вы-
ход из циклов проводится путем контроля значения условия или при­нудительно по команде break.
Форматы операторов:
while условие
do
список_операторов
done
1.4.6. ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ В СЦЕНАРИЯХ
until условие do список_операторов done
Функции shell описываются следующим образом:
имя_функции ()
(
список_операторов
)
Функции поддерживают механизм формальных и фактических па­раметров. Формальные параметры являются локальными и имеют имена от 0 до 9. Если функция должна вернуть код завершения, то ис­пользуется оператор return
1.5. СОЗДАНИЕ СЦЕНАРИЯ
Файл сценария можно создать несколькими способами. Первый способ основан на команде echo и может использоваться для создания только очень простых сценариев. Если файл должен содержать не­сколько строк, то в команде echo необходимо с помощью ключа -e разрешить обработку специальных символов и для перевода строки применять символы ‘\n’, например:
echo -e "ls -l \nman echo" > echo_primer.sh
Здесь в файл echo_primer.sh будут записаны две строки:
ls –l
man echo
15
Второй способ использует команду cat:
Ч
р
cat >cat_primer.sh
< команды >
нажатие ENTER
Ctrl+D
Третий способ основан на применении любого текстового редакто­ра, например vi. Редактор запускается следующим образом: vi имя_файла. Если файл с именем имя_файла не существует, то он бу­дет создан.
1.6. ПРАКТИЧЕСКОЕ ЗАДАНИЕ
1. Посмотрите справку по команде echo, ознакомьтесь с ее ключами.
2. Освойте способы создания сценария, описанные в разделе 1.5.
3. Разработайте сценарий для создания файла данных с информа-
цией по студенческой группе. Каждая запись файла должна иметь сле­дующие поля: фамилия (0), год рождения (20), место рождения (25), средний балл (40). В скобках
указано смещение поля относительно начала записи, количество записей в файле должно быть не менее 10. Данные в сценарий передавать через параметры, форматирование по­лей записи проводить путем циклического добавления необходимого числа пробелов, например:
len_fam=` expr length $fam`; [ $len_fam –lt 20 ] do #записываем пробел без перевода строки echo –n “ “ >>$file_dat; len_fam=`expr $len_fam + 1`; done
Здесь len_fam – переменная, в которой хранится текущая длина вве­денного пользователем значения поля.
Ниже приведен пример содержимого файла данных
Иванов И.И. 1999 Новосибирск 4,58 Петров П.С. 2000
ов С.К. 1999 Барабинск 3,41
Сидо Жернова А.И. 2000 Омск 4,12 Павлова Е.Ф. 1998 Томск 4,96 Ильин А.В. 2000 Владивосток 3,98
ерепаново 4,86
16
4. Разработайте сценарий для поиска в файле данных заданной
пользователем строки символов.
5. Разработайте сценарий для сортировки файла данных по задан-
ному пользователем полю записи.
6. Разработайте сценарий, формирующий меню для опроса пользо-
вателя (пункты меню – добавление новой записи, поиск данных, сор­тировка данных, просмотр данных, выход) и выполнение этого меню с помощью вызова соответствующих сценариев, разработанных в п. 3–5 задания.
1.7. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Командный сценарий: определение, назначение.
2. Способы запуска командного сценария.
3. Способы передачи данных в командный сценарий.
4. Переменные в командном сценарии: типы, область видимости,
допустимые операции.
5. Какие виды циклов могут использоваться в сценарии?
6. Какие виды ветвлений могут использоваться в сценарии?
7. Поясните алгоритм форматирования записей при выполнении
п. 3 практического задания.
17
2. ФАЙЛОВЫЕ СИСТЕМЫ
СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМ
Прочитав этот раздел, вы узнаете:
физическую и логическую модели диска; структуру системной области диска;  принципы хранения и доступа к данным на внешних запомина-
ющих устройствах в операционных системах Windows и Linux;
определение следующих терминов: файловая система, раздел,
таблица разделов, блок, кластер, менеджер логических томов, ин­дексный
ния информации на внешнем запоминающем устройстве (ВЗУ) и орга­низация доступа к ней; б) компонент операционной системы (ОС), ре­ализующий весь комплекс действий по работе с информацией, хранящейся на ВЗУ (распределение внешней памяти, контроль прав доступа, запись, удаление и т сматривать файловую систему как способ хранения и организации до­ступа.
нообразны. К ним относятся различные типы дисков (магнитные, оп­тические, магнитооптические), USB флэш-накопители, карты памяти и т. д. Наиболее широко применяются магнитные диски, поэтому оста­новимся принципы хранения данных на дисках, а затем особенности хранения для различных операционных систем.
дескриптор.
Термин «файловая система» имеет два значения: а) способ хране-
. д.). В настоящем пособии мы будем рас-
Устройства внешней памяти современных компьютеров очень раз-
именно на этом классе устройств. Рассмотрим сначала общие
18
2.1. МОДЕЛЬ ВНЕШНЕЙ ПАМЯТИ
2.1.1. ФИЗИЧЕСКАЯ МОДЕЛЬ ДИСКА
Информация на диске размещается вдоль концентрических окруж­ностей, называемых дорожками. Дорожки с одинаковыми номерами на различных поверхностях диска образуют цилиндр, для записи­чтения дорожек на каждой поверхности диска выделяется отдельная магнитная головка. Дорожка содержит определенное количество сек­торов. Сектор – это участок дорожки, хранящий минимальную пор- цию информации (обычно 512 байт), которая может
быть считана или записана за одно обращение к диску. Дорожки нумеруются в пределах поверхности, а секторы – в пределах дорожки.
Возможны два способа разбиения дорожек на секторы: с постоян­ным количеством секторов на дорожке и с переменным количеством секторов на дорожке. В первом способе каждая дорожка диска имеет одинаковое число секторов,
что обеспечивается изменением плотности записи при переходе с одной дорожки на другую. Максимальная плот­ность записи используется на дорожках с минимальным радиусом. Для получения доступа к произвольному сектору диска необходимо ука­зать его физический адрес, который включает номер цилиндра (cylinder), номер головки (head) и номер сектора (sector). Такой способ адресации называется CHS и может использоваться только для дисков небольшого объема (до 500 Мбайт).
Второй способ разбиения основан на том, что дорожки на каждой поверхности диска группируются в зоны. Все дорожки в одной зоне имеют одинаковое количество секторов, дорожки в зонах с меньшим радиусом имеют меньше секторов, чем зоны с большим радиусом, а плотность записи остается постоянной. Таким образом, без изменения технологии производства увеличивается общее число секторов на дис­ке и, следовательно, его объем. При этом используется линейная адре­сация всех секторов диска (LBA). В настоящее время для задания LBA­номера сектора используется 6 байт, что дает возможность адресовать на диске 2
48
секторов.
Физическая модель диска включает понятия дорожки, цилиндра, поверхности и сектора и используется его контроллером. Все диски отличаются друг от друга по набору этих параметров. Синонимом тер­мина «физический диск» является термин «физический том».
Замечание: программы, предназначенные для обслуживания дисков, ис­пользующих LBA-адресацию, получают от контроллеров дисков не реальную,
19
а фиктивную геометрию, определяемую ограничениями интерфейсов, но не соответствующую действительности. Обычно они сообщают, что на каждой поверхности диска имеется 255 дорожек, каждая из которых содержит 63 сек­тора.
2.1.2. ЛОГИЧЕСКАЯ МОДЕЛЬ ДИСКА
С логической точки зрения все адресное пространство диска пред­ставляет собой набор последовательно пронумерованных секторов. Небольшая часть этих секторов выделяется для хранения служебной информации и называется системной областью диска, остальные сек­торы предназначены для хранения файлов и каталогов и образуют об­ласть данных. С логической моделью диска работает операционная
система.
Единица
размещения дисковой памяти называется блоком, кото­рый состоит из одного или нескольких секторов. Файлы на диске мо­гут храниться в несмежных блоках. Размер блока в Linux обычно по умолчанию равен 1 Кбайт (2 сектора), а в Windows – 4 Кбайт (8 секто­ров). В Windows вместо термина «блок» часто применяется термин «кластер».
Все линейное дисковое пространство обычно разделяется
на не­сколько частей – разделов (partitions). В один раздел объединяется группа смежных цилиндров, для каждого раздела следует хранить ин­формацию о его начале и конце, т. е. номера первого и последнего из задействованных в нем цилиндров. Разделение всего дискового про­странства на разделы полезно по нескольким причинам:
уменьшаются «дальние перемещения
» головок чтения/записи и
увеличивается скорость выполнения операций чтения и записи;
появляется возможность структурирования данных (например,
можно отделить файлы пользователя от файлов ОС);
на одном диске можно установить несколько ОС;  на одном диске можно хранить информацию в разных файловых
системах, или в одинаковых файловых системах, но с
разным разме-
ром кластера.
Структура данных, хранящая информацию о логической организа­ции диска вместе с небольшой программой, которая находит и загру­жает в ОЗУ программу загрузки ОС, называется главной загрузочной записью (Master Boot Record, MBR) и располагается в самом первом секторе диска, т. е. в секторе с физическим адресом 0-0-1.
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]