деле.

/ (корень)
/| / | / | bin usr dev
/ / cmd / tty
doug neil
/ | | / | | mail news text data
Рис 3-2 Типичная файловая система


На Рис 3-2 "дерево" файловой системы растет вниз. Имена
bin, usr, doug и neil представляют каталоги и все узлы
дерева. В системе XENIX корневой каталог имеет имя,
состоящее из одного символа "/". Имена mail, news,
text и data представляют обычные файлы данных, и все
являются "листьями" дерева. Заметьте, что имя cmd - это
имя команды, которую можно запустить. Имя tty соот-
ветствует терминалу и также представлено в дереве.



- 12 -

3.3. Соглашения по присвоению имен

В системе XENIX каждый файл, каталог и устройство обла-
дают как именем файла, так и абсолютным полным именем
файла (иногда также называемым маршрутом к файлу).
Полное имя файла представляет собой описание местополо-
жения файла или каталога в системе. Полное имя является
уникальным для всех имен в системе; просто же имя файла
является уникальным только внутри данного каталога и
может не быть единственным в системе. Это как в теле-
фонном справочнике человек записан под именем John
Albert Smith, а в телефонной книжке оффиса этот же
человек может быть записан просто под именем John.

3.3.1. Имена файлов

Просто имя файла представляет собой последовательность
из от одного до четырнадцати символов, отличных от сим-
вола косая черта ('/'). Каждый файл, каталог и уст-
ройство имеет имя. Имена файлов используются для опре-
деления содержимого каталогов. Таким образом, в одном
каталоге не может быть двух файлов с одинаковыми име-
нами. Однако имена в различных каталогах могут совпа-
дать.

Несмотря на то, что вы можете использовать любые сим-
волы в имени файла, лучше его составлять из буквенно-
цифровых символов и точек. Не советуем использовать
другие символы в имени файла, особенно управляющие сим-
волы. Если имя файла содержит точку в первой позиции,
то этот файл является "скрытым" и не отображается
командой ls. Однако команда ls с ключом -a выведет
скрытые файлы. Тире ('-') используется для указания
ключей команды, поэтому следует избегать использования
этого символа в именах файлов. Кроме того, нельзя
использовать в именах файлов символы знак вопроса
('?'), звездочка ('*'), скобки ('[' и ']'), а также
кавычки, так как все эти символы имеют специальное зна-
чение при вводе команд.

3.3.2. Полные имена файлов

Полное имя файла представляет собой само имя файла,
перед которым следует последовательность из имен ката-
логов, разделенных символом косая черта ('/'). Если
полное имя файла начинается с символа косая черта, оно
указывает на файл, который может быть найден при прос-
мотре от корневого каталога. В противном случае файлы
ищутся относительно "текущего каталога" ( также называ-
емого "рабочим каталогом"). Текущий каталог необходимо
представлять себе как место вашего расположения в сис-
теме, думайте о нем как о физическом местеположении.
Когда вы меняете ваш текущий каталог, вы передвигаетесь


- 13 -

в некоторый другой каталог или место в файловой сис-
теме.

Полное имя файла, начинающееся с символа косая черта,
называется "абсолютным полным именем файла", так как
оно не изменяется относительно текущего каталога поль-
зователя. Полное имя файла, которое начинается не с
символа косая черта, назвается "относительным полным
именем файла", так как оно указывает на файл относи-
тельно текущего каталога. В любое время пользователь
может сменить текущий каталог командой cd. Имя теку-
щего каталога можно вывести командой pwd.

3.3.3. Примеры имен файлов

Некоторые примеры имен файлов показаны ниже:

/ Абсолютное полное имя корневого каталога файловой
системы.

/bin Каталог, содержащий большинство наиболее часто
используемых команд системы XENIX.

/usr Каталог, содержащий личные каталоги пользователей.
Каталог /usr/bin содержит наиболее часто использу-
емые команды системы XENIX, которых нет в каталоге
/bin.

/dev Каталог, содержащий файлы, соответствующие физи-
ческим устройствам (таким, как терминалы, принтеры
и диски).

/dev/console
Имя основного терминала системы.

/dev/tty
Имя терминала пользователя.

/lib Каталог, содержащий файлы, используемые некоторыми
стандартными командами.

tmp Этот каталог содержит временные файлы.

