Скачать 198.84 Kb.
|
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования Московский государственный институт электроники и математики (Технический университет) Кафедра математического обеспечения систем обработки информации и управления Программирование на командном языке в операционной среде UNIX Методические указания к лабораторным и домашним работам по дисциплине «Операционные системы» Специальности: 230401 – Прикладная математика 220101 – Вычислительные машины, комплексы, системы и сети 071900 – Информационные системы и технологии 090102 – Компьютерная безопасность Москва 2004Составитель канд. техн. наук, доц. А.Ю. Истратов УДК 681.1.06 Программирование на командном языке в операционной среде UNIX. / Моск. гос. ин-т электроники и математики; Сост. –А.Ю. Истратов, 2004г. – с. Библиогр.: 4 назв. Рассматриваются вопросы программирования на командном языке в операционной системе UNIX. Излагаемый материал является общим для всех разновидностей shell оболочек UNIX – систем. Представлена информация о функциях интерпретатора shell, встроенных и внешних командах, синтаксисе командного языка. Приведены задания лабораторных работ и примеры выполнения. Для студентов специальностей «Прикладная математика», «Защита информации», «Информационные системы и технологии», «Вычислительные машины, комплексы, системы и сети» ???? ISBN 5–94506–100–X
Интерпретатор команд shell – одна из важнейших программ ОС UNIX. Разработано достаточно много версий этой программы, но все они обеспечивают интерфейс "пользователь-ядро" и выполняют следующие функции: Интерпретация команды Обработка имен файлов, определяемых через мета-символы Осуществление переадресации в/в Создание среды пользователя Поддержка командного языка Интерпретация команды - проверка команды на синтаксис Команды shell реализуются обычными программами, находящимися в одном из каталогов файловой системы UNIX. Интерпретация команд осуществляется согласно интерактивному режиму работы. Обработка имен файлов разрешает использование большого набора мета-символов, для сокращения записи имен файлов. Метасимвол ‘*’ – обозначает произвольную строку символов. Может располагаться в произвольном месте имени файла. Например, пусть в текущем каталоге находятся файлы f1, f2, f3, f4, f5. Распечатать их содержимое можно следующей командой: рr f1 f2 f3 f4 f5, Используя метасимвол ‘*’, эту команду можно записать по-другому: pr f* или pr *. Указав в [ ] последовательность цифр или букв, можно указать альтернативный символ подстановки: pr f[1 2 3 4 5] pr *[1 2 3 4 5], pr f[1-3 4 5], pr f[1-5] Метасимвол ‘?’ - соответствует единственному произв. символу pr f? Осуществление переадресации в/в. Если требуется, shell легко перераспределяет устройства ввода/вывода, например: ls > file вывод команды ls будет осуществлен в файл с именем file (вместо экрана монитора). Операция ‘>’ – это переадресация вывода. Чтобы добавлять информацию в конец уже существующего файла, определена операция слабой переадресации ‘>>’, например команда cat d1.c d2.c > temp записывает содержимое файлов d1.c и d2.c в файл temp, уничтожая содержимое последнего в случае, когда он существовал и, создавая последний в случае, когда он не существовал, а команда cat d1.c d2.c >> temp дописывает содержимое файлов d1.с и d2.с к содержимому файла temp, если он существовал. Если файл temp не существовал, то он будет создан и в него запишется содержимое файлов d1.c и d2.c. Аналогично переадресация вывода осуществляется переадресация ввода ‘<<�’, ‘<�’, например при выполнении команды mail tty01 tty02 tty03 < let все данные из файла let поступят на три терминала tty01, tty02, tty03; последовательность команд who > temp sort < temp позволит получить список пользователей, работающих в настоящий момент в системе, в алфавитном порядке. Shell также допускает объединение нескольких команд в конвейер для их совместного последовательного выполнения. В этом случае связь между командами осуществляется через межпроцессный канал. Результат выполнения одной команды сразу поступает на вход другой. По сути, конвейер является простейшей программой на командном языке, которая позволяет, используя ряд синтаксических конструкций, объединять команды с программой, интерпретируемой, как единое целое. Например, с помощью операции конвейера ‘|’ последнюю последовательность команд можно записать в следующем виде who | sort, а количество файлов в текущем каталоге ls | wc -w С помощью операций «и» ‘&&’ и «или» ‘||’ можно формировать условную последовательность выполнения. Например: cc – o a.exe a.c && ./a.exe ./a.exe будет выполняться только если компиляция исходной программы прошла успешно. Создание среды пользователя: Для каждого пользователя shell организует доступ к любой команде. Поддержка командного языка: Для эффективного взаимодействия команд в рамках программ на командном языке интерпретатор разрешает использование специальных переменных, обычных идентификаторов, которые объявляются и инициализируются присваиванием и, к которым при использовании добавляется символ ‘¤’ (или $, или %). Помимо переменных, вводимых пользователем, shell позволяет использовать специальные системные переменные, такие как $# - число внешних аргументов выполняемой команды, $ - все переменные shell, символ `(«тупое» ударение) или {} - подстановка результата выполнения команды, символ \ - отменяет специальный смысл непосредственно следующего за ним символа, символ ‘ – отменяется смысл всех символов, заключенных в символы ‘, символ “ – отменяет смысл всех символов заключенных в “ , за исключением символов \, “, ‘, $ и др. Командный язык UNIX является развитым языком программирования и содержит такие синтаксические конструкции как условные операторы, операторы цикла и операторы переключателя. Рассмотрим пример. Напечатать имена тех файлов каталога is_43, которые являются объектными и по объему не превышают некоторой заданной величины: ### dir=pwd – запоминаем текущий каталог cd ../../is_43 - переход к директории is_43. files ={ls *.o} - shell –переменной files присваивается список имен объектных файлов текущего каталога. for i in $files - переменной i последовательно присваиваются имена файлов из списка имен файлов текущего каталога. do n=size $i определяется размер каждого файла. if test $n -lt $1 then echo $i - проверяется не превосходит ли размер установленного значения, передаваемого в командную процедуру в качестве первого внешнего аргумента $1. Если условие выполняется, то имя соответствующего объектного модуля выводится на экран монитора.(*) fi done cd $dir - возврат в каталог, в котором мы находились до выполнения процедуры ### *В команде test значения операций сравнения следующие: -lt - меньше -le - меньше или равно -eq - равно -gl - больше или равно -gt - больше -ne - не равно Сохранив данную командную процедуру в текущем каталоге файловой системы, например под именем prob.com, и, придав этому файлу статус выполнимого (с помощью команды chmod), можно обращаться к нему следующим образом: ./prob.com 7 В результате на экране монитора появятся имена объектных файлов из каталога ../../is_43, размер которых не превышает 7 байтов. 2. Особенности программирования на командном языке На современном этапе наиболее распространенные версии интерпретатора shell следующие: B shell (автор Stephen Bourne, Bell Labs); C shell (автор Bill Joy, Калифорнийский Университет, С-подобный синтаксис); K shell (автор David Korn, Bell Labs, обобщенны возможности B shell и C shell); Р shell (основан на стандарте POSIX 1, подобен K shell) POSIX = Portable Operating System Interface Интерпретатор включает встроенные и внешние команды. Встроенные – являются частью интерпретатора и не требуют при своем выполнении запуска процесса. Для выполнения внешних команд порождается новый процесс (Например grep, ls, lp, more, sort и т.д.). Встроенные команды:
Присваивание значения переменным выполняется либо оператором присваивания, либо командой read_имя Пример: $ read a b c one two three $ echo $a $b $c one two three Вычисление арифметических выражений осуществляется командой expr арифметическое выражение Или let арифметическое выражение Операции: +,-,*,/,% - для expr и let; >,=>,<,=<,!=,&,|,! – для let Пример: a = 2 a=`expr $a+7` b=`expr $a/3` c=`expr $a’*’$b` echo $a $b $c 9 3 27 a=1 while let “a<=3” do echo $a hello let “a=a+1” done 1 hello 2 hello 3 hello Сравнение цепочек символовx=abcde w=`expr “$x”:’abc’` y=`expr “$x”:’abd’` z=`expr “$x”:”.*”` echo $w $y $z 3 0 5 Проверка файлов, числовых величин и цепочек символов осуществляется командой test выражение или [выражение] Проверка файлов: test –флаг файл Флаги test: -f – существует ли файл и является ли он обычным; -d – существует ли файл и является ли он каталогом; -b – существует ли файл и является ли он блок-ориентированным специальным файлом; -c – существует ли файл и является ли он байт-ориентированным спец. файлом; -p – существует ли файл и является ли он каналом; -s – существует ли файл и является ли он гнездом; -r – проверка файла на чтение; -w – проверка файла на запись; -x – проверка файла на исполнение; Пример: test –x u a.exe проверяем, может ли владелец исполнять файл (варианты – g,o – для группы и остальных). Проверка цепочки символов: test –n цепочка – проверка существования (аналог grep) test –z цепочка – проверка отсутствия цепочки символов test цепочка=цепочка – проверка равенства двух цепочек Примеры: x=abc x=abc test “$x”=”abc” [“$x”!=”abc”] echo $? echo $? 0 1 Возможности смешанной проверки. Операции ! (не), -о (или), -а (и) Сравнение осуществляется с помощью конструкций if и case: if список А then список Б else список В fi case слово in модель 1) список А;; … модель n) список N;; esac Примеры: x=abc case $x in ?*a*) echo has an ‘a’;; a*) echo starts with ‘a’;; *) echo no ‘a’;; esac starts with a Циклы осуществляются операторами while, until, for while список А do список Б done until список А do список Б done for переменная [in список] do список_ команд done Примеры: x=0 until [$x –eq 10] do echo hello x=`expr $x + 1` done hello hello hello … for i in 1 2 3 4 do echo hello $i done hello 1 hello 2 hello 3 hello 4 n=0 for i do n=`expr $n + 1` echo Argument $n:$i done Оформив эту процедуру как файл prog1 c присвоением статуса выполнимого и, запустив командой prog1 one two three получим на экране монитора: Argument 1:one Argument 2:two Argument 3:three Пример: составить процедуру для подсчета числа символов в строке, вводимой с клавиатуры. Echo “input string” read a echo “string is: \n $a” leng = `expr “$a”:’.*’` echo “string consists of $leng chars” Пример: написать процедуру, которая выводит в столбец аргументы в вызове данной процедуры. Если аргументов нет, то вывести идентификатор текущего процесса. If [$# -eq 0] then echo “pid is $$” else echo “Arguments:” while [$1] do echo $1 shift done В shell можно использовать функции. Формат для определения функции следующий: Имя_функции() { тело функции } Пример: осуществлять подсчет итераций цикла до тех пор, пока пользователь не прервет цикл по trap “po13” 2 3 i=0 po13() {echo “ A number of circles is $i” exit 1 } while : do i=`expr $i + 1` echo $i sleep 1 done Пример 1: написать процедуру, которая определяет размер всех файлов в текущем каталоге и выводит на экран имена тех файлов имена тех файлов, размеры которых превышают значения некоторого числа a. Read afor i in * do size = `wc –c < $i` if [ $size –ge $a ] then echo “$i has $size bytes” fi done Пример 2: написать процедуру подсчета количества и формирования списка файлов текущего каталога, которые содержат текстовую информацию; список направить в файл text.txt Find . –exec file {*.*} \; | grep text | cut –d: -f 1 | tee text.txt | wc –l3. ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ1. Написать на командном языке программу, предоставляющую информацию о содержимом очереди на печать. Передать эту информацию через файловую систему в параллельный процесс и в нем вывести на экран дисплея содержимое тех файлов, которые хотят распечатать. Предусмотреть возможность неоднократного прерывания от клавиатуры. При поступлении 3-его прерывания вывести количество файлов в очереди на печать. 2. Написать на командном языке программу вывода списка всех пользователей, работающих в настоящее время в системе. Передать полученную информацию через файловую систему в параллельный процесс и вывести на экран только имена задействованных терминалов. Предусмотреть в программе неоднократное прерывание от клавиатуры. При поступлении второго прерывания вывести на экран дисплея содержимое корневого каталога. 3. Написать на командном языке программу нахождения файлов с расширением *.с, принадлежащих данному пользователю, и изменить у них код защиты на введенный. Предусмотреть возможность прерываний от клавиатуры. Первые пять прерываний игнорировать. При поступлении большего числа прерываний вывести количество файлов с измененным кодом защиты. 4. Написать на командном языке программу подсчета числа строк, слов и символов указанного по запросу текстового файла. Полученную информацию передать через межпроцессный канал в параллельный процесс и в нем вывести только информацию о количестве слов, записав ее при этом в файл. Предусмотреть возможность неоднократного прерывания по сигналу +. При поступлении каждого нечетного прерывания выводить информацию обо всех текстовых файлах текущего каталога. 5. Написать на командном языке программу копирования содержимого одного файла в другой, создавая последний в случае необходимости, и оформить ее в виде команды интерпретатора shell ОС UNIX с выдачей сообщения о количестве блоков копируемого файла (блок = 512 байт) и байтов. Предусмотреть аномальные ситуации и возможность прерывания от клавиатуры. 6. Написать программу на командном языке, предоставляющую информацию обо всех активных процессах в системе. Передать эту информацию через межпроцессный канал в параллельный процесс и вывести в нем идентификаторы всех процессов. Предусмотреть возможность неоднократного прерывания от клавиатуры. При поступлении четвертого прерывания вывести имена всех задействованных терминалов в системе в настоящее время.7. Написать на командном языке программу сортировки файлов текущего каталога по времени последнего доступа. Передать полученную информацию через межпроцессный канал в параллельный процесс и в нем вывести на экран имена только тех файлов, которые отмечены текущей датой. Предусмотреть возможность неоднократного, прерывания от клавиатуры. При поступлении каждого второго сигнала прерывания выводить количество символов (байтов) выделенных файлов.8. Написать на командном языке программу, формирующую командный файл, транслирующий и запускающий на выполнение введенный по запросу и переданный через межпроцессный канал файл. Предусмотреть возможность неоднократного прерывания от клавиатуры. При поступлении 2-го прерывания возобновить выполнение исходной программы. 9. Написать на командном языке программу, осуществляющую копирование введенного по запросу файла в файл text.txt. Информацию переслать через межпроцессный канал в параллельный процесс-потомок, где проверить, нет ли различий между исходным файлом и его копией, и исходный файл удалить, если нет различий. Предусмотреть возможность неоднократного прерывания по сигналу +. При поступлении 1-го прерывания переименовать файл в исходный и распечатать его содержимое. 10. Написать на командном языке программу, посылающую почту всем соседним пользователям. Предусмотреть возможность прерывания от клавиатуры. При поступлении пятого прерывания вывести на экран имена терминалов, на которые посылалась почта. 11. Написать на командном языке программу поиска и удаления по запросу во всех каталогах, имеющих общий родительский каталог, файлов с расширением .txt. Предусмотреть возможность неоднократного прерывания по сигналу +. При поступлении каждого сигнала прерывания выводить информацию о том, сколько файлов уже удалено. 12. Написать на командном языке программу выдачи списка всех пользователей, работающих в настоящее время в системе (имена связанных с ними терминалов и время входа в систему не указывать). Передать полученную информацию через межпроцессный канал в параллельный процесс, где вывести на экран. Предусмотреть возможность неоднократного внешнего прерывания. При каждом прерывании вывести время его поступления. 13. Написать на командном языке программу поиска в файле, имя которого вводится по запросу неограниченное число раз, строки с заданным шаблоном. Полученную информацию через область внешних аргументов переслать в параллельный процесс и в нем вывести её в файл. Предусмотреть возможность неоднократного прерывания по сигналу +. При поступлении более десяти сигналов прерывания окончить выполнение программы. 14. Написать на командном языке программу, объединяющую два введенных по запросу файла в один. Переслать содержимое полученного файла через межпроцессный канал в параллельный процесс, где получить информацию о количестве строк, слов и символов этого файла. Предусмотреть возможность прерывания от клавиатуры. При поступлении первого прерывания вывести информацию о количестве строк, слов и символов первого файла, при поступлении второго прерывания вывести те же самые атрибуты второго файла 15. Написать программу на командном языке, осуществляющую выполнение команды ОС UNIX ls таким образом, чтобы данные на стандартный ввод команды ls (ключи, имена файлов) в параллельном процессе потомке поступали из стандартного вывода основного процесса (где они вводились бы по запросу) через межпроцессный канал. Предусмотреть в программе возможность неоднократного прерывания от клавиатуры. При поступлении трех сигналов прерывания дополнительно вывести количество строк для каждого файла, указанного в аргументах. В остальных случаях просто продолжать выполнение программы. 16. Написать программу поиска в одном из соседних каталогов файлов размером более, чем в три блока, к которым обращались менее, чем пять дней назад. Полученную информацию через файловую систему послать в параллельный процесс. Предусмотреть возможность неоднократного внешнего прерывания. При поступлении 2-го прерывания вывести информацию об общем количестве блоков, занимаемых этими файлами. 17. Написать программу сравнения и вывода результата двух введенных по запросу файлов. Информацию переслать через межпроцессный канал в параллельный процесс, где определить число блоков, занимаемых каждым из введенных файлов. Предусмотреть возможность прерывания по сигналу +. Если поступило более 3-х сигналов прерывания, то создать новый каталог в текущем и записать туда сравниваемые файлы. 18. Написать программу вывода календаря текущего месяца текущего года и по введенной дате определить день недели. Предусмотреть возможность неоднократного прерывания выполнения программы от клавиатуры. При поступлении трех сигналов прерывания вывести информацию о том, сколько дней в указанном году. 19. Написать программу на командном языке, осуществляющую вывод в создаваемый по запросу файл через межпроцессный канал из параллельного процесса полного имени текущего каталога и списка файлов текущего каталога. Предусмотреть в программе возможность неоднократного прерывания от клавиатуры. При поступлении первого прерывания вывести дополнительно и количество блоков, отводимых под каждый файл текущего каталога. При большем количестве прерываний вывести только общее количество блоков, отведенных под каталог.20. Написать программу, определяющую права доступа для всех файлов текущего каталога. Передать эту информацию через файловую систему в параллельный процесс и вывести данные только о тех файлах, дата создания которых не превышает семи дней от текущей даты. Предусмотреть возможность прерывания от клавиатуры. 21. Написать на командном языке программу определения типа файла, указанного при запросе. Полученную информацию через файловую систему передать в параллельный процесс, где вывести на печать. Предусмотреть возможность поступления неоднократного прерывания от клавиатуры. При поступлении каждого сигнала прерывания выводить количество файлов (из числа указанных при запросе), содержащих текст программ на Си. 22. Написать на командном языке программу вывода информации о количестве блоков, занимаемых каждым файлом текущего каталога. Передать эту информацию через межпроцессный канал в параллельный процесс и в нем вывести имена тех файлов, размер которых превышает 4 блока. Предусмотреть возможность неоднократного внешнего прерывания. При поступлении каждого пятого прерывания выводить информацию об общем количестве блоков, отведенных под файлы текущего каталога. 23. Написать программу на командном языке, создающую и заполняющую текстовый файл. Информацию этого текстового файла через межпроцессный канал передать в параллельный процесс. В нем после каждого символа текста вписать в файл порядковый номер и передать через межпроцессный канал в параллельный процесс, где разделить каждый символ со своим номером пробелом. Из текущего процесса переслать полученную информацию в исходный процесс и там вывести на печать. Предусмотреть возможность прерывания от клавиатуры. 24. Написать на командном языке программу, осуществляющую трансляцию и выполнение файлов на языке программирования Си, имена которых вводятся по запросу. Предусмотреть возможность неоднократного прерывания от клавиатуры. При поступлении более пяти сигналов прерывания распечатать все файлы текущего каталога с расширением *.с. 25. Написать на командном языке программу подсчета количества блоков, занимаемых каждым файлом и общего количества блоков для всех файлов текущего каталога. Информацию переслать через межпроцессный канал. И при считывании ее из канала в параллельном процессе извлечь данные только о том файле, имя которого введено по запросу, а также об общем количестве блоков. Предусмотреть возможность неоднократного прерывания от клавиатуры. При поступлении пяти сигналов прерывания вывести информацию о количестве символов указанного файла. В остальных случаях просто продолжать выполнение программы. 4. БИБЛИОГРАФИЧЕСКИЙ СПИСОК
|
Методические указания к лабораторным работам по дисциплине “ Методические указания к лабораторным работам по дисциплине “Нормативные документы и должностные инструкции” / А. Г. Куприянов, А.... |
Методические указания к лабораторным работам по дисциплине «Операционные системы» Программирование в операционной среде unix: обмен информацией между параллельными процессами, организация защиты файлов в файловой... |
||
О. Р. Никитин Специализация по теме диссертации Методические указания... Методические указания к лабораторным работам предназначены для бакалавров направления 210400 «Радиотехника» и специальности 210600... |
Методическая разработка и указания к лабораторным работам по дисциплине... Федеральное государственное образовательное учреждение высшего профессионального образования |
||
Методическая разработка и указания к лабораторным работам по дисциплине... Федеральное государственное образовательное учреждение высшего профессионального образования |
Методические указания к лабораторным работам по дисциплине «микроэлектронные устройства» Горохов А. В, Пичугина Л. П. Методические указания к лабораторным работам по дисциплине «Микроэлектронные устройства». – М.: Ргу... |
||
Методические указания к лабораторным работам №№1÷4 по дисциплине «Web-программирование» Отчеты по лабораторным работам оформляются в электронном виде с именами авт-500 Иванов, Петров (лр1). doc (или *. docx, *. rtf, *.... |
Методические указания к лабораторным работам «спектрофотометрический анализ» Методические указания к лабораторным работам «спектрофотометрический анализ» по спецкурсу «оптические методы анализа» для студентов... |
||
Методические указания к лабораторным работам по курсу «Новые разделы информатики» Данные методические указания «Мультимедиа технологии»к лабораторным работам могут быть полезны студентам и преподавателям смежных... |
Методические указания к лабораторным работам по курсу «Новые разделы информатики» Данные методические указания «Мультимедиа технологии»к лабораторным работам могут быть полезны студентам и преподавателям смежных... |
||
Методические указания к лабораторным работам по дисциплине «Физико-химические методы анализа» Методические указания составили: доценты: С. А. Соколова, О. В. Перегончая, Л. Ф. Науменко, А. К. Решетникова, О. В. Дьяконова,,... |
Вычислительная техника ” схемотехника методические указания к лабораторным работам самара 2000 Схемотехника: Метод указания к лабораторным работам / Самар гос техн ун-т; Сост. И. В. Воронцов, В. П. Золотов. Самара, 2000, 59... |
||
Методические указания по дисциплине пд. 02 Химия для выполнения лабораторных... Методические указания и задания к лабораторно-практическим занятиям для студентов специальности 35. 02. 05 Агрономия по дисциплине... |
Методические указания «Аналитические запросы» по дисциплине «Постреляционные базы данных» Учебно-методические материалы «Аналитические запросы» представляют собой методические указания к лабораторным работам по дисциплине... |
||
Методические указания к лабораторным работам по дисциплине «Технологии... Лабораторная работа 2 Составление календарного плана разработки портала вуза 16 |
Методические указания к практическим работам по учебной дисциплине Методические указания к практическим работам по учебной дисциплине История отечественного государства и права для студентов спо специальности... |
Поиск |