Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы, среды и оболочки. Учебное пособие
.pdf
умножения (*), целочисленного деления (/) и получения остатка от деления (%):
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
