Файл: Учебнометодическое пособие Томск 2016 2 удк 004. 451(075. 8) Ббк 32. 973. 2018. 2я73 к 754 Рецензенты.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 343
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
41
В каталоге /bin находятся наиболее часто используемые утилиты UNIX.
Несмотря на то что утилиты не являются частью ОС и рассматриваются ею как обычные прикладные программы, их рассмотрение будет полезно нам по сле- дующим соображениям:
1) с точки зрения рядового пользователя (не программиста) утилиты яв- ляются неотъемлемой частью ВС;
2) рассмотрение утилит позволяет лучше выделить саму ОС;
3) практическое применение некоторых утилит позволяет выявить мно- гие свойства используемой ОС [3].
1 2 3 4 5 6 7 8 9 ... 23
2.3 Утилиты
Как отмечалось ранее, основной функцией утилиты является перенос ин- формации в пределах ВС. При рассмотрении каждой конкретной утилиты поль- зователя системы интересуют функции этой утилиты, а также ее имя, использу- емое для передачи в систему через пользовательский интерфейс в качестве команды для ОС. При работе с системой UNIX общий формат такой пользова- тельской команды выглядит так: имя [флаги] [файлы], где 1) квадратные скобки заключают необязательную часть команды;
2) имя – пользовательское имя исполняемого файла, содержащего загру- зочный модуль (машинный код) утилиты;
3) файлы – имена файлов, над которыми утилита выполняет свои дей- ствия. Различают входные файлы, информация из которых (или инфор- мация о которых) используется утилитой в качестве ее исходных дан- ных, а также выходные файлы, в которые утилита помещает результаты своей работы. По умолчанию большинство системных утилит исполь- зуют в качестве входного файла клавиатуру, а в качестве выходного файла – экран. Эти устройства (и соответствующие им файлы) часто называют соответственно стандартным вводом и стандартным выво-
дом;
4) флаги – двоичные параметры команды, уточняющие действие, кото- рое должна выполнить запускаемая утилита. Флаг задается своим име- нем из одной буквы, которой предшествует символ «–». Некоторые флаги уточняются своими параметрами, которые отделяются от имени флага пробелами.
42
Ниже приводится краткое описание утилит, используемых пользователя- ми операционной системы UNIX для работы с файлами. После имени каждой утилиты в скобках приводится название аналогичной или близкой команды в
MS-DOS. Рассматриваемые утилиты можно разбить на группы: 1) идентифика- ция и установка текущего каталога; 2) создание каталогов и анализ их содер- жимого; 3) копирование, переименование и перенос файлов; 4) уничтожение файлов и каталогов; 5) работа с текстовой информацией; 6) поиск информации;
7) выдача справочной информации; 8) упрощение пользовательского интерфей- са. Рассмотрение утилит, участвующих в обеспечении многопользовательской работы ВС, будет выполнено в других разделах.
1. Идентификация и установка текущего каталог:
а) вывод абсолютного имени текущего каталога (в MS-DOSотсутствует, так как это имя является частью приглашения к вводу команды):
pwd.
Это наиболее простая команда UNIX, которая не имеет ни одного пара- метра; б) смена текущего каталога (в MS-DOS – cd):
cd [каталог].
Если каталог опущен, то текущим каталогом станет корневой каталог поддерева каталогов данного пользователя (например, каталогvladна рисун- ке 2.7).
Имя каталога может быть как абсолютным, так и относительным. Задание абсолютного имени позволяет сделать текущим любой каталог, а задание отно- сительного имени – только каталог-потомок действующего текущего каталога.
Если в начале относительного имени каталога записать символы «/», то сме- щение нового текущего каталога вычисляется относительно корневого каталога данного пользователя. Если в качестве имени каталога задать символы «..», то новым текущим каталогом станет «родитель» действующего текущего катало- га.
Данная утилита не имеет флагов. К этому добавим, что cd, вообще гово- ря, не является утилитой в полном смысле этого слова, так как она существует не в виде отдельного исполняемого файла, а в виде подпрограммы ОС (точнее – ее интерпретатора команд). Подобное свойство обусловлено небольшими раз- мерами данной подпрограммы и для пользователя ВС не заметно.
43 2. Создание каталогов и анализ их содержимого:
а) создание нового каталога (каталогов) (в MS-DOS – mkdir):
mkdir каталоги.
Имена создаваемых каталогов могут быть заданы в любом виде: простые, относительные, абсолютные.
Единственный флаг данной утилиты:
-m – создать каталог с заданным режимом доступа. Режимы доступа бу- дут рассмотрены в п. 4.2; б) вывод содержимого каталога на экран (в MS-DOS – dir):
ls [каталог или файлы].
Если параметр опущен, то на экран выводится содержимое текущего ка- талога, иначе – содержимое заданного каталога. Если заданы имена файлов, то на экран выводятся сведения об этих файлах, если их имена присутствуют в те- кущем каталоге.
Данная утилита имеет 23 флага. Приведем только некоторые из них:
1) -R – рекурсивный вывод подкаталогов заданного каталога;
2) -F – пометить исполняемые файлы символом «*», каталоги – симво- лом «/», а символические связи – «@»;
3) -l – вывод наиболее подробной информации о файлах;
4) -a – вывод списка всех файлов и подкаталогов заданного каталога (по умолчанию имена, начинающиеся с символа «.» не выводятся).
3. Копирование, переименование и перенос файлов: а) копирование файла (в MS-DOS – copy):
cp исходный_файл (или каталог) конечный_файл
(или каталог).
Первый параметр команды задает источник копирования, а второй пара- метр – место размещения копии. При этом копирование может производиться из файла в файл, из файла в каталог, а также из каталога в каталог. В любом из этих случаев создается не новая жесткая связь (связи), а новый файл (фай- лы).
При копировании из файла в каталог в последнем создается новая запись, состоящая из простого имени исходного файла и из системного номера нового файла. При копировании из каталога в каталог копируются все файлы (в том числе и подкаталоги) из исходного каталога в конечный каталог. При этом для каждого копируемого файла создается новый файл с точно таким же содержи-
44 мым, после чего новый файл регистрируется в конечном каталоге. Для копиро- вания из каталога в каталог требуется, чтобы был записан флаг –r; б) переименование файлов и их перемещение (в MS-DOS – rename,
move):
mv исходный_файл (или каталог) конечный_файл
(или каталог).
Если исходный и конечный файлы находятся в одном и том же каталоге, то данная утилита заменяет имя исходного файла на имя конечного файла. Если же эти файлы находятся в разных каталогах, то производится «перемещение» файла по файловой структуре системы. При этом запись файла в исходном ка- талоге уничтожается, а точно такая же запись в конечном каталоге, наоборот, создается. Если в качестве первого операнда задан файл, а в качестве второго – каталог, то также производится перемещение файла в заданный каталог. Если в качестве обоих операндов заданы имена каталогов, то производится переиме- нование каталога, соответствующего первому операнду; в) создание жестких и символических связей (в MS-DOS – нет):
ln исходный_файл файл_ссылка (или каталог).
Эта команда создает новую связь с исходным файлом. При отсутствии флага -s создается жесткая связь с этим файлом. В этом случае файл-ссылка представляет собой новое имя уже существующего файла. Если в качестве вто- рого параметра команды задано не имя файла, а имя каталога, то в этом катало- ге исходный файл будет зарегистрирован под своим простым прежним именем.
При наличии флага -s создаваемый файл-ссылка представляет собой символи- ческую связь с исходным файлом.
4. Уничтожение файлов и каталогов:
а) удаление файлов и каталогов (в MS-DOS – del):
rm файлы (или каталог).
Эта утилита удаляет не сами файлы, а записи о них в родительских ката- логах. Само удаление файла происходит только в том случае, если число жест- ких связей для этого файла станет равным 0.
Если задать флаг -r, то данная команда выполнит удаление заданного ка- талога и всех содержащихся в нем файлов и подкаталогов. Другие флаги:
-f – удаление файлов без запроса подтверждения;
-i – обязательный запрос подтверждения при удалении каждого фай- ла;
45 б) удаление каталогов (в MS-DOS – rmdir):
rmdir каталоги.
Данная команда может уничтожить каталог только в том случае, если он не содержит файлов и подкаталогов.
5. Работа с текстовой информацией: а) создание новых текстовых файлов и корректировка существующих.
Данную функцию выполняют утилиты, называемые текстовыми ре-
дакторами. Примеры текстовых редакторов: ed, ее, sed, vi.
(Текстовый редактор в MS-DOS – edit.) В качестве примера приве- дем вызов редактораsed:
sed [файлы].
Данный редактор редактирует заданные в команде файлы построчно, от меньших номеров строк к большим, без возврата к ранее пройденным стро- кам. Редактирование строк производится согласно командам редактирования, заданным одним из двух способов:
1) в качестве параметров флага -e;
2) команды редактирования содержатся в файле, имя которого задано в качестве параметра флага -f.
Если ни одно имя файла в команде не задано, то по умолчанию входным файлом считается клавиатура. Набираемые на ней строки и будут подвергаться редактированию. В этом случае произойдет создание нового текстового файла, который с помощью интерпретатора команд ОС может быть записан на диск; б) вывод текстового файла на экран (в MS-DOS – type):
cat [файлы].
Данная утилита выводит на экран содержимое всех текстовых файлов, за- данных в качестве ее параметров. При этом содержимое выводимых файлов на экране никак не разделяется. Если ни один из файлов не задан, то на экран выводится последовательность символов, введенная с клавиатуры (напомним, что клавиатура тоже файл). Ввод с клавиатуры будет выполняться также в том случае, если вместо любого имени файла записан символ «». Для завершения ввода символов с клавиатуры следует одновременно нажать две клавиши:
<Ctrl>&<D> («конец файла»); в) сортировка и слияние файлов (в MS-DOS – sort):
sort файлы.
46
Если флагов нет, то данная команда выполняет слияние перечисленных файлов в единый файл. Причем строки этого файла сортируются в лексографи- ческом порядке. По умолчанию результат выводится на экран.
Два флага этой команды:
-u – при наличии нескольких одинаковых строк результат содержит только одну строку;
-o файл – вывод результата делается не на экран, а в заданный файл; г) вывод текста, вводимого с клавиатуры, на экран и одновременное ко- пирование этого текста в заданный файл (файлы):
tee файлы.
Один из флагов этой команды:
-a – запись текста не в начало файла (при этом файл создается зано- во), а его добавление в конец существующего файла (файлов); д) вывод строки символов на экран (в MS-DOS – echo):
echo строка.
Как и командаcd, данная команда выполняется не отдельной утилитой, а подпрограммой интерпретатора команд ОС.
6. Поиск информации:
а) поиск файлов (в MS-DOS – find):
find каталог [флаги].
Данная утилита осуществляет поиск файлов в поддереве файловой струк- туры, корнем которого является заданный каталог. Условия поиска задаются с помощью флагов. В отличие от ранее перечисленных утилит флаги задаются в конце команды. Из всех многочисленных флагов обратим внимание на два:
1) -type тип – поиск файлов указанного типа. Аргумент тип может принимать следующие значения: b (файл – блочное устройство), c (файл – сим- вольное устройство), d (файл – каталог), f(обычный файл), l(файл – символи- ческая связь), p (файл – именованный канал);
2)-name имя – поиск файлов с указанным именем.
В отличие от ранее рассмотренных команд утилита find имеет соб- ственные метасимволы. Метасимвол – символ, имеющий для рассматриваемой программы специальное значение. Метасимволы утилиты findпозволяют за- давать простые имена сразу нескольких искомых файлов в виде всего одного имени. Перечислим эти метасимволы: «*», «?», «[…]». Назначение каждого из
47 этих метасимволов аналогично назначению одноименного метасимвола shell и будет рассмотрено нами позднее.
В одной команде find можно задать несколько условий поиска, соеди- нив их при помощи следующих логических операторов:
-a – логическое И;
-o – логическое ИЛИ;
\! – логическое НЕ; б) поиск строк в текстовых файлах (в MS-DOS отсутствует):
fgrep подстрока [файлы].
Данная утилита осуществляет поиск в перечисленных файлах строк, имеющих в своем составе шаблон заданную подстроку. Найденные строки выводятся на экран. Если имена файлов опущены, то поиск осуществляется в тексте, вводимом с клавиатуры. При вводе с клавиатуры каждая строка, со- держащая требуемую подстроку, повторяется дважды: первый раз она содер- жит «эхо» вводимых с клавиатуры символов, а второй раз выводится командой fgrep.
Некоторые флаги этой команды:
-x – выводятся только строки, полностью совпадающие с шаблоном;
-c – выводится только количество строк, содержащих шаблон;
-i – при поиске не различаются строчные и прописные буквы;
-l – выводятся только имена файлов, содержащих требуемые под- строки;
-n – перед каждой выводимой строкой записывается ее относитель- ный номер в файле.
Если задан поиск в нескольких файлах, то перед выводом каждой строки выводится имя соответствующего файла [2].
7. Выдача справочной информации:
а) выдача статистики о текстовых файлах (в MS-DOS отсутствует):
wc [файлы].
Данная утилита выдает статистику о своих входных файлах. Если эти файлы не заданы, выдается статистика о тексте, введенном с клавиатуры.
Флаги этой команды:
-l – вывод числа строк;
-w – вывод числа слов;
-с – вывод числа символов.
48
По умолчанию все три флага установлены (-lwc). Поэтому флаги запи- сываются в этой команде только тогда, когда требуется ограничить выходную статистику; б) вывод и установка даты и времени (в MS-DOS – date,time):
date[mmddhhnn[yy]].
Если параметр команды не задан, то на экран выводятся текущие дата и время. Это: день недели, месяц, число, время (час, минуты, секунды), год.
Если параметр команды задан, то она выполняет установку текущей даты и времени. При этом параметр команды date включает:
mm – номер месяца;
dd – число;
hh– час (в 24-часовой системе);
nn – минута;
yy – последние две цифры года (необязательная часть параметра ко- манды).
Следует отметить, что выполнять установку даты может только супер- пользователь (администратор); в) следующая утилита выводит краткую информацию о системе (в MS-
DOS – ver):
uname флаги.
Значения флагов:
-a – вывод всей доступной информации (объединение всех остальных флагов);
-m – вывод информации об аппаратуре ВС;
-n – вывод имени узла сети;
-p– вывод типа процессора;
-r – вывод главного номера версии ОС;
-s – вывод названия ОС;
-v – вывод дополнительного номера версии ОС; г) выдача справочной информации о пользовательском и программном интерфейсах:
man имя, где имя – имя одной из системных программ или подпрограмм, используемое в пользовательских и программных интерфейсах. Сюда относятся имена си-
49 стемных обрабатывающих программ (утилит и лингвистических процессоров), имена системных программных вызовов, а также имена библиотечных функ- ций. Задав имя интересующей вас системной программы, вы можете получить подробные сведения об ее использовании (правда, на английском языке).
Например, можно спросить утилиту man о ней самой [1].
8. Упрощение пользовательского интерфейса.
Эту функцию выполняют достаточно сложные утилиты, в названии кото- рых часто присутствует слово commander. Примером такой утилиты для MS-
DOS является Norton Commander. Аналогичная утилита для UNIX называ- ется Midnight Commander. (Для того чтобы запустить Midnight
Commander
, достаточно набрать команду UNIX – mс.)
Любая подобная программа предназначена для того, чтобы предоставить пользователю ВСудобный интерфейс для общения с этой системой. Это обес- печивается, во-первых, наглядным выводом на экран информации о файловой структуре системы. Для этого по запросу пользователя утилита переносит с диска на экран информацию, содержащуюся в любом каталоге файловой структуры системы. Во-вторых, любой commander существенно упрощает для пользователя ввод команд ОС за счет того, что он переносит имя исполняемого файла программы из позиции экрана, отмеченной пользователем с помощью псевдокурсора (псевдокурсор – светящийся прямоугольник, получаемый в от- личие от обычного курсора не аппаратно, а программно), в то место памяти, от- куда это имя может взять интерпретатор команд ОС.
В отличие от лингвистических процессоров утилиты используются не только программистами, но и пользователями-непрограммистами.
Эта наиболее многочисленная категория пользователей ВС работает на вирту- альных машинах, предоставляемых готовыми прикладными программами, а также утилитами. Что касается программистов, то они просто вынуждены ис- пользовать наряду с утилитами еще и лингвистические процессоры. Вспомним, что целью применения любой ВС является выполнение прикладных машинных программ. В следующем разделе рассмотрим применение лингвистических процессоров для получения таких программ.
2.4 Трансляторы
Программисты – не самая многочисленная, но очень важная часть поль- зователей ВС. Конечной задачей любого программирования является получе-
50 ние реальной программы, записанной на машинном языке. Только такая про- грамма может быть понята и выполнена центральным процессором.
К сожалению, трудоемкость программирования на машинном языке очень ве- лика и не позволяет записывать на нем сколько-нибудь сложные (по решаемым задачам) программы. Решением данной проблемы является предоставление программисту возможности разрабатывать не реальную, а виртуальную при- кладную программу.
Виртуальная прикладная программа записывается на языке программи- рования, отличном от языка машинных команд. Преобразование этой програм- мы в реальную программу выполняет системная обрабатывающая программа, называемая лингвистическим процессором. Эта программа (не путать с аппа- ратным процессором) выполняет перевод описания алгоритма с одного языка на другой. Сущность алгоритма при этом сохраняется, но форма его представ- ления, ориентированная на программиста, преобразуется в форму, ориентиро- ванную на ЦП. Лингвистические процессоры делятся на трансляторы и интер- претаторы. В результате работы транслятора алгоритм, записанный на языке программирования (исходная виртуальная программа), преобразуется в алго- ритм, записанный на машинном языке. (На самом деле, как будет показано позже, машинная программа является результатом совместной работы несколь- ких лингвистических процессоров.)
Интерпретаторв отличие от транслятора не выдаёт машинную про- грамму целиком. Выполнив перевод очередного оператора исходной програм- мы в соответствующую совокупность машинных команд, интерпретатор обес- печивает их выполнение. Затем преобразуется тот исходный оператор, который должен выполняться следующим по логике алгоритма, и т. д. Интерпретаторы будут рассматриваться нами в следующем параграфе, а сейчас обратимся к трансляторам.
В качестве примера рассмотрим преобразование виртуальной программы на языке Си в исполняемый файл для UNIX-системы. Общая схема такого пре- образования приведена на рисунке 2.8. На этой схеме указанное преобразова- ние выполняет цепочка из пяти трансляторов: препроцессор, компилятор, оп- тимизатор, ассемблер и редактор связей. Цепочка из этих последовательно выполняемых трансляторов также является транслятором, выполняющим пре- образование совокупности исходных модулей программы в соответствующий загрузочный модуль.
51
Рис. 2.8 Преобразование исходной программы в загрузочный модуль
Исходный модуль программы – текстовый файл, содержащий всю вирту- альную программу или ее часть. Если речь идет о программе на Си, то данный файл имеет имя с суффиксом.c. Любой исходный модуль состоит из операто- ров двух типов – псевдооператоров и исполнительных операторов. Исполни-
тельный оператор – оператор исходной программы, преобразуемый в резуль-
52 тате трансляции в машинные команды. При этом исполнительный оператор языка высокого уровня, например языка Си, преобразуется в несколько машин- ных команд. Псевдооператор – оператор исходной программы, представляю- щий собой указание транслятору. В машинные команды этот оператор не транслируется.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1 2 3 4 5 6 7 8 9 ... 23
42
Ниже приводится краткое описание утилит, используемых пользователя- ми операционной системы UNIX для работы с файлами. После имени каждой утилиты в скобках приводится название аналогичной или близкой команды в
MS-DOS. Рассматриваемые утилиты можно разбить на группы: 1) идентифика- ция и установка текущего каталога; 2) создание каталогов и анализ их содер- жимого; 3) копирование, переименование и перенос файлов; 4) уничтожение файлов и каталогов; 5) работа с текстовой информацией; 6) поиск информации;
7) выдача справочной информации; 8) упрощение пользовательского интерфей- са. Рассмотрение утилит, участвующих в обеспечении многопользовательской работы ВС, будет выполнено в других разделах.
1. Идентификация и установка текущего каталог:
а) вывод абсолютного имени текущего каталога (в MS-DOSотсутствует, так как это имя является частью приглашения к вводу команды):
pwd.
Это наиболее простая команда UNIX, которая не имеет ни одного пара- метра; б) смена текущего каталога (в MS-DOS – cd):
cd [каталог].
Если каталог опущен, то текущим каталогом станет корневой каталог поддерева каталогов данного пользователя (например, каталогvladна рисун- ке 2.7).
Имя каталога может быть как абсолютным, так и относительным. Задание абсолютного имени позволяет сделать текущим любой каталог, а задание отно- сительного имени – только каталог-потомок действующего текущего каталога.
Если в начале относительного имени каталога записать символы «/», то сме- щение нового текущего каталога вычисляется относительно корневого каталога данного пользователя. Если в качестве имени каталога задать символы «..», то новым текущим каталогом станет «родитель» действующего текущего катало- га.
Данная утилита не имеет флагов. К этому добавим, что cd, вообще гово- ря, не является утилитой в полном смысле этого слова, так как она существует не в виде отдельного исполняемого файла, а в виде подпрограммы ОС (точнее – ее интерпретатора команд). Подобное свойство обусловлено небольшими раз- мерами данной подпрограммы и для пользователя ВС не заметно.
43 2. Создание каталогов и анализ их содержимого:
а) создание нового каталога (каталогов) (в MS-DOS – mkdir):
mkdir каталоги.
Имена создаваемых каталогов могут быть заданы в любом виде: простые, относительные, абсолютные.
Единственный флаг данной утилиты:
-m – создать каталог с заданным режимом доступа. Режимы доступа бу- дут рассмотрены в п. 4.2; б) вывод содержимого каталога на экран (в MS-DOS – dir):
ls [каталог или файлы].
Если параметр опущен, то на экран выводится содержимое текущего ка- талога, иначе – содержимое заданного каталога. Если заданы имена файлов, то на экран выводятся сведения об этих файлах, если их имена присутствуют в те- кущем каталоге.
Данная утилита имеет 23 флага. Приведем только некоторые из них:
1) -R – рекурсивный вывод подкаталогов заданного каталога;
2) -F – пометить исполняемые файлы символом «*», каталоги – симво- лом «/», а символические связи – «@»;
3) -l – вывод наиболее подробной информации о файлах;
4) -a – вывод списка всех файлов и подкаталогов заданного каталога (по умолчанию имена, начинающиеся с символа «.» не выводятся).
3. Копирование, переименование и перенос файлов: а) копирование файла (в MS-DOS – copy):
cp исходный_файл (или каталог) конечный_файл
(или каталог).
Первый параметр команды задает источник копирования, а второй пара- метр – место размещения копии. При этом копирование может производиться из файла в файл, из файла в каталог, а также из каталога в каталог. В любом из этих случаев создается не новая жесткая связь (связи), а новый файл (фай- лы).
При копировании из файла в каталог в последнем создается новая запись, состоящая из простого имени исходного файла и из системного номера нового файла. При копировании из каталога в каталог копируются все файлы (в том числе и подкаталоги) из исходного каталога в конечный каталог. При этом для каждого копируемого файла создается новый файл с точно таким же содержи-
44 мым, после чего новый файл регистрируется в конечном каталоге. Для копиро- вания из каталога в каталог требуется, чтобы был записан флаг –r; б) переименование файлов и их перемещение (в MS-DOS – rename,
move):
mv исходный_файл (или каталог) конечный_файл
(или каталог).
Если исходный и конечный файлы находятся в одном и том же каталоге, то данная утилита заменяет имя исходного файла на имя конечного файла. Если же эти файлы находятся в разных каталогах, то производится «перемещение» файла по файловой структуре системы. При этом запись файла в исходном ка- талоге уничтожается, а точно такая же запись в конечном каталоге, наоборот, создается. Если в качестве первого операнда задан файл, а в качестве второго – каталог, то также производится перемещение файла в заданный каталог. Если в качестве обоих операндов заданы имена каталогов, то производится переиме- нование каталога, соответствующего первому операнду; в) создание жестких и символических связей (в MS-DOS – нет):
ln исходный_файл файл_ссылка (или каталог).
Эта команда создает новую связь с исходным файлом. При отсутствии флага -s создается жесткая связь с этим файлом. В этом случае файл-ссылка представляет собой новое имя уже существующего файла. Если в качестве вто- рого параметра команды задано не имя файла, а имя каталога, то в этом катало- ге исходный файл будет зарегистрирован под своим простым прежним именем.
При наличии флага -s создаваемый файл-ссылка представляет собой символи- ческую связь с исходным файлом.
4. Уничтожение файлов и каталогов:
а) удаление файлов и каталогов (в MS-DOS – del):
rm файлы (или каталог).
Эта утилита удаляет не сами файлы, а записи о них в родительских ката- логах. Само удаление файла происходит только в том случае, если число жест- ких связей для этого файла станет равным 0.
Если задать флаг -r, то данная команда выполнит удаление заданного ка- талога и всех содержащихся в нем файлов и подкаталогов. Другие флаги:
-f – удаление файлов без запроса подтверждения;
-i – обязательный запрос подтверждения при удалении каждого фай- ла;
45 б) удаление каталогов (в MS-DOS – rmdir):
rmdir каталоги.
Данная команда может уничтожить каталог только в том случае, если он не содержит файлов и подкаталогов.
5. Работа с текстовой информацией: а) создание новых текстовых файлов и корректировка существующих.
Данную функцию выполняют утилиты, называемые текстовыми ре-
дакторами. Примеры текстовых редакторов: ed, ее, sed, vi.
(Текстовый редактор в MS-DOS – edit.) В качестве примера приве- дем вызов редактораsed:
sed [файлы].
Данный редактор редактирует заданные в команде файлы построчно, от меньших номеров строк к большим, без возврата к ранее пройденным стро- кам. Редактирование строк производится согласно командам редактирования, заданным одним из двух способов:
1) в качестве параметров флага -e;
2) команды редактирования содержатся в файле, имя которого задано в качестве параметра флага -f.
Если ни одно имя файла в команде не задано, то по умолчанию входным файлом считается клавиатура. Набираемые на ней строки и будут подвергаться редактированию. В этом случае произойдет создание нового текстового файла, который с помощью интерпретатора команд ОС может быть записан на диск; б) вывод текстового файла на экран (в MS-DOS – type):
cat [файлы].
Данная утилита выводит на экран содержимое всех текстовых файлов, за- данных в качестве ее параметров. При этом содержимое выводимых файлов на экране никак не разделяется. Если ни один из файлов не задан, то на экран выводится последовательность символов, введенная с клавиатуры (напомним, что клавиатура тоже файл). Ввод с клавиатуры будет выполняться также в том случае, если вместо любого имени файла записан символ «». Для завершения ввода символов с клавиатуры следует одновременно нажать две клавиши:
<Ctrl>&<D> («конец файла»); в) сортировка и слияние файлов (в MS-DOS – sort):
sort файлы.
46
Если флагов нет, то данная команда выполняет слияние перечисленных файлов в единый файл. Причем строки этого файла сортируются в лексографи- ческом порядке. По умолчанию результат выводится на экран.
Два флага этой команды:
-u – при наличии нескольких одинаковых строк результат содержит только одну строку;
-o файл – вывод результата делается не на экран, а в заданный файл; г) вывод текста, вводимого с клавиатуры, на экран и одновременное ко- пирование этого текста в заданный файл (файлы):
tee файлы.
Один из флагов этой команды:
-a – запись текста не в начало файла (при этом файл создается зано- во), а его добавление в конец существующего файла (файлов); д) вывод строки символов на экран (в MS-DOS – echo):
echo строка.
Как и командаcd, данная команда выполняется не отдельной утилитой, а подпрограммой интерпретатора команд ОС.
6. Поиск информации:
а) поиск файлов (в MS-DOS – find):
find каталог [флаги].
Данная утилита осуществляет поиск файлов в поддереве файловой струк- туры, корнем которого является заданный каталог. Условия поиска задаются с помощью флагов. В отличие от ранее перечисленных утилит флаги задаются в конце команды. Из всех многочисленных флагов обратим внимание на два:
1) -type тип – поиск файлов указанного типа. Аргумент тип может принимать следующие значения: b (файл – блочное устройство), c (файл – сим- вольное устройство), d (файл – каталог), f(обычный файл), l(файл – символи- ческая связь), p (файл – именованный канал);
2)-name имя – поиск файлов с указанным именем.
В отличие от ранее рассмотренных команд утилита find имеет соб- ственные метасимволы. Метасимвол – символ, имеющий для рассматриваемой программы специальное значение. Метасимволы утилиты findпозволяют за- давать простые имена сразу нескольких искомых файлов в виде всего одного имени. Перечислим эти метасимволы: «*», «?», «[…]». Назначение каждого из
47 этих метасимволов аналогично назначению одноименного метасимвола shell и будет рассмотрено нами позднее.
В одной команде find можно задать несколько условий поиска, соеди- нив их при помощи следующих логических операторов:
-a – логическое И;
-o – логическое ИЛИ;
\! – логическое НЕ; б) поиск строк в текстовых файлах (в MS-DOS отсутствует):
fgrep подстрока [файлы].
Данная утилита осуществляет поиск в перечисленных файлах строк, имеющих в своем составе шаблон заданную подстроку. Найденные строки выводятся на экран. Если имена файлов опущены, то поиск осуществляется в тексте, вводимом с клавиатуры. При вводе с клавиатуры каждая строка, со- держащая требуемую подстроку, повторяется дважды: первый раз она содер- жит «эхо» вводимых с клавиатуры символов, а второй раз выводится командой fgrep.
Некоторые флаги этой команды:
-x – выводятся только строки, полностью совпадающие с шаблоном;
-c – выводится только количество строк, содержащих шаблон;
-i – при поиске не различаются строчные и прописные буквы;
-l – выводятся только имена файлов, содержащих требуемые под- строки;
-n – перед каждой выводимой строкой записывается ее относитель- ный номер в файле.
Если задан поиск в нескольких файлах, то перед выводом каждой строки выводится имя соответствующего файла [2].
7. Выдача справочной информации:
а) выдача статистики о текстовых файлах (в MS-DOS отсутствует):
wc [файлы].
Данная утилита выдает статистику о своих входных файлах. Если эти файлы не заданы, выдается статистика о тексте, введенном с клавиатуры.
Флаги этой команды:
-l – вывод числа строк;
-w – вывод числа слов;
-с – вывод числа символов.
48
По умолчанию все три флага установлены (-lwc). Поэтому флаги запи- сываются в этой команде только тогда, когда требуется ограничить выходную статистику; б) вывод и установка даты и времени (в MS-DOS – date,time):
date[mmddhhnn[yy]].
Если параметр команды не задан, то на экран выводятся текущие дата и время. Это: день недели, месяц, число, время (час, минуты, секунды), год.
Если параметр команды задан, то она выполняет установку текущей даты и времени. При этом параметр команды date включает:
mm – номер месяца;
dd – число;
hh– час (в 24-часовой системе);
nn – минута;
yy – последние две цифры года (необязательная часть параметра ко- манды).
Следует отметить, что выполнять установку даты может только супер- пользователь (администратор); в) следующая утилита выводит краткую информацию о системе (в MS-
DOS – ver):
uname флаги.
Значения флагов:
-a – вывод всей доступной информации (объединение всех остальных флагов);
-m – вывод информации об аппаратуре ВС;
-n – вывод имени узла сети;
-p– вывод типа процессора;
-r – вывод главного номера версии ОС;
-s – вывод названия ОС;
-v – вывод дополнительного номера версии ОС; г) выдача справочной информации о пользовательском и программном интерфейсах:
man имя, где имя – имя одной из системных программ или подпрограмм, используемое в пользовательских и программных интерфейсах. Сюда относятся имена си-
49 стемных обрабатывающих программ (утилит и лингвистических процессоров), имена системных программных вызовов, а также имена библиотечных функ- ций. Задав имя интересующей вас системной программы, вы можете получить подробные сведения об ее использовании (правда, на английском языке).
Например, можно спросить утилиту man о ней самой [1].
8. Упрощение пользовательского интерфейса.
Эту функцию выполняют достаточно сложные утилиты, в названии кото- рых часто присутствует слово commander. Примером такой утилиты для MS-
DOS является Norton Commander. Аналогичная утилита для UNIX называ- ется Midnight Commander. (Для того чтобы запустить Midnight
Commander
, достаточно набрать команду UNIX – mс.)
Любая подобная программа предназначена для того, чтобы предоставить пользователю ВСудобный интерфейс для общения с этой системой. Это обес- печивается, во-первых, наглядным выводом на экран информации о файловой структуре системы. Для этого по запросу пользователя утилита переносит с диска на экран информацию, содержащуюся в любом каталоге файловой структуры системы. Во-вторых, любой commander существенно упрощает для пользователя ввод команд ОС за счет того, что он переносит имя исполняемого файла программы из позиции экрана, отмеченной пользователем с помощью псевдокурсора (псевдокурсор – светящийся прямоугольник, получаемый в от- личие от обычного курсора не аппаратно, а программно), в то место памяти, от- куда это имя может взять интерпретатор команд ОС.
В отличие от лингвистических процессоров утилиты используются не только программистами, но и пользователями-непрограммистами.
Эта наиболее многочисленная категория пользователей ВС работает на вирту- альных машинах, предоставляемых готовыми прикладными программами, а также утилитами. Что касается программистов, то они просто вынуждены ис- пользовать наряду с утилитами еще и лингвистические процессоры. Вспомним, что целью применения любой ВС является выполнение прикладных машинных программ. В следующем разделе рассмотрим применение лингвистических процессоров для получения таких программ.
2.4 Трансляторы
Программисты – не самая многочисленная, но очень важная часть поль- зователей ВС. Конечной задачей любого программирования является получе-
50 ние реальной программы, записанной на машинном языке. Только такая про- грамма может быть понята и выполнена центральным процессором.
К сожалению, трудоемкость программирования на машинном языке очень ве- лика и не позволяет записывать на нем сколько-нибудь сложные (по решаемым задачам) программы. Решением данной проблемы является предоставление программисту возможности разрабатывать не реальную, а виртуальную при- кладную программу.
Виртуальная прикладная программа записывается на языке программи- рования, отличном от языка машинных команд. Преобразование этой програм- мы в реальную программу выполняет системная обрабатывающая программа, называемая лингвистическим процессором. Эта программа (не путать с аппа- ратным процессором) выполняет перевод описания алгоритма с одного языка на другой. Сущность алгоритма при этом сохраняется, но форма его представ- ления, ориентированная на программиста, преобразуется в форму, ориентиро- ванную на ЦП. Лингвистические процессоры делятся на трансляторы и интер- претаторы. В результате работы транслятора алгоритм, записанный на языке программирования (исходная виртуальная программа), преобразуется в алго- ритм, записанный на машинном языке. (На самом деле, как будет показано позже, машинная программа является результатом совместной работы несколь- ких лингвистических процессоров.)
Интерпретаторв отличие от транслятора не выдаёт машинную про- грамму целиком. Выполнив перевод очередного оператора исходной програм- мы в соответствующую совокупность машинных команд, интерпретатор обес- печивает их выполнение. Затем преобразуется тот исходный оператор, который должен выполняться следующим по логике алгоритма, и т. д. Интерпретаторы будут рассматриваться нами в следующем параграфе, а сейчас обратимся к трансляторам.
В качестве примера рассмотрим преобразование виртуальной программы на языке Си в исполняемый файл для UNIX-системы. Общая схема такого пре- образования приведена на рисунке 2.8. На этой схеме указанное преобразова- ние выполняет цепочка из пяти трансляторов: препроцессор, компилятор, оп- тимизатор, ассемблер и редактор связей. Цепочка из этих последовательно выполняемых трансляторов также является транслятором, выполняющим пре- образование совокупности исходных модулей программы в соответствующий загрузочный модуль.
51
Рис. 2.8 Преобразование исходной программы в загрузочный модуль
Исходный модуль программы – текстовый файл, содержащий всю вирту- альную программу или ее часть. Если речь идет о программе на Си, то данный файл имеет имя с суффиксом.c. Любой исходный модуль состоит из операто- ров двух типов – псевдооператоров и исполнительных операторов. Исполни-
тельный оператор – оператор исходной программы, преобразуемый в резуль-
52 тате трансляции в машинные команды. При этом исполнительный оператор языка высокого уровня, например языка Си, преобразуется в несколько машин- ных команд. Псевдооператор – оператор исходной программы, представляю- щий собой указание транслятору. В машинные команды этот оператор не транслируется.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1 2 3 4 5 6 7 8 9 ... 23
Препроцессор – транслятор, выполняющий обработку ис-
ходных модулей программы, подсоединяя к ним содержимое файлов
заголовков и выполняя подстановки, заданные в этих файлах.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Файл заголовков – текстовый файл с суффиксом .h, заданный в исходном модуле программы в качестве параметра псевдооператора #include. Если этот файл находится в одном из специально предназначенных для этого катало- гов /usr/include или /usr/include/sys, то имя файла заключается в угловые скобки. Иначе – абсолютное или относительное имя файла помещается в кавычки. Каждая строка файла заголовков содержит или прототип системной функции, или определение константы, или определение структуры данных.
В то время как определения констант и структур данных используются препро- цессором для замены символьных имен констант и структур данных их значе- ниями, прототипы системных функций используются для проверки правильно- сти вызова этих функций в программе.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Функцией при программировании на Си называется любая
подпрограмма, в том числе и системная.
Системная функция – подпрограмма, объектный модуль
которой находится в одной из системных библиотек.
Прототип функции – правильно записанный ее виртуальный
интерфейс, с указанием типов всех ее параметров, включая значе-
ние, возвращаемое функцией.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Выполняя сравнение прототипов системных функций с их фактическими вызовами в исходных модулях программы, транслятор может оказать помощь программисту в обнаружении некоторых типов ошибок: неправильно заданное число параметров или неправильно определенные их типы.
53
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Компилятор – транслятор, выполняющий преобразование
текста программы на языке высокого уровня в программу на языке
низкого уровня.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Один оператор языка низкого уровня соответствует одной машинной ко- манде. На рассматриваемой схеме (см. рис. 2.8) языком низкого уровня являет- ся ассемблер.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Ассемблер – язык низкого уровня, пригодный для написания
виртуальных программ.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Трудоемкость разработки таких программ весьма велика. Поэтому на ас- семблере пишутся исходные тексты программ только в двух случаях: 1) про- грамма выполняет непосредственное управление аппаратурой ВС; 2) если предъявляются повышенные требования к эффективности программы. Поэтому программированием на ассемблере для мультипрограммных систем, например для Windows или UNIX, занимается лишь небольшая часть системных про- граммистов. Это не умаляет роль ассемблера для программирования в однопро- граммных системах, а также в качестве учебного языка.
На рисунке 2.8 ассемблер используется не в качестве языка программиро- вания, а в качестве промежуточного языка. Получая программу на ассемблере, компилятор заменяет псевдооператоры и исполнительные операторы Си соот- ветственно на псевдооператоры и исполнительные операторы ассемблера.
При этом многократно сокращается число типов данных и широко использует- ся внутрипроцессорная память – регистры.
В отличие от программиста компилятор «программирует» на ассемблере не очень эффективно. При этом под эффективностью программы понимаются два критерия: затраты времени ЦП на выполнение программы и затраты ОП для ее размещения. Для улучшения оценок программы по этим двум критериям ее ассемблерные модули, выданные компилятором, подаются на вход следую- щего транслятора – оптимизатор.
Оптимизированные ассемблерные модули являются входными данными для транслятора-ассемблера. В результате одного выполнения этого трансля- тора ассемблерный модуль преобразуется в объектный программный модуль, записываемый в файл с суффиксом .o. При этом частично решается задача по-
54 лучения последовательности машинных команд, отображающих алгоритм мо- дуля. Транслятор окончательно записывает коды операций машинных команд, а также проставляет в эти команды номера используемых регистров.
Что касается символьных имен, то они обрабатываются транслятором- ассемблером по-разному.
Рассмотрим преобразование адресов транслятором.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Адрес – место в ОП, которое займет соответствующий
программный объект – команда или данное.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Любой язык программирования (включая Си и ассемблер) позволяет про- граммисту использовать в программе не адреса, а их заменители – символьные
имена (метки). Основные типы меток: 1) метки операторов; 2) имена перемен- ных; 3) имена подпрограмм (имя подпрограммы заменяет для программиста ад- рес, по которому первая команда подпрограммы находится в ОП).
Все символьные имена в исходном (в том числе, ассемблерном) модуле делятся на внешние и внутренние. Символьное имя называется внутренним, ес- ли выполняются два условия: 1) соответствующий программный объект (опера- тор, данное или процедура) находится в этом же модуле; 2) данный программ- ный объект используется (вызывается) только внутри данного исходного модуля.
Все внешние метки делятся на входные и выходные. Внешние выходные
меткиопределены внутри данного исходного модуля, а используются вне него.
Это: 1) имена процедур, входящих в состав данного исходного модуля, но ко- торые могут вызываться в других исходных модулях; 2) имена переменных, ко- торые определены в данном исходном модуле, а используются вне его. Внеш-
ние входные метки определены вне данного исходного модуля, а используются в нем. Это: 1) имена процедур, не входящих в данный исходный модуль, но ис- пользуемых в нем; 2) имена переменных, которые используются в исходном модуле, но определены вне его.
При получении объектного модуля транслятор-ассемблер проставляет в машинные команды вместо внутренних меток и внешних выходных меток или смещение относительно текущего содержимого указателя команд (это спе- циальный регистр ЦП), или смещение относительно начала сегмента ОП, в ко- тором находится соответствующий программный объект. Что касается внешних входных меток, то обработать их транслятор-ассемблер не может. Он ничего
55 не знает о размещении соответствующих программных объектов в памяти, так как имеет в своем распоряжении единственный ассемблерный модуль, в кото- ром этих объектов нет. Дальнейшее преобразование программы выполняет си- стемная программа, называемая редактором связей.
Редактор связей (компоновщик) связывает («сшивает») все объектные модули программы в единый загрузочный модуль. Кроме того, редактор связей объединяет с программой системные объектные модули, находящиеся в биб- лиотечных файлах с суффиксом .a.
При получении загрузочного модуля редактор связей записывает в ОП один за другим объектные модули. Поэтому он «знает», где расположен в памя- ти каждый программный объект. Следовательно, он может заменить все остав- ленные транслятором-ассемблером внешние метки на соответствующие чис- ленные адреса. В конце своей работы редактор связей записывает загрузочный модуль в файл, называемый исполняемым файлом. По умолчанию этот файл помещается в текущий каталог и имеет простое имя a.out.
Рассмотренные выше трансляторы обычно реализуются в качестве под- программ более крупной программы, называемой системой программирования.
Кроме них в систему программирования входит также подпрограмма-оболочка, выполняющая диалог с пользователем-программистом, а также утилиты:
1) текстовый редактор, предназначенный для набора текстов исходных моду- лей; 2) отладчик, позволяющий выполнять пошаговое выполнение программы с целью обнаружения в ней ошибок.
Например, существует большое количество систем программирования, предназначенных для поддержки программирования на языках Си и Си++ в UNIX-системах. Некоторые из них: cc,cpp,gcc,c++,g++. Команды для за- пуска этих систем программирования похожи на команды для запуска утилит
(см. п. 2.3). Точно так же в качестве параметров команды задаются обрабатыва- емые файлы, а ее функции уточняются с помощью флагов. Вот некоторые фла- ги для программы cc:
1) -o – требуется дать исполняемому файлу программы имя, отличное от a.out;
2) -c – требуется получить не загрузочный, а объектный модуль;
3) -lимя – при получении загрузочного модуля использовать требуе- мую библиотеку объектных модулей.
56
Благодаря наличию системы программирования программист работает на виртуальной машине пользователя системы программирования (рис. 2.9).
Эта ВМ «понимает» операторы используемого языка программирования, а так- же команды управления работой системы программирования. Предоставляя программисту возможность работать с виртуальной машиной, сама система программирования «выполняется» на ВМ, аналогичной той, на которой выпол- няется прикладная программа (ВМ_ПП). Это обусловлено тем, что и приклад- ная программа, и система программирования являются машинными програм- мами. Более того, с точки зрения самой ВС между ними нет принципиальной разницы, так как и та, и другая программа относятся к классу обрабатывающих программ.
Рис. 2.9 Виртуальная машина пользователя системы программирования:
ВМ_П_СП – виртуальная машина пользователя системы программирования;
ВМ_ПП – виртуальная машина прикладной программы
Строго говоря, исполняемый файл (загрузочный модуль) и машинная программа – не одно и то же. Для того чтобы загрузочный модуль стал машин- ной программой, необходимо выполнить операции загрузки и динамического связывания. Так как эти операции обычно скрыты от пользователя, то мы их рассмотрим позже. А сейчас перейдем к рассмотрению программы, позволяю- щей пользователю ВС запускать на выполнение прикладные и системные обра-