/usr/joe/project/A
Типичное полное имя файла; указывает на файл с
именем A в каталоге project, принадлежащий пользо-
вателю joe.

bin/x
Относительное имя файла; указывает на файл с име-
нем x в подкаталоге bin текущего рабочего ката-
лога. Если текущим каталогом является корень (/),
имя указывает на файл /bin/x. Если текущим


- 14 -

каталогом является /usr/joe, то указывает на файл
/usr/joe/bin/x.

file1
Имя обычного файла в текущем каталоге.

При работе в системе XENIX каждый пользователь нахо-
дится в каталоге, который называется текущим каталогом.
Все файлы и каталоги имеют "родительский" каталог. Он
стоит на один уровень выше и содержит указанный файл и
каталог. В файловой системе XENIX предусмотрено специ-
альное сокращение для таких каталогов. Для текущего
каталога:

. Сокращенное имя текущего каталога. Таким образом
./файлxxx указывает на файл файлxxx, если он
существует в текущем каталоге.

.. Сокращенное имя "родительского" каталога для теку-
щего каталога. Сокращенное имя ../.. обращается к
каталогу, который стоит на два уровня выше теку-
щего каталога.

3.3.4. Специальные символы

В операционной системе XENIX предусмотрены средства
проверки на соответствие образцам для указания одновре-
менно нескольких файлов, которые соответствуют задан-
ному образцу. Например, рассмотрим проблему, которая
возникает при присваивании имен частям большого доку-
мента, например книги. Логически он может быть разделен
на несколько небольших частей, таких, как главы или
разделы. Физически он также должен быть разделен, так
как редактор системы XENIX vi не может работать с очень
большими файлами.

Таким образом вы должны разделить документ на несколько
файлов. Места, в которых документ разделен, должны сле-
довать в логическом порядке. Возможно, вы разделили
файл по главам:

chap1
chap2
...


Или если каждая глава разбита на несколько файлов вы
получите:

- 15 -

chap1.1
chap1.2
chap1.3
...
chap2.1
chap2.2
...


С первого взгляда видно, какое место конкретный файл
занимает в целом документе.

Существуют другие преимущества систематического согла-
шения по присвоению имен, которые не столь очевидны. А
что, если вы захотите напечатать целую книгу на прин-
тере? Вы можете ввести:

lpr chap1.1 chap1.2 chap1.3 ...

но вы быстро устанете и наверняка наделаете ошибок. К
счастью, это можно сократить: последовательность имен,
содержащих общий образец, можно задать с помощью специ-
альных символов. Вот их описание:

* Соответствует нулю или более символам.

[] Соответствует любому символу внутри скобок.

? Соответствует одному любому символу.

Например, вы можете ввести:

lpr chap*

В системе XENIX звездочка ('*') означает "ноль или
более символов любого типа", таким образом указанная
команда воспринимается, как "послать на принтер все
файлы, имена которых начинаются со слова "chap"".

Это сокращение не является свойством только команды
lpr; оно может быть использовано в любой команде.

Используя этот факт, вы можете вывести имена файлов
книги, напечатав:

ls chap*

В ответ вы получите:

chap1.1
chap1.2
chap1.3
...


- 16 -

Звездочку можно применять не только в последней позиции
в имени файла; она может появляться в любом месте и
встречаться несколько раз. Звездочка сама по себе
соответствует всем файлам, чьи имена не содержат симво-
лов косая черта и не начинаются с точки. Таким образом:

cat *

выводит все файлы в текущем каталоге на экран вашего
терминала.

Звездочка не является единственным доступным средством
механизма соответствия образцам. Предположим, что вы
хотите напечатать только главы от 1 до 4 и 9. Вы можете
ввести:

lpr chap[12349]*

Скобки ( [ и ] ) означают "соответствие любому символу
внутри скобок". Границы последовательности букв и цифр
могут быть сокращены, таким образом вы можете выполнить
ту же команду, введя:

lpr chap[1-49]*

(Обратите внимание, что это соответствует не 49 файлам,
а только пяти.) Буквы также могут быть использованы
внутри скобок: "[a-z]" соответствует любому символу от
"a" до "z".

Знак вопроса соответствует одному любому символу, таким
образом

ls ?

выводит все файлы, чье имя состоит из одного символа, а

ls -l chap?.1

