- •Особенности системы. Основные понятия
- •Основные компоненты ос unix
- •Начало работы с командной строкой, командами, процессами
- •Вход пользователя
- •Ввод простых команд
- •Печать времени
- •Получение информации о работающих пользователях
- •Уничтожение процесса
- •Выход пользователя
- •Формирование команд
- •Формат команд
- •Стандартные файлы
- •Перенаправление стандартного ввода-вывода
- •Организация конвейеров команд
- •Использование метасимволов
- •Файловая система ос unix
- •Общие сведения
- •Структура
- •Именование файлов
- •Механизм защиты файлов
- •Работа с файлами и каталогами
- •Вывод содержимого каталога
- •Изменение текущего каталога
- •Создание каталога
- •Вывод имени текущего каталога
- •Переименование каталога
- •Удаление пустого каталога
- •Вывод содержимого файла, конкатенация файла и создание файла
- •Переименование и перемещение файлов
- •Копирование файлов
- •Удаление файлов и каталогов
- •Установка и изменение режима доступа к файлу
- •Лабораторная работа №6 Управление процессами в ос Linux
- •Введение
- •О процессах linux
- •Клонирование процессов, процессы init и exec
- •Стандартные ввод и вывод
- •Элементарные операции над процессами
- •Перенаправление ввода и вывода
- •Операторы перенаправления ввода-вывода Linux перечислены в таблице 1.
- •Связывание процессов с помощью каналов (конвейеров)
- •Многозадачность
- •Приоритетный и фоновый режимы
- •Мониторинг многозадачной среды
- •Информация о состоянии процессов. Мониторинг процессов с помощью ps
- •Теперь, посмотрим результат вывода следующей команды:
- •Получение списка пользователей, работающих в системе
- •Запуск команд в заданное время с помощью команд at и batch
- •Запуск команд в определенное время с помощью команды at
- •Первая команда
- •После ввода всей команды вы увидите на дисплее нечто, наподобие:
- •Управление многозадачностью
- •Использование команды nohup
- •Изменение приоритета команд с помощью nice
- •Изменение приоритета работающего процесса с помощью renice
- •Прекращение процесса с помощью kill
- •Лабораторная работа №7 Командный интерпретатор shell
- •Запуск и выход из оболочки
- •Интерпретация командной строки
- •Последовательное выполнение команд (символ ;)
- •Специальные символы
- •Поиск всех символов (метасимвол *)
- •Поиск по одному символу (метасимвол ?)
- •Использование кавычек для отмены значения символа пробел
- •Создание простых программ shell и их выполнение
- •Ограничения при именовании программ shell
- •Переменные
- •Позиционные параметры
- •Специальные параметры
- •Именованные переменные
- •Удаление переменных
- •Присвоение значений переменным
- •Использование команды read
- •Арифметические операции: команда let
- •Конструкции языка программирования Shell
- •Комментарии
- •Оператор for
- •Оператор while
- •Условные операторы. Оператор if ... Then
- •Общий формат конструкции if
- •Безусловная передача управления
- •Отладка программы
- •Лабораторная работа №8 Работа в графической среде X Windows
- •К кнопка
- •Линейка пиктограмм
- •Кнопки виртуальных Рабочих столов
- •Список задач
- •Настройка kde
- •Центр управления kde
- •Настройка Панели
- •Добавление ссылок на приложения в Панель kde
- •Работа с файлами и каталогами в kde
- •Файловая система
- •Файловый менеджер Konqueror
- •Операции с файлами и каталогами с помощью файлового менеджера Konqueror
- •Создание файлов и каталогов
- •Изменение атрибутов файла
- •Редактирование файла
- •Работа со стандартными приложениями kde
- •Уничтожение окон в kde (аварийное закрытие программ)
- •Выход из kde
- •Ваши последние действия
- •Содержание
-
Условные операторы. Оператор if ... Then
Команда if говорит shell программе, что нужно выполнить последовательность команд после then, если последняя команда в списке команд конструкции if выполнилась успешно. Конструкции if заканчиваются ключевым словом fi.
-
Общий формат конструкции if
if<ENTER>
команда _1<ENTER>
…
последняя команда<ENTER>
then<ENTER>
команда _1<ENTER>
…
последняя команда<ENTER>
fi<ENTER>
Например, shell программа search демонстрирует применение конструкции if ... then. Программа search использует команду grep для поиска слова в файле. Если grep выполнилась успешно, то программа отображает найденное слово. После ввода:
cat search<ENTER>
экран будет выглядеть следующим образом:
echo Введите искомое слово и имя файла, в котором будем искать
read word
read file
if grep $word $file
then echo $word is in $file
fi
Эта программа отображает вывод команды grep. Если вы хотите сохранить ответ системы на команду grep в вашей программе, то воспользуйтесь файлом /dev/null, изменив командную строку if на следующую:
if grep $word $file > /dev/null<ENTER>
Теперь выполните команду search. Она ответит только сообщением, указанным после команды echo.
Конструкция if ... then ... else может исполнять альтернативный набор команд, стоящий после else, в случае, если последовательность if является ложью. Формат этой конструкции следующий:
if<ENTER>
команда_1<ENTER>
…
последняя команда<ENTER>
then<ENTER>
команда _1<ENTER>
…
последняя команда<ENTER>
else<ENTER>
команда _1<ENTER>
…
последняя команда<ENTER>
fi<ENTER>
С помощью этой конструкции вы можете усовершенствовать программу search, так что она будет сообщать вам и найденное слово и то, что слово не найдено. В этом случае программа search будет выглядеть следующим образом:
echo Введите искомое слово и имя файла, в котором будем искать
read word
read file
if
grep $word $file > /dev/null
then
echo $word is in $file
else
echo $word is NOT in $file
fi
Для команд существуют логические операции:
Логическое и: команда && команда
Логическое или: команда || команда
Логическое не: ! команда
-
Безусловная передача управления
Команда break безусловно останавливает выполнение любого цикла, в котором он встречается и передает управление команде, следующей после ключевых слов done или fi.
Команда continue приведет к тому, что программа немедленно перейдет к следующей итерации цикла while или for без выполнения остальных команд в цикле.
-
Отладка программы
Для нахождения и корректировки ошибок вам могут понадобиться две опции команды sh:
sh -v shellprogramname
(печатает вводимые shell строки, как если бы они были прочитаны системой);
sh -x shellprogramname
(печатает команды и их аргументы по мере их выполнения).
Контрольные вопросы
-
Перечислите основные функции командного интерпретатора Shell.
-
Как осуществляется вход и выход из оболочки?
-
Расскажите о метасимволах используемых в Shell и опишите их основные функции.
-
Опишите механизм создания и запуска программ в Shell.
-
Расскажите о позиционных и специальных параметрах.
-
Расскажите об именованных параметрах, опишите механизм их создания.
-
Как удалить именованные переменные?
-
Как изменить значение зарезервированным переменным?
-
Опишите известные вам способы присвоения значений переменным.
-
Расскажите о том, как можно производить вычисления в Shell.
-
Расскажите об известных вам конструкциях языка программирования Shell.
-
Опишите механизм отладки программ в Shell.
Практическая часть
-
Войдите в командный интерпретатор (если он не запустился автоматически).
-
Создайте несколько локальных и глобальных переменных. Используя переменные a, b, c, d, x, создайте сценарий записи в файл результатов вычисления заданных выражений:
, a=[1,2,5,8,10]
Для написания вам понадобятся операторы read, echo, for и let; сделайте ваш программный файл исполняемым.
-
Напишите программу, которая будет помещать в заданный текстовый файл, вводимые вами имена студентов вашей группы и оценки по дисциплине «Операционные системы». Вам понадобятся операторы read, echo и while.
-
Измените программу из предыдущего задания таким образом, чтобы файл со списком студентов не содержал повторяющихся записей и при вводе повторяющейся информации на экран выводились соответствующие сообщения. Вам понадобится операторы if, else, break или continue. Рекомендуется очистить содержимое файла, если в нём уже есть повторения.
-
Удалите переменные, созданные вами в начале работы.
Примечание
Вы можете проверить правильность выполнения ваших заданий с помощью специальной контролирующей программы:
Формат: <путь> labcontrol name1 name2 num
где name1 – имя проверяемой программы;
name2 – имя файла результатов проверяемой программы;
num – номер задания;
<путь> – путь к файлу к контролирующей программе.
Пример
$./ labcontrol prog res2 – вызов контролирующей программы, если она находится в текущей директории для проверяемой программы prog с файлом результата res для задания №2 ($ - приглашение системы).
Для того, чтобы при использовании проверяющей программы получать правильные результаты, нужно соблюдать определенные требования к сценариям.
Задание 2
Входные данные: значения переменных b, c, d вводятся с клавиатуры отдельными операторами read.
Выходные данные: результаты вычислений выводятся в файл результатов отдельными операторами echo.
Задание 4
Входные данные: фамилии студентов и оценки вводятся с клавиатуры отдельными операторами read (в цикле), причем сначала вводятся фамилии студентов, а затем их оценки.
Выходные данные: таблица оценок студентов выводятся в файл результатов отдельными операторами echo по образцу. Образец вывода:
Иванов – 5
Петров – 3
Сидоров – 2
Внимание! В программах не должно быть операторов ввода и вывода, вводящих или выводящих какую либо вспомогательную информацию, а при выводе в файл - лишних пробелов или других символов.
Приложение 1. Руководство пользователя
Для использования контролирующей программы нужно:
-
Набрать с помощью текстового редактора или скопировать файл с именем labcontrol (без расширения) с программой (см. Приложение 2). Его можно поместить в рабочий каталог на каждом компьютере или на сервер, но в последнем случае следует уточнить путь вызова программы.
-
Установить права доступа к файлу с программой как к исполняемому командой chmod 111 labcontrol.
-
Создать или скопировать в каталог с программой файлы с примерами и эталонные файлы результатов для всех проверяемых заданий. Для проверки данной лабораторной работы (а именно заданий 2 и 4) должны быть созданы следующие файлы:
Для задания 2 Файл 2_exp(без расширения): 3 1 2 Файл 2_pat(без расширения): 250 1 |
Для задания 4 Файл 4_exp(без расширения): Иванов 4 Петров 3 Кулебякин 5 Иванов 2 Файл 4_pat(без расширения): Иванов – 4 Петров – 3 Кулебякин – 5 |
-
Запретить доступ по записи к этим файлам, введя команды chmod 444 2_exp; chmod 444 2_pat; chmod 444 4_epx; chmod 444 4_pat.
Примечание
Данные действия желательно выполнять из сеанса администратора, чтобы студенты не могли изменить или удалить контролирующую программу или используемые ей файлы.
Приложение 2. Контролирующая программа
if ! test –f $3_exp
then echo Отсутствует файл с примером.; exit
#Проверка существования файла с исходными данными
fi
if ! test –f $3_pat
then echo Отсутствует файл с образцом.; exit
#Проверка существования файла с контрольными результатами
fi
if ! test –f $1
then echo Отсутствует файл с программой $1.; exit
#Проверка существования файла со сценарием, написанным студентом
fi
if ! test –r $1
then echo Ошибка: нет доступа по чтению к файлу с программой $1.; exit
#Проверка правильности установки доступа к файлу с программой
fi
mv $2 temp.txt 2>/dev/null
#Сохранение исходного файла с результатами работы программы студента под другим именем с перенаправлением стандартного вывода ошибок
if ! test –x $1
then echo Ошибка: файл с программой $1 не является исполняемым.
#Проверка правильности установки доступа к файлу с программой
fi
sh $1 <$3_exp >/dev/null 2>/dev/null
#Выполнение проверяемой программы с перенаправлением на её вход файла с исходными данными (не выводя сообщения этой программы)
if ! test –f $2
then echo Файл результата $2 не найден.; mv temp.txt $2 2>/dev/null; exit
#Проверка существования файла с результатами
fi
if diff $2 $3_pat –q >/dev/null 2>/dev/null
#проверка идентичности результата выполнения программы и контрольного варианта
then echo Результат выполнения программы верен!
else echo Ошибка: неверный результат выполнения программы!
fi
mv temp.txt $2 2>/dev/null
#восстановление под прежним именем ранее созданного файла с результатом работы программы
Приложение 3. Указания к использованию контролирующей программы
Данная программа (labcontrol) написана на BASH как исполняемый файл. Формат: <путь>labcontrol name1 name2 num
где name1 – имя проверяемой программы;
name2 – имя файла результатов проверяемой программы;
num – номер задания;
<путь> – путь к файлу к контролирующей программе.
Пример
$./ labcontrol prog res2 – вызов контролирующей программы, если она находится в текущей директории для проверяемой программы prog с файлом результата res для задания №2.
Для работы программы необходимы файлы с именами <номер задания>_exp (файл входных данных) и <номер задания>_pat (образцовый файл результатов).
Перед началом контроля программа осуществляет проверку существования двух вышеуказанных файлов, файла с проверяемой программой и файла результатов (проверка на его наличие осуществляется после выполнения проверяемой программы) и выдаёт сообщение, если они не найдены. В программе «заглушены» все выводы стандартных процедур и после её выполнения выдаются лишь результаты проверки на наличие требуемых файлов и результаты контроля.
Результатом работы программы являются:
-
сообщения об отсутствии необходимых файлов (если они не найдены);
-
результат проверки на то является ли проверяемая программа исполняемым файлом;
-
результат проверки на наличие доступа по чтению к проверяемой программе;
-
результат сверки файла результатов проверяемой программы с эталонным файлом результатов.
Программа не производит проверки содержания и правильности работы проверяемой программы, а только сверяет файл результатов с эталонным для заданного примера, поэтому в задании должны быть строго оговорены требования к входным и выходным данным проверяемой программы.