- •Введение
- •1 Тема 1. Назначение и функции ОС
- •1.1 ОС как базовая часть систем обработки данных (СОД)
- •1.2 Серверные ОС и рабочие станции
- •1.3 Многослойная структура ОС
- •1.4 ОС как базовая часть ПО ЭВМ
- •1.5 Режимы ядра и пользователя
- •1.6 Ядро и модули ОС
- •1.7 Три базовых концепции ОС: файл, пользователь, процесс
- •1.8 Системные вызовы fork(...) и exec*(…)
- •1.9 Дистрибутивы ОС
- •1.10 Лабораторная работа по теме №1
- •1.10.1 Рабочий стол УПК АСУ
- •1.10.2 Работа с личным архивом студента на flashUSB
- •1.10.3 Изучение рабочей среды пользователя upk
- •2 Тема 2. BIOS, UEFI и загрузка ОС
- •2.1 Архитектура х86
- •2.2 BIOS и его функции
- •2.3 Этапы и режимы POST
- •2.4 UEFI и его стандартизация
- •2.5 Блочные и символьные устройства компьютера
- •2.6 Винчестер и загрузочные устройства
- •2.7 Загрузочный сектор MBR, его назначение и архитектура
- •2.8 GRUB как универсальный загрузчик ОС
- •2.9 Меню и функции GRUB
- •2.10 Лабораторная работа по теме №2
- •2.10.1 Установка ПО GRUB на устройство flashUSB
- •2.10.2 Создание аварийного варианта ОС УПК АСУ
- •2.10.3 Практика настройки файла конфигурации grub.cfg
- •3 Тема 3. Языки управления ОС
- •3.1 Языки программирования и командные интерпретаторы
- •3.2 Базовый язык shell (sh)
- •3.3 Среда исполнения программ
- •3.4 Командная строка: опции и аргументы
- •3.5 Переменные shell
- •3.6 Специальные символы и имена файлов
- •3.7 Стандартный ввод/вывод и переадресация
- •3.8 Программные каналы
- •3.9 Сценарии
- •3.10 Фоновый и приоритетный режимы
- •3.11 Отмена заданий
- •3.12 Прерывания
- •3.13 Завершение работы ОС
- •3.14 Лабораторная работа по теме №3
- •3.14.1 Среда исполнения программ
- •3.14.2 Переменные, опции и аргументы командной строки
- •3.14.3 Стандартный ввод/вывод и переадресация
- •3.14.4 Программные каналы и сценарии
- •3.14.5 Работа с процессами и заданиями среды
- •3.14.6 Сценарии ПО GRUB
- •4 Тема 4. Управление файловыми системами ОС
- •4.1 Устройства компьютера
- •4.2 BOOT-сектор и разделы винчестера
- •4.3 Загрузочные сектора разделов
- •4.4 Структура файловой системы FAT32 (VFAT)
- •4.5 Структура файловой системы EXT2FS
- •4.6 Сравнение файловых систем
- •4.7 Стандартизация структуры ФС
- •4.8 Модули и драйверы ОС
- •4.9 Системные вызовы ОС по управлению устройствами и ФС
- •4.10 Три концепции работы с устройствами
- •4.11 Разделы дисков и работа с ними
- •4.12 Монтирование и демонтирование устройств
- •4.13 Файловые системы loopback, squashfs, overlayfs и fuse
- •4.14 Дисковые квоты
- •4.15 Лабораторная работа по теме №4
- •4.15.1 Типы, имена и узлы устройств
- •4.15.2 Структура винчестера и файловые системы
- •4.15.3 Стандартизация структуры ФС
- •4.15.4 Модули и драйверы ОС
- •5.15.5 Концепции работы с устройствами
- •4.15.6 FUSE и другие специальные ФС
- •4.15.7 Подключение рабочей области пользователя upk
- •5 Тема 5. Управление пользователями ОС
- •5.1 Пользовательские режимы работы ОС
- •5.2 Разграничение прав пользователей
- •5.3 Login и система доступа Linux-PAM
- •5.4 Команды управления пользователями
- •5.5 Лабораторная работа по теме №5
- •5.5.1 Инфраструктура управления пользователями
- •5.5.2 Реалные и эффективные права пользователя
- •5.5.3 Инфраструктура PAM
- •5.5.4 Команды управления пользователями
- •6 Тема 6. Теоретическая часть
- •6.1 Подсистема управления процессами
- •6.2 Главный родительский процесс init
- •6.3 Состояния процессов в ядре ОС
- •6.4 ОС реального времени
- •6.5 Алгоритм разделения времени
- •6.6 Четыре подхода к управлению процессами
- •6.7 Стандарты POSIX и сигналы
- •6.8 Работа пользователя с процессами
- •6.9 Системные вызовы ОС по управлению процессами
- •6.10 Подсистема управления оперативной памятью
- •6.11 Системные вызовы и разделяемая память
- •6.12 Передача сообщений
- •6.13 Лабораторная работа по теме №6
- •6.13.1 Сценарий загрузки ОС
- •6.13.2 Разные подходы к управлению процессами
- •6.13.3 Сигналы и средства IPC
- •Заключение
- •Список использованных источников
63
интерактив-ного shell'а).
Сигнал прерывания (2) перехватывается и игнорируется, поэ-тому выполнение системной функции wait (2) может быть прервано.
В любом случае, сигнал выхода (3) игнорируется.
-r
shell запускается как ограниченный [см. rsh(1)].
Замечание
Описание остальных флагов и аргументов приведено в описании команды set.
3.5 Переменные shell
Все переменные shell, включая рассмотренные выше переменные среды, называются параметрами:
•различаются два типа параметров: позиционные и ключевые;
•знак $ используется для подстановки значений параметра.
Позиционные параметры обозначаются цифрой или одним из символов: *, @, #, ?, -, $, !.
Значения цифровых позиционных параметров устанавливаются при вызове shellфункций или командой set:
0 — параметр 0 — имя вызываемой функции;
1 — параметр 1 — аргумент 1;
2 — параметр 2 — аргумент 2 и далее.
Значения следующих параметров shell устанавливает автоматически:
* или @ содержат все позиционные параметры, начиная с 1, разделенные пробелами;
# количество позиционных параметров (десятичное);
- флаги, указанные при запуске shell или установленные командой set;
? десятичное значение, возвращенное предыдущей командой;
$ идентификатор процесса, в рамках которого выполняется shell; ! идентификатор последнего асинхронно запущенного процесса.
Пример вывода позиционных параметров, часть из которых установлено автоматически, показан сценарием рисунка 3.3, а результат вывода - рисунком 3.4.
64
Рисунок 3.3 — Сценарий вывода позиционных параметров
Рисунок 3.4 — Результат вывода сценария
Ключевые параметры (переменные) обозначаются именами. Значения им присваиваются обычным способом:
имя=значение [имя=значение] ...
65
Различаются следующие виды подстановок параметров:
${параметр}
Подставляется значение параметра, если оно определено. Скобки используются, только если за параметром следует буква, цифра или знак подчеркивания, и их нужно отделить от имени параметра.
Вместо параметров * и @ подставляются все позиционные параметры, начиная с $1, разделенные пробелами.
${параметр:-слово}
Будем говорить, что параметр пуст, если его значение
не определено или является пустой цепочкой. При данном способе подстановки если параметр не пуст, подставляется его значение; в противном случае подставляется слово.
${параметр:=слово}
Если параметр пуст, ему присваивается слово; после этого подставляется значение параметра. Таким способом нельзя изменять значения позиционных параметров.
${параметр:?слово}
Если параметр не пуст, подставляется его значение; в противном случае в стандартный протокол выдается сообщение "параметр:слово" и выполнение shell'а завершается. Если слово опущено, то выдается сообщение "параметр:parameter null or not set".
${параметр:+слово}
Если параметр не пуст, подставляется слово; в противном случае не подставляется ничего.
Замечание
После проведения подстановок, полученная строка просматривается в поисках разделителей, которые берутся из системной переменной IFS, и расщепляется на аргументы.
Явные пустые аргументы сохраняются. Неявные пустые аргументы удаляются.
66
3.6 Специальные символы и имена файлов
Shell интерпретирует команды и аргументы команд как слова.
Следующие символы, если они не экранированы, завершают предыдущее слово:
; & ( ) | ^ < > пробел табуляция перевод_строки
Эти символы могут экранироваться одинарными или двойными кавычками.
•двойные кавычки могут экранировать одинарную кавычку;
•двойные кавычки не мешают подстановке параметров.
Символ \ используется для экранирования одиночных символов и удаляется из слова перед выполнением команды, но сам экранируется одинарными кавычками.
Вкомандах, работающих с именами файлов, возможно использование шаблонов:
•* сопоставляется с произвольной цепочкой символов, в том числе и пустой;
•? сопоставляется с произвольным символом;
•[...] сопоставляется с любым, перечисленным в скобках символом. Пара символов, разделенных знаком -, рассматривается как отрезок алфавита.
Если за [ стоит знак !, то шаблону удовлетворяет любой символ, не перечисленный в скобках.
Примеры использования шаблонов:
•ls .. - вывод списка файлов родительского каталога;
•ls . - вывод списка файлов текущего каталога (каталог, в котором находится пользователь);
•ls .* - вывод всех списка файлов и списка содержимого каталогов, с
именами начинающимися с «точки», для текущего каталога (каталог, в котором находится пользователь);
•ls .x* - вывод списка имен файлов, начинающихся с .x, для текущего каталога;
•ls .[a-c,x]* - вывод списка имен файлов, начинающихся с .a, .b, .c, .x, для текущего каталога;
•ls .config — вывод списка имен каталога .config;
•ls .config/* — вывод списка имен файлов каталога .config и его каталогов.
Замечание
Не следует надеяться на интуицию!
Обязательно следует проверить результаты вывода шаблонов в командной строке терминала.