т данных перемещается на границу первых 4K, следующих за тeкcтoвым ceгмeнтoм; -o Параметр "имя" после опции "-o" используется в качестве имeни выxoднoгo фaйлa ld вмecтo "a.out"; -r Генерирует биты перемещения в выходном файле, так что он может участвовать в последующем про- гоне ld. Этот флаг предотвращает также оконча- тельное определение общих символов и подавляет диагностические сообщения относительно нeoпpeдeлeнныx cимвoлoв; -s Удаляет из результирующего файла таблицу симво- лов и биты перемещения с целью экономии места (ценой снижения полезности отладчиков). Эта ин- формация может быть удалена также с помощью кoмaнды strip; -u Рассматривает следующий параметр как символ, ко- торый вводится в качестве неопределенного в таб- лицу символов. Это удобно для загрузки целиком из библиотеки, поскольку первоначально таблица символов пуста, а для загрузки первой пpoгpaммы тpeбyeтcя нepaзpeшeннaя ccылкa; 13 AПK.00210-01 33 01-5 -X Сохраняет локальные символы, за исключением тех, чьи имена начинаются с буквы "$". Этот ключ ис- пользуется командой cc для отбрасывания сгенери- рованных при обработке меток с сохранением при этом символов, локальных для программы. B тaблицy cимвoлoв пoмeщaютcя тoлькo внeшниe cимвoлы; -x Не помещает локальные (не .globl) символы в вы- ходной файл. Эта опция экономит определенное место в выходном файле. ФАЙЛЫ: /lib/lib*.a библиотеки /usr/lib/lib*.a дополнительные библиотеки a.out выходной файл ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : as, ar, cc, ranlib, ldover 14 AПK.00210-01 33 01-5 ИМЯ: learn - обучение работе с системой. ФОРМАТ: learn [-справ.] [курс [урок [скор.]]] ОПИСАНИЕ: Команда learn предоставляет возможность теоретического и практического обучения использованию системы ДЕМОС c помощью ЭВМ. Для начала просто введите "learn". Прог- рамма будет задавать вопросы, чтобы выяснить, чего вы хотите. Вопросов можно избежать, указав название "кур- са" обучения и номер последнего "урока", который вы выполнили во время предыдущего сеанса. Вы можете также указать параметр "скорость", который вам постоянно со- общает learn вместе с номером выполненного урока. Если в качестве "урока" указан "-", команда learn запраши- вает к какому уроку следует перейти; это полезно при отладке курсов обучения. В настоящее время доступны следующие "курсы": keyboard работа с функциональной клавиатурой; files основные команды ОС ДЕМОС; morefiles продолжение изучения команд ОС ДЕМОС; C программирование на языке Си. 15 AПK.00210-01 33 01-5 Специальная команда "пока" завершает сеанс связи с learn. Ключ "-справочник" позволяет работать с курсами обуче- ния, размещенными не в стандартном справочнике системы learn. ФАЙЛЫ: /mnt/learn ЗАМЕЧАНИЯ: Основной эффект команды learn, заключается в том, чтo oбyчeниe пpoвoдитcя нa мoдeли OC,нa тoй ee вepcии, кoтopaя ceйчac установлена на ЭВМ. Во время первого сеанса очень полезно, ocoбeннo для нeпpoгpaммиcтoв, ecли pядoм бyдeт нaxoдитьcя специалист по системе. При составлении некоторых уроков могли быть допущены ошибки, иногда компонента в конкретной версии ОС рабо- тает по-другому; такие уроки могут быть пропущены, хотя требуется определенный навык для того, чтобы от- личить допущенную обучаемым ошибку от "разночтения" компонент. 16 AПK.00210-01 33 01-5 ИМЯ: lex - генератор программ лексического анализа. ФОРМАТ: lex [-tvfn] [файл]... ОПИСАНИЕ: Команда lex генерирует программы, которые могут ис- пользоваться для простого лексического анализа текста. Входные файлы (по умолчанию - стандартный ввод) содер- жат регулярные выражения, которые должны отыскиваться, и действия, записанные на языке Си, которые должны вы- полняться при нахождении этих выражений. Генерируется исходная программа "lex.yy.с" на языке Си, которая должна компилироваться следующим образом: cc lex.yy.c -ll При работе этой программы производится копирование не- распознанных порций входных данных на выход, а также выполнение соответствующих действий, описанных на язы- ке Си, для каждого регулярного выражения, которое было распознано. Приведенная ниже программа на языке lex выполняет пре- образование из верхнего регистра в нижний, удаляет пробелы в конце строк и заменяет несколько пробелов на один: %% 17 AПK.00210-01 33 01-5 [A-Z] putchar(yytext[0]+'a'-'A'); [ ]+$ [ ]+ putchar(' '); Команда имеют следующие параметры: -t поместить результат в стандартный файл вывода, а не в файл lex.yy.с; -v выдать размеры внутренних таблиц; -n не выдавать размеры таблиц (устанавливается по умолчанию); -f "быстрая" компиляция, не проводится упаковка ре- зультирующих таблиц. Годится только для малых программ. -d включение отладочного режима компилятора (ключ может задаваться только при использовании диаг- ностического варианта lex). ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : yacc 18 AПK.00210-01 33 01-5 ИМЯ: ln - создание альтернативных имен. ФОРМАТ: ln имя1 [имя2] ...[имя n] [d2] ОПИСАНИЕ: Один и тот же файл (вместе со своим размером, информа- цией, относящейся к защите, и т.д.) может иметь нес- колько альтернативных имен. Не существует способа от- личить альтернативное имя данного файла от его исход- ного имени, любые изменения в файле выполняются неза- висимо от имени, под которым известен этот файл. Koмaндa ln coздaeт для кaждoгo yкaзaннoгo фaйлa "имя 1",...,"имя н" aльтepнaтивнoe имя в cyщecтвyющeм cпpaвoчникe "d2". Ecли в кaчecтвe аргументов команды заданы "имя 1" и "имя 2", то для существующего файла "имя 1" coздaeтcя aльтepнaтивнoe имя "имя 2" в тeкyщeм кaтaлoгe. ЗАМЕЧАНИЯ: Создавать альтернативные имена справочников, или по- мещать имена файлов в разных файловых системах запре- щается. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : rm 19 AПK.00210-01 33 01-5 ИМЯ: lock - блокировать терминал. ФОРМАТ: lock ОПИСАНИЕ: Команда lock запрашивает у пользователя пароль, затем печатает на терминале "Again" и блокирует этот терми- нал до тех пор, пока пароль не будет указан повторно. Если пользователь забудет пароль, у него нет другой возможности, кроме как зарегистрироваться где-то в другом месте и завершить блокирующий процесс. 20 AПK.00210-01 33 01-5 ИМЯ: logoff - выход из системы ДЕМОС. ФОРМАТ: logoff ОПИСАНИЕ: Команда logoff предназначена для выхода пользователя из системы ДЕМОС. Выход из системы по команде logoff происходит из любого уровня файловой системы ДЕМОС. Признаком выхода из системы ДЕМОС служит изображение на экране дисплея "заставки" с идентификацией СВМ ЕС. 21 AПK.00210-01 33 01-5 ИМЯ: look - поиск строк в отсортированном списке. ФОРМАТ: look [-df] строка [файл] ОПИСАНИЕ: Команда look просматривает отсортированный "файл" и печатает все строки, начинающиеся символами "строка". Используется двоичный поиск. Опции "d" и "f" влияют на сравнение, как и в sort: d "словарный" порядок: только буквы, цифры, симво- лы табуляции и пробелы участвуют в сравнении; f Игнорируется регистр символов. Большие буквы считаются при сравнении равными малым. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : sort, grep 22 AПK.00210-01 33 01-5 ИМЯ: lorder - определить связи об'ектных файлов. ФОРМАТ: lorder файл ... ОПИСАНИЕ: Входная информация представляет собой один или нес- колько об'ектных библиотечных или архивных файлов. В результате работы получается список пар имен об'ектных файлов. Первый файл пары ссылается на внешний иденти- фикатор, определенный во втором. Выход может быть об- работан командой tsort для нахождения такого порядка размещения модулей в библиотеке, который обеспечивает однопроходный поиск для ld. Следующая строка предназначена для построения новой библиотеки из существующих файлов ".o": ar cr library `lorder *.o | tsort` ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : tsort, ld, ar ЗАМЕЧАНИЯ: имена об'ектных файлов как внутри, так и вне библи- отек, должны иметь окончание ".o" - в противном случае результат будет бессмысленным. 23 AПK.00210-01 33 01-5 ИМЯ: lpq - выдaть cocтoяниe oчepeди к AЦПУ. ФОРМАТ: lpq ОПИСАНИЕ: Команда lpq выдает соотояние очереди файлов, ожидающих вывода на АЦПУ. Каждый элемент очереди выдается, с указанием имени данного файла, размера файла в симво- лах, владельца и идентификационного номера. Идентифи- катор полезен для удаления заданного входа из очереди с помощью команды lprm. ФАЙЛЫ: /usr/spool/lpd/* ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : lpr, lprm 24 AПK.00210-01 33 01-5 ИМЯ: lpr - постановка файла в очередь на печать. ФОРМАТ: lpr [-m] [-c] [-r] [-b заголовок] [имя...] ОПИСАНИЕ: Команда lpr вызывает занесение указанных файлов в оче- редь на печать. Если файлы не указаны, считывается стандартный файл ввода. Ключи определяют следующие режимы выполнения команды: -m после завершения печати файла пользователю посы- лается сообщение с помощью mail; -c по умолчанию, файлы, которые требуется выдать на АЦПУ, копируются в справочник /tmp/spool/lpd - в этом режиме в /tmp/spool/lpd появляется только ссылка на файл и копирования не происходит; -r после завершения печати указанные файлы удаляют- ся; -b По умолчанию, перед каждым файлом печатается за- головок, который содержит имя пользователя, за- пустившего данную команду и время выдачи. В этом режиме заголовок дополняется словом, определен- ным в параметре "заголовок", которое печатается большими буквами в середине листа. Печатается не более 14 символов "заголовка". 25 AПK.00210-01 33 01-5 ФАЙЛЫ: /usr/spool/lpd/* /usr/lib/lpd "демон" печати /usr/lib/lpf фильтр для обработки заголовков и подчеркиваний ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : lpq, lprm ЗАМЕЧАНИЯ: В режиме -c, при невожможности завести ссылку (исход- ный файл находится в другой файловой системе), файл все-таки копируется. В данной версии не реализовано повторение печати файла при сбое АЦПУ. 26 AПK.00210-01 33 01-5 ИМЯ: lprm - удалить файл из очереди к АЦПУ. ФОРМАТ: lprm [идентификатор...] [имя-файла...] [владельца...] ОПИСАНИЕ: Команда lprm удаляет файл из очереди к АЦПУ. Идeнти- фикaтop, имя-фaйлa или влaдeльцa кoнкpeтнoгo фaйлa из oчepeди можно узнать с помощью команды lpq. Все файлы, удовлетворяющие заданному условию, будут удалены. Выдается идентификатор каждого удаленного из очереди файла. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : lpr, lpq ФАЙЛЫ /usr/spool/lpd/* 27 AПK.00210-01 33 01-5 ИМЯ: ls - выдать содержимое справочника. ФОРМАТ: ls [-1ACFRabcdfgilmnqrstux] имя ... l [ключи ls] имя ... ОПИСАНИЕ: Для каждого параметра, являющегося именем справочника, команда ls выдает список входящих в него файлов и справочников. Для каждого параметра, являющегося файлом, команда ls повторяет его имя и сообщает всю остальную затребованную информацию. По умолчанию вы- ходная информация сортируется в алфавитном порядке. Если параметры не указаны, выдается содержимое текуще- го справочника. Имеется три возможных формата выдачи. Выбираемый формат зависит от того, направляется ли вывод на тер- минал, а также может управляться с помощью ключей. Стандартным форматом для выдачи на терминал является вывод в несколько столбцов .Если вывод производится не на терминал, по умолчанию выдается по одному имени в строке. Кроме того, с помощью ключа "-m", может зада- ваться формат, в котором имена файлов выдаются поперек страницы, разделяясь символами ",". При вызове "l" , по умолчанию подразумевается ключ "-m". Файлы, которые рассматриваются не как содержимое спра- вочника, всегда сортируются поперек страницы, а не в 28 AПK.00210-01 33 01-5 столбцах таблицы сверху вниз. Это связано с тем, что имена отдельных файлов могут иметь произвольную длину. Имеется несколько ключей: -l Выдавать "в длинном формате", указывая для каж- дого файла его режим, число связей, владельца, размер в байтах и время последней модификации. Если файл является специальным файлом, поле раз- мера будет содержать основной и дополнительный номера устройства; -t Отсортировать в соответствии со временем модифи- кации (вначале с более поздним временем модифи- кации) вместо обычной сортировки по именам; -a Выдавать все имена (обычно имена файлов начина- ющиеся с точки "." не выдаются); -s Указать размер для каждого имени в блоках, вклю- чая блоки косвенной адресации; -d Если параметр является именем справочника, выда- вать только его имя, а не содержимое (использу- ется главным образом с "-l" для получения состо- яния справочника); -r Изменить порядок сортировки на противоположный, чтобы получить файлы в обратном алфавитном по- рядке или вначале более старые файлы; -u Использовать время последнего доступа вместо 29 AПK.00210-01 33 01-5 времени последней модификации при сортировке (-t) или распечатке (-l); -i Указать в первой позиции сообщения для каждого перечисляемого файла i-номер; -f Приводит к тому, что каждый параметр интерпрети- руется как имя справочника, и распечатывается имя, находящееся в каждой позиции. Этот ключ отключает ключи "-l", "-t", "-s" и "-r", и вклю- чает ключ "-a"; порядок такой, в котором имена находятся в справочнике; -g Указать идентификатор группы вместо идентифика- тора владельца при подробной выдаче ("-l"); -m Используется потоковый выходной формат; -1 Используется формат с одним именем в строке, например, при выводе на терминал; -c Используется вывод в несколько столбцов, напри- мер, при выводе в файл или в поток (pipe); -q Вызывает печать символа "?" вместо неизобража- емых символов в именах файлов; это обычно произ- водится, если выходным устройством является тер- минал; -x Вызывает сортировку состоящей из нескольких столбцов выдачи поперек страницы, а не сверху вниз; такой формат является стандартным, если 30 AПK.00210-01 33 01-5 последним символом имени, с которым была вызвана программа, является "x"; -A Bыдaютcя вce имeнa тeкyшeгo кaтaлoгa (aнaлoгичнo "-a") кроме '.' и '..' ; -F К именам справочников при выдаче добавляется символ "/"; имена исполняемых файлов дополняются символом "*"; -R Рекурсивная выдача содержимого всех встречающих- ся справочников. Статус файла, выдаваемый при указании ключа "-l", сос- тоит из 11 символов, которые интерпретируются следу- ющим образом. Первым символом является: d Если данный файл является справочником; b Если данный файл является специальным файлом блочного типа; c Если данный файл является специальным файлом символьного типа; - Если данный файл является простым файлом. Следующие 9 символов интерпретируются как три набора по три символа в каждом. Первый набор указывает полно- мочия владельца, следующий - полномочия других пользо- вателей той же группы, и последний - полномочия всех прочих пользователей. В каждом таком наборе три симво- 31 AПK.00210-01 33 01-5 ла указывают полномочия соответственно для чтения, за- писи и выполнения данного файла как программы. Для справочника полномочие "выполнение" интерпретируется как разрешение поиска в каталоге заданного файла. Пол- номочия задаются следующим образом: r если файл доступен для чтения; w если файл доступен для записи; x если файл доступен для выполнения; - если указанный вид доступа не разрешается. Символ полномочия для выполнения группой указывается как "s", если этот файл имеет режим установки иденти- фикации группы; аналогично, символ полномочия для вы- полнения пользователем указывается как "s", если файл имеет режим установки идентификации пользователя. Последним символом режима (обычно "x" или "-") являет- ся "t", если установлен бит режима 1000. Когда распечатываются размеры файлов в справочнике, выдается общее количество блоков, включая блоки кос- венной адресации. ЗАМЕЧАНИЯ: Символы табуляции и новой строки в именах файлов рассматриваются как печатаемые символы. Предполагается, длина строки устройства вывода равна 32 AПK.00210-01 33 01-5 80 позициям. Ширина столбцов составляет обычно 15 сим- волов. Если заданы ключи "-i" или "-s", ширина состав- ляет 20 символов. Если одновременно заданы ключи "-i" и "-s", ширина составляет 25 символов. В любом слу- чае, если задан ключ "-l" или "-n", предполагается, что в строке помещается информация только об одном имени. Установка ключей в зависимости от того, является ли выводное устройство терминалом, нежелательна, так как ls -s ! lpr значительно отличается от ls -s Выбор ширины столбцов является весьма ограниченным для терминалов, которые могут выполнять табуляцию. 33 AПK.00210-01 33 01-5 ИМЯ: m4 - макропроцессор. ФОРМАТ: m4 [файл ...] ОПИСАНИЕ: Макропроцессор m4 предназначен для использования в ка- честве препроцессора языков ФОРТРАН, Си и других.Каж- дый из файлов, указанных в параметрах, обрабатывается по очереди. Если параметры отсутствуют или параметром является "-", считывается стандартный файл ввода. Обработанный текст записывается в стандартный файл вы- вода. Формат макровызова: имя(пар1,пар2,...,парN) Символ "(" должен следовать непосредственно после име- ни макроопределения. Если символ "(" отсутствует после имени, считается, что макро не имеет параметров. При перечислении параметров начальные пробелы, символы та- буляции и новой строки, не заключенные в кавычки, иг- норируются. Имена макроопределений могут состоять из букв, цифр и символов подчеркивания "_", причем первым символом не должна быть цифра. Можно отказаться от немедленной подстановки значения макроимени. Для этой цели соответствующие последова- тельности символов заключаются в апострофы (`'). При 34 AПK.00210-01 33 01-5 каждом просмотре макропроцессора один уровень апостро- фов удаляется. Когда обнаруживается имя макроопределения, его пара- метры последовательно обрабатываются. Вычисление мак- роопределений обычно продолжается при просмотре пара- метров, и любые запятые или правые скобки, которые могут появиться в значении вложенного вызова, имеют такое же действие, как и исходный текст. После подста- новки значение макро помещается обратно во входной поток и просматривается повторно. Возможно задание своих макро с совпадающими именами, однако после этого их начальный смысл теряется. Как правило встроенные макро выдают значение "пусто" (если в описании не сказано иначе). Краткое описание встро- енных макроопределений м4, которые представляют собой входной язык макропроцессора: define(имя,значение) Второй параметр устанавливается в качестве зна- чения макроимени, указаного в первом параметре. Каждое употребление $n в замещающем тексте, где n - цифра, заменяется на n-ый параметр. Параметр 0 представляет собой имя макро. Отсутствующие параметры заменяются пустыми строками; undefine(`имя') Удаляет определение макро, указанного в парамет- ре; 35 AПK.00210-01 33 01-5 ifdef(`имя',парам2,парам3) Если первый параметр определен, значением явля- ется второй параметр, если нет - третий. Если третий параметр отсутствует, значением является пусто; changequote(l,r) Заменяет символы экранирования (апострофы) на первый и второй параметры. Вызов changequote без параметров восстанавливает исходные значения (т.е. `'); divert(n) Макропроцессор обслуживает до 10 выводных файлов, пронумерованных от 0 до 9. Конечный вывод представляет собой конкатенацию этих файлов в порядке их номеров. По умолчанию инфор- мация выдается в стандартный файл вывода (файл с номером 0). Макро divert заменяет текущий выход- ной файл на указанный в параметре (цифровая строка). Вывод, который направляется в файл но- мером, не входящим в диапазон 0-9, отбрасывает- ся; undivert(n1,n2 ...) Вызывает немедленный вывод текста из всех ука- занных файлов (или из всех файлов, если парамет- ры отсутствуют). Текст может быть выведен в дру- гой файл. При выводе информация в файле уничто- 36 AПK.00210-01 33 01-5 жается; divnum Возвращает значение текущего выходного файла; dln Считывает и отбрасывает символы до следующего символа новой строки включительно; ifelse(a,b,c,d) Имеет три или более параметров. Если первый па- раметр совпадает со вторым, третий параметр ис- пользуется в качестве значения. Если это не так и если имеется более четырех параметров, данный процесс повторяется для параметров 4, 5, 6 и 7. В противном случае значением является либо чет- вертая строка, либо, если она отсутствует - пусто; incr(число) Возвращает значение своего параметра, увеличен- ное на 1. Исходная строка цифр рассматривается как десятичное число; eval(выражение) Выдает значение указанного выражения. При вычис- лении используется 32-разрядная целая арифмети- ка. Операции включают в себя +, -, *, /, %, ^ (возведение в степень), отношения, скобки; len(строка) Возвращает количество символов в "строке"; 37 AПK.00210-01 33 01-5 index(строка_1,строка_2) Возвращает номер символа "строки_1" с которого начинается вхождение "строки_2". Счет символов начинается с нуля. Если в "строке_1" вхождений "строки_2" не обнаруженно, возвращается -1; substr(s,i,n) Возвращает подстроку строки "s", начинающуюся с i-той позиции, длиной в "n" символов. Счет сим- волов начинается с нуля. Если третий параметр отсутствует, считается, что подстрока продолжа- ется до конца строки "s"; translit(s,f,t) Перекодирует строку "s", заменяя символы, входя- щие в строку "f", соответствующими символами строки "t"; include(имя) Заменяется на содержимое файла с указанным "име- нем"; sinclude(имя) Аналогично include, за исключением того, что ес- ли файл недоступен, диагностика не выдается и процесс работы макропроцессора не прерывается; syscmd(команда) Выполняет указанную "команду" системы. Значение не возвращается; 38 AПK.00210-01 33 01-5 maketemp(...XXX...) Заменяет символы XXX идентификатором текущего процесса; errprint(строка_1,строка_2,...) Выдает указанные строки в стандартный файл диаг- ностических сообщений; dumpdef(имя_1,имя_2...) Выдает текущие имена и определения для указанных параметров (или все, если параметры отсутству- ют); 39 AПK.00210-01 33 01-5 ИМЯ: mail - почтoвая служба. ФОРМАТ: mail [+] [-i] [адресат]... mail [+] [-i] -f файл ОПИСАНИЕ: команда mail предназначена для реализации обмена сооб- щениями между пользователями посредством аппарата "почтовых ящиков". Почтовым ящиком пользователя, обыч- но является файл в справочнике /usr/spool/mail с име- нем аналогичным имени пользователя, под которым тот зарегистрирован в системе. Применяя команду mail, пользователь получает возможность просмотреть собственный "почтовый ящик" или дополнить чужой своим сообщением. Если в команде не указан "адресат", выда- ется почта пользователя, сообщение за сообщением, в порядке "последним пришел - первым вышел". Когда пере- числены "адресаты", mail считывает стандартный ввод до конца файла или строки, содержащей лишь ".", и добав- ляет его к "почтовому ящику" каждого "адресата". В на- чале сообщения указывается имя отправителя, дата отправления и "почтовый штемпель". В качестве "почто- вого штемпеля" используются строки, начинающиеся сим- волом ">". Обычно, "адресат" - имя пользователя, под которым тот зарегистрирован в системе, если необходимо отправить сообщение пользователю находящемуся в другой системе (на другой машине), то перед параметром "адре- 40 AПK.00210-01 33 01-5 сат" следует указать "!имя_системы" . Ключи задают следующие режимы работы команды: + изменить порядок просмотра сообщений на режим "первым пришел - первым вышел"; -i игнорировать прерывания; -f использовать следующий за ним параметр в ка- честве имени файла, альтернативного "почтовому ящику". Во время просмотра "почтового ящика", после печати очередного сообщения программа выдает на терминал знак вопроса "?" и ожидает команду. Допустимы следующие от- веты: <return> перейти к следующему сообщению без изменения со- держимого почтового ящика; d удалить сообщение и перейти к следующему; p повторно напечатать текущее сообщение; - вернуться к предыдущему сообщению; s[файл]... сохранить сообщение в файлах с указанными имена- ми (по умолчанию, используется файл mbox в рабо- чем справочнике пользователя); 41 AПK.00210-01 33 01-5 w[файл]... сохранить сообщение без заголовка в файлах с указанными именами (по умолчанию - mbox); m[пользователь]... направить сообщение перечисленным пользователям (по умолчанию - себе); EOT (<конец передачи> - <cntrl-D>) поместить непросмотренную почту обратно в почто- вый ящик и завершить просмотр; q то же, что и EOT; !команда вызвать интерпретатор команд SHELL и выполнить указанную команду. Любой другой ответ приведет к выдаче приведенного выше списка команд. Сообщение о наличии почты выдается при регистрации. ФАЙЛЫ: /etc/passwd сведения о пользователях сис- темы /usr/spool/mail/* "почтовые ящики" mbox сохраненная почта /tmp/ma* временные файлы dead.letter не отправленный по почте текст 42 AПK.00210-01 33 01-5 pif -mes [a-i]*.1 > ai1.f mx -ES -P ant.ai ai1.f > ai1.fcps pif -mes [j-z]*.1 > jz1.f mx -ES -P ant.jz jz1.f > jz1.fcps rm *.f 43 AПK.00210-01 33 01-5 ИМЯ: make - программа сборки компонент. ФОРМАТ: make [-f командный_файл] [ключ] ... Файл ... ОПИСАНИЕ: Команда make выполняет сборку компонент из набора ис- ходных файлов. Результатом работы make может являться готовая программа, получаемая из множества файлов, от- чет или статья, создаваемая с помощью системы подго- товки документации, библиотека функций и т.п. Для использования make, разрабатывается специальная программа сборки, под управлением которой выполняются все необходимые действия для получения требуемого ре- зультата. Программа сборки (командный файл make) со- держит информацию о порождаемых об'ектах, дерево зави- симостей, описывающее из каких файлов получается об'ект, и команды языка SHELL для создания об'ектов. Имя командного файла указывается после ключа "-f", ес- ли вместо параметра "командный_файл" указан "-", ис- пользуется стандартный файл ввода. При задании в вызы- вающей строке нескольких файлов с ключами "-f" в ка- честве описания используется конкатенация записей в указанных файлах. Компонента создается, если она не существует, или если хотя бы один из файлов (от которых она прямо или кос- 44 AПK.00210-01 33 01-5 венно зависит) изменялся после последней сборки. Командный файл содержит набор операторов, которые оп- ределяют условия и правила порождения компонент. Опе- ратор начинается со списка имен требуемых об'ектов, после которого стоит один или два символа "двоеточие" и, возможно, следует список исходных файлов. Текст после точки с запятой, а также все последующие строки, начинающиеся символом табуляции, представляют собой команды языка SHELL, которые должны выполняться для создания компоненты. При записи имен порождаемых и требующихся файлов до- пустимо использование регулярных выражений (использу- ются метасимволы "*", "[-]", "?", интерпретация кото- рых совпадает с принятой в языке SHELL; ). Остаток строки, начинающийся символом "#", считается комментарием и не рассматривается программой make. Следующий командный файл содержит правила создания программы "pgm", получаемой в результате сборки файлов "a.o" и "b.o", которые, в свою очередь, зависят от файлов "a.c", "b.c" и "incl.h". pgm: a.o b.o cc a.o b.o -o pgm a.o: incl.h a.c cc -c a.c b.o: incl.h b.c 45 AПK.00210-01 33 01-5 cc -c b.c В данном примере каждый из порождаемых об'ектов зави- сит от существования двух компонет, и при отсутствии или в результате модификации любой из них, для получения об'екта выполняются одинаковые действия. Существует возможность задания нескольких правил по- рождения для одного и того же об'екта. В этом случае, в качестве разделителя можно использовать два символа "двоеточие": aa :: x.c y.c echo ОБНОВЛЕН ФАЙЛ НА ЯЗЫКЕ СИ aa :: x.y echo ОБНОВЛЕН ФАЙЛ НА ЯЗЫКЕ YACC Командный файл может содержать вызовы макропеременных, для задания значений которых используются строки вида: имя = значение При выполнении командного файла все конструкции: $(имя) или ${имя} замещаются "значением" соответствующей переменной "имя". Если "имя" состоит из одного символа, то в мак- ровызове скобки можно не использовать. Значения макропеременных можно устанавливать не только 46 AПK.00210-01 33 01-5 в самом командном файле, но и при вызове make. Если одна и та же макропеременная одновременно определяется и в комадном файле и в вызове, используется значение, заданное при вызове. Так, если командный файл содержит строки: TEXT = ЗАДАНИЕ 2 progr: echo ${TEXT} запуск команды make без параметров приведет к выдаче текста "ЗАДАНИЕ 2". Если этот же командный файл запус- кается командой: make "TEXT = ПРИМЕР 1" в результате ее работы будет получено сообщение "ПРИМЕР 1". Существует несколько специальных макропеременных, зна- чения которых устанавливаются самой программой make: $* Имя создаваемой компоненты без суффикса; $? Список модифицированных файлов, приводящих к вы- полнению команд данного правила; $@ Полное имя создаваемого файла; $< Список исходных файлов; $$ Символ "$". 47 AПK.00210-01 33 01-5 Необходимый об'ект можно получить из какого-либо ис- ходного файла одним из четырех способов: - непосредственно задать имена и правила порожде- ния; - ввести общее правило для имен с указанными суф- фиксами; - задать правило ".DEFAULT"; - использовать стандартные соглашения о преобразо- ваниях. В операторе, непосредственно указывающем метод получе- ния одного файла из другого, явно задаются полные име- на порождаемого и исходного файлов. Например, получе- ние файла "a.К" из "a.М": a.К : a.М mv a.M a.K В общем правиле указываются суффиксы и задаются коман- ды, преобразующие файлы с одним суффиксом в файлы с тем же именем, но другим суффиксом. Например, правило получения файлов с суффиксом ".o" из файлов оканчива- ющихся на ".с" может иметь вид: .c.o : cc -c $< Кроме того, в командном файле необходимо указать, что 48 AПK.00210-01 33 01-5 ".o" и ".c" являются суффиксами и задать порядок при- менения общих правил преобразования (для случаев, когда несколько общих правил описывают переход от разных исходных файлов к одному порожденному). Это де- лается с помощью оператора: .SUFFIXES: .o .c Если в списке порождаемых об'ектов при правиле указана конструкция ".DEFAULT", то это правило выполняется всякий раз, когда программа make не имеет информации о методе получения требуемого файла. Например, если в командном файле задано правило: .DEFAULT: cp dummy $@ будут создаваться все недостающие файлы (каждый из ко- торых получается с помощью копирования файла dummy). Во время работы командного файла можно использовать набор стандартных правил получения компонент, имеющий- ся в системе. Так, первый из приведенных примеров можно было зaпиcaть знaчитeльнo кopoчe: pgm: a.o b.o cc a.o b.o -o pgm a.o b.o: incl.h При использовании стандартных правил, существует воз- можность изменения имен некоторых компиляторов и клю- 49 AПK.00210-01 33 01-5 чей, с которыми они вызываются. Имена компиляторов за- даются макропеременными: AS Ассемблер (as); CC Си-компилятор (cc); RC Фортран-77 (f77); LEX Генератор лексических анализаторов Lex (lex); YACC Компилятор компиляторов Yacc (yacc). Ключи стандартных компиляторов являются значениями следующих макропеременных: CFLAGS Ключи Си-компилятора (cc); FFLAGS Ключи компилятора Фортран-77 (f77); LFLAGS Ключи генератора программ лексического ана- лиза lex; YFLAGS Ключи компилятора yacc; LOADLIBES Список используемых библиотек. При использовании стандартных правил используется сле- дующее соглащение о трактовке суффиксов: .out Файл вывода; .o Об'ектный файл; .c Исходный файл на языке Си; 50 AПK.00210-01 33 01-5 .f Исходный файл на Фортране; .e Исходный файл на языке Efl; .r Исходный файл на Ратфоре; .y Исходный файл на Yacc; .l Исходный файл на Lex; .s Исходный файл на Ассемблере; .p Исходный файл на Паскале. Для выполнения каждой командной строки SHELL запуска- ется отдельный процесс. Поэтому при использовании мак- ропеременных требуется принимать специальные меры, например, оформлять группы команд, использующие общие макро в виде составной команды SHELL. Если в командном файле не был задан специальный вход ".SILENT", или первым символом команды не был символ "@", строка при выполнении распечатывается. Кроме того, при вызове make для установки режима подавления выдачи исполняемых команд можно использовать ключ "-s". Создание файла с помощью программы make может быть случайно или преднамеренно прервано. Если недоделанный файл не является справочником, и в списке порождаемых об'ектов наряду с именем этого файла указано специаль- ное имя ".PRECIOUS", файл уничтожается. 51 AПK.00210-01 33 01-5 Существует возможность работы с файлами