выводит информацию о первом файле каждой главы (т.е.
chap1.1, chap2.1 ...).

Если вам необходимо избежать использования специального
значения этих символов ( '*', '?' и [...]) - экраниро-
вать их -, заключите весь аргумент в одиночные кавычки.
Например, следующая команда напечатает только файл с
именем "?", а не все файлы с односимвольными именами:

ls '?'

Каким образом осуществляется проверка на соответствие
образцам, описывается в главе 4 "Руководства пользова-
теля XENIX", "Интерпретатор командного языка".


- 17 -

3.4. Команды

Команды используются для вызова выполняемых программ.
Когда вы ввели имя команды, XENIX считывает командную
строку, ищет программу с заданным именем, а затем
выполняет ее, если находит. Командные строки также
могут содержать аргументы, которые указывают ключи или
файлы, которые могут понадобиться программе. Командная
строка и синтаксис команды описаны в следующих двух
частях.

3.4.1. Командная строка

Независимо от того, вводите ли вы команду с терминала,
или команды считываются из файла, XENIX всегда считы-
вает команды из командных строк. Командная строка - это
строка символов, которая считывается интерпретатором
команд для определения действия, которое необходимо
выполнить. Этот интерпретатор командного языка считы-
вает имена команд из командной строки, находит выполня-
емую программу, соответствующую имени команды, а затем
выполняет эту программу. После окончания выполнения
программы интерпретатор команд возобновляет чтение
командной строки. Таким образом, когда вы вводите на
терминале команду, вы редактируете текстовую строку,
называемую буфером командной строки, который становится
командной строкой только после нажатия клавиши RETURN.
Этот буфер командной строки может редактироваться кла-
вишами BKSP и Ctrl-u. Нажатие RETURN вызывает передачу
буфера командной строки интерпретатору команд. Он счи-
тывает командную строку и выполняет соответствующую
команду. Если вы нажмете клавишу INTERRUPT до того, как
вы нажали клавишу RETURN, буфер командной строки очис-
тится. Можно ввести несколько команд в одной командной
строке, при условии, что команды будут разделены точкой
с запятой (';'). Например, следующая командная строка
выводит текущую дату, а затем имя текущего каталога:

date; pwd

Команды могут быть введены для обработки в фоновом
режиме, для этого необходимо добавить амперсанд ('&') к
командной строке. Этот режим выполнения подобен
"пакетной" обработке на других cистемах. Основное преи-
мущество выполнения команд в фоновом режиме заключается
в том, что вы можете выполнять другие команды во время
выполнения фоновых. Таким образом

du /usr>>diskuse&

определяет, не связываясь с вашим терминалом, как
используется дисковое пространство в каталоге /usr, а
это операция, отнимающая много времени. Заметьте, что


- 18 -

вывод помещается в файл diskuse с перенаправлением
вывода при помощи знака больше. Перенаправление опи-
сано в разделе 3.6.1.

3.4.2. Формат

Общий формат команд следующий:

cmd [ключи][аргументы][файл][...]

По соглашению, имена команд представлены в нижнем
регистре. Ключи определяют действие команды при выпол-
нении. Они являются необязательными и обычно предшест-
вуют аргументам и именам файлов. Ключи состоят из тире
('-') и идентифицирующей буквы. Например, ключ команды
ls -l (произносится "минус эль") устанавливает режим
полного вывода каталога, а команда

ls -r

устанавливает вывод содержимого каталога в обратном
алфавитном порядке. В некоторых случаях ключи могут
группироваться, формируя один ключевой аргумент. Нап-
ример, команда

ls -rl

представляет собой комбинацию двух ключей, где ключ -rl
указывает, что должен производится полный вывод содер-
жимого каталога в обратном алфавитном порядке.

Иногда несколько ключей должны задаваться отдельно, как
в случае:

copy -a -v источник назначение

где ключ -a указывает, что команда должна требовать у
пользователя подтверждения при копировании источника в
назначение. Ключ -v устанавливает режим, при котором
пользователю будет сообщаться о ходе копирования.

Также могут быть заданы другие аргументы, например,
строка для поиска, как в случае:

grep 'строка текста' выходной_файл

В примере выше

'строка текста'

представляет собой один аргумент и является строкой,
которую команда grep ищет в выходном_файле. Файл предс-
тавляет собой аргумент, который указывает имя файла,


- 19 -

нужное команде.

Большинство команд представляют собой выполняемые прог-
раммы, скомпилированные компилятором языка C или
каким-либо другим компилятором. Некоторые команды
представляют собой выполняемые командные файлы, называ-
емые "процедурами интерпретатора командного языка". Они
описаны в главе 4 Руководства пользователя XENIX
"Интерпретатор командного языка".

3.5. Ввод и вывод

По умолчанию, в системе XENIX подразумевается, что ввод
происходит c клавиатуры терминала, а вывод идет на
экран терминала. Чтобы проиллюстрировать типичную
команду ввода и вывода, введите:

cat

Эта команда ожидает ввода с клавиатуры. Она принимает в
качестве ввода столько строк текста, сколько вы набе-
рете до нажатия Ctrl-d для обозначения конца файла или
конца передачи.

Например введите:

это две строки RETURN
ввода RETURN
Ctrl-d

Когда вы нажмете Ctrl-d, ввод закончится. Команда cat
сразу же выводит каждую строку после ее ввода. Так как
вывод пересылается на экран терминала по умолчанию, на
экран перешлются две строки. Таким образом полный сеанс
будет выглядеть так:

$ cat
это две строки
это две строки
ввода
ввода

Потоки ввода и вывода команды могут быть перенаправлены
таким образом, что ввод будет происходить из файла, а
не с клавиатуры, и вывод будет производиться на принтер
или в файл, а не на экран. В дополнение, вы можете соз-
дать "конвейер" с помощью межпроцессных каналов, чтобы
вывод одной команды стал вводом другой. Перенаправле-
ние ввода-вывода и межпроцессные каналы описаны в сле-
дующих двух подразделах. Если вы используете команду
cat для того, чтобы переслать ввод в файл или межпро-
цессный канал, пересылка не осуществится, пока вы не
введете Ctrl-d для обозначения конца передачи.


- 20 -

3.5.1. Перенаправление

В системе XENIX файл может заменить терминал как при
осуществлении операций как ввода, так и вывода. Напри-
мер:

ls

выводит список файлов на экран вашего терминала. Но
если вы введете

ls > список_файлов

список ваших файлов будет помещен в файл список_файлов
(который будет создан, если до этого он не существо-
вал). Символ, который обозначает перенаправление
вывода, знак больше ('>>'), означает "поместить вывод
команды в указанный файл, а не выводить на экран терми-
нала". В следующем примере перенаправления вывода вы
можете объединить несколько файлов в один, поместив
вывод команды cat в файл:

cat f1 f2 f3 > temp

Знак добавления вывода ('>>>>'), делает тоже самое, что и
знак перенаправления, за исключением того, что он обоз-
начает "добавить к концу". Таким образом:

cat file1 file2 file3 > temp

означает "добавить file1, file2 и file3 к концу файла
temp, вместо того, чтобы записать новый файл, разрушая
существующую в нем информацию". Как и при обыкновенном
перенаправлении вывода, если файл temp не существовал,
он будет создан.

Аналогично, знак перенаправления ввода ('<&lt;') означает
"взять ввод для программы из указанного файла, вместо
терминала". Таким образом вы можете создать последова-
тельность команд редактирования и поместить ее в файл с
именем script. Затем вы можете выполнить эти команды по
отношению к файлу набрав:

ed файл < script

Или если вы использовали редактор для подготовки письма
в файле letter.txt, вы можете послать его нескольким
пользователям командой:

mail adam eve mary joe < letter.txt


- 21 -

3.5.2. Межпроцессные каналы

Одним из основных нововведений системы XENIX является
концепция "межпроцессного канала". Межпроцессный канал
- это просто способ связывания вывода одной команды с
вводом другой, таким образом, что обе они работают как
последовательность команд, называемая конвейером.

Например:

sort frank.txt george.txt hank.txt

объединяет три файла с именами frank.txt, george.txt и
hank.txt, а затем сортирует вывод. Предположим, что вы
затем хотите найти все уникальные слова в этих файлах и
посмотреть результат. Для этого вы можете ввести:

sort frank.txt george.txt hank.txt > temp1
uniq < temp1 > temp2
more temp2
rm temp1 temp2

Здесь намного больше работы, чем необходимо. Желаемый
результат можно получить, если взять вывод команды sort
и подсоединить его к вводу uniq, затем взять вывод uniq
и подсоединить его к more. Вы используете следующий
конвейер:

sort frank.txt george.txt hank.txt | uniq | more

Символ вертикальная черта ('|') используется между
командами sort и uniq для обозначения того, что вывод
программы sort, который обычно посылается на терминал,
должен быть перенаправлен на стандартный ввод команды
uniq, который в свою очередь посылает свой вывод
команде more для просмотра.

Существует много других примеров межпроцессного взаимо-
действия. Например, следующая команда форматирует в
три столбца и разбивает на страницы список ваших фай-
лов:

ls | pr -3

Программа wc считает количество строк, слов и символов
в своем вводе, а программа who выводит список пользова-
телей, по одному на строке, работающих в данный момент
в системе. Таким образом, следующая команда сообщит нам
число пользователей, работающих в системе, подсчитывая
число строк в выводе команды who:

who | wc -l



- 22 -

Следующая команда подсчитывает число файлов в текущем
каталоге:

ls | wc -l

Обратите внимание на разницу между выводом команд wc -l
и wc. По умолчанию, wc выводит количество строк, слов
и символов в вводе. А wc с ключом -l выводит только
количество строк.

Любая программа, которая считывает с клавиатуры терми-
нала, вместо этого может читать из межпроцессного
канала. Любая программа, которая выводит на экран тер-
минала, может посылать вывод в межпроцессный канал. В
конвейере можете быть столько элементов, сколько вы
захотите.

4. Задачи

4.1. Введение

В этой главе рассказывается, как можно решать обычные
задачи с помощью системы XENIX. Отдельные команды,
используемые для решения таких задач, описаны более
подробно в Справочном руководстве XENIX.

4.2. Получение доступа к системе

Для того, чтобы использовать систему XENIX, в первую
очередь вы должны получить к ней доступ. Для этого вам
нужно войти в систему. Когда вы вошли в систему, вы
попадаете в собственную рабочую область. Процесс вхож-
дения в систему, изменения пароля и выхода из системы,
описан ниже.

4.2.1. Вход в систему

Перед тем, как вы сможете войти в систему, вы должны
"зарегистрироваться". Ваше имя должно быть добавлено к
списку пользователей, а также вам должны пррисвоить
пароль и предоставить почтовый ящик.

В зависимости от режима администрирования вашей сис-
темы, возможно, вам самим необходимо будет добавить
свое имя к списку пользователей, либо эта задача будет
возложена на кого-либо еще. Если вы сами должны заре-
гистрироваться в системе, для получения дополнительной
информации обратитесь к Руководству оператора и к раз-
делу mkuser(C) в Справочном руководстве по системе
XENIX. В настоящем разделе подразумевается, что ваша


- 23 -

учетная структура в системе уже создана.

Обычно, когда с системой не работают, на экране высве-
чено приглашение "login:". Если ваш экран пуст или
выводит бессмысленные символы, нажмите несколько раз
клавишу INTERRUPT.

Когда появится приглашение "login:", выполните следую-
щую последовательность шагов:

1. Введите ваше регистрационное имя и нажмите RETURN.
Если вы ошиблись, нажмите Ctrl-u и введите имя
заново. После того, как вы нажали RETURN, на
экране появится слово "Password:".

2. Очень внимательно введите свой пароль, после чего
нажмите RETURN. Буквы не будут отображаться на
экране во времы ввода, а курсор не будет дви-
гаться. Если вы ошиблись, нажмите RETURN и повто-
рите всю процедуру входа в систему заново.

Если вы ввели регистрационное имя и пароль правильно,
на экране появится "символ-приглашение". Обычно это
знак денежной единицы ('$'). Он говорит о том, что сис-
тема XENIX готова принимать команды с клавиатуры.

Если вы ошиблись, система выведет сообщение:

Login incorrect
login:


Если вы получили такое сообщение, повторите описанную
выше процедуру. Чтобы получить доступ к системе, вы
должны правильно ввести регистрационное имя и пароль;
система не позволяет исправлять ошибки при вводе
пароля.

В зависимости от того, как настроена ваша система,
после входа вы можете увидеть сообщение, выводимое при
входе в систему, которое гласит что-нибудь типа: "Добро
пожаловать в систему XENIX", или объявление, представ-
ляющее интерес для всех пользователей.

4.2.2. Выход из системы