README
- Брайан В. Керниган
bwk@research.bell-labs.com
Задача этого документа — помочь вам начать использовать операционную систему Plan 9. Он написан обычным пользователем Plan 9, который ни коим образом не имеет отношения к группе ее разработчиков. Документ нацелен на аудиторию пользователей с Unix прошлым.
Приступаем
Предполагается: (1) что вы или кто-нибудь, кому вы доверяете, прочитал, разобрался и выполнил процедуру установки Plan 9; (2) что вы хотя бы просмотрели обзорный документ Plan 9 от Bell Labs, в котором дается общее описание Plan 9. Также много полезных объяснений и примеров содержит документ Использование пространства имен в Plan 9. Также предполагается, что не далеко от вас находится первый том руководства по Plan 9, так как вам потребуется читать man-страницы команд, когда их названия будут появляться здесь.
Ваши действия после включения терминала зависят от того, как установлена ваша система Plan 9; детали различаются для автономной системы и терминала, соединенного с файловым сервером и CPU сервером. Далее речь идет как раз об этом.
Также как .profile выполняется оболочкой в Unix системах, когда вы начинаете сеанс работы, файл lib/profile выполняется оболочкой в Plan 9. Для создания пользовательского эккаунта используется команда newuser, которая создает домашний каталог $home, а в нем несколько подкаталогов (bin, bin/rc, lib и tmp), затем устанавливает файл профиля lib/profile. Последний выглядит примерно вот так:
bind -a $home/bin/rc /bin font = /lib/font/bit/pelm/euro.9.font switch($service){ case terminal prompt=('term ' ' ') exec 8½ case cpu bind -b /mnt/term/mnt/8½ /dev prompt=('cpu ' ' ') }
Большинство интересных особенностей Plan 9 представлено именно в этом файле.
Оконная система 8½
Оконная система Plan 9 называется 8½; выбор terminal в операторе case профиля запускает 8½ командой
exec 8½
8½ обеспечивает меньшую «гибкость» и несомненно значительно меньшие возможности, чем xterm в X терминалах, но я, все же, предпочитаю использовать именно ее.
Оконная система обрабатывает весь текст на экране одинаково; с помощью мыши вы можете редактировать все что видите, у вас есть возможность редактировать и повторно использовать введенные команды, перенаправлять вывод или ввод программы и вновь использовать их, и т.п. Эта способность редактирования предыдущих команд освобождает от потребности их повторного ввода, и вам никогда не захочется вернуться назад к чему-нибудь вроде xterm.
8½ может работать рекурсивно: вы создаете новое окно, в нем запускаете 8½, и все что вы там делаете будет изолировано от среды. В системе 8½ нет аналога управлению виртуальными окнами, к примеру, как у VTWM и его огромного множества (или даже нескольких) иконок, но вы можете перемещать окно даже за пределы экрана, скрывать его, а затем вызывать из всплывающего меню, что само по себе является свободным эквивалентом иконизации.
В 8½ есть нечто вроде автозагрузки, т.е. вы даете запрос запускать файл с командами во время загрузки системы; большинство пользователей вставляют свои запросы в профиль:
exec 8½ -i lib/windows
Это свойство может быть полезным при установке часто используемых окон:
#!/bin/rc window 'x0 y0 x1 y1' командная строка ...
где x0,y0 и x1,y1 — координаты окна. Window создает окно в указанном месте, а затем запускает в нем команду. Для непосредственной вставки команд в файл может использоваться программа wloc, которая выводит имена и размещения всех окон в правильном формате. Нужным образом разместите окна программ, после этого запустите wloc и скопируйте (snarf) ее вывод.
Команды
Большинство стандартных команд Unix существуют в почти той же форме в Plan 9, это команды: cat, ls, cd, pwd, cp, mv, diff, grep и awk. Вы заметите незначительные различия в их поведении, но в большинстве случаев вам не стоит об этом беспокоиться.
Оболочка rc
Одной из главных программ любой операционной системы является оболочка, в Plan 9 используется оболочка под названием rc. Для запуска команд интерактивно она почти эквивалентна оболочкам Bourne или Korn, так что метасимволы вроде * и ? — ведут себя предсказуемо, простые перенаправления >, >> и | — также функционально одинаковы. Более простое использование кавычек: все заключается в одинарные кавычки; двойные кавычки и обратная косая черта не имеют специального назначения. Что увидеть одну кавычку, заключенную в кавычки, удвойте ее:
echo ''''
В программировании, rc имеет мало общего с sh, что досадно. В частности, у них различаются управляющие структуры if и for.
Все сценарии должны начинаться со строки:
#!/bin/rc
Установка переменных окружения:
var = 'значение'
при чем кавычки могут опускаться, если значение не содержит пробелов. Переменные окружения доступны как $var: определенные переменные инициализируются в начале работы, включая user (ваше имя), home (ваш домашний каталог), и service, принимающая значение terminal, если вы работаете на терминале и CPU, если вы работаете на CPU сервере.
Каталоги и пути поиска
Одной из объединяющих идей в Plan 9 считается доступ ко всем ресурсам как к файловым системам. Основой ее является управление пространством имен, так что у вас появляется возможность выборки и размещения ресурсов, необходимых для использования.
Пространство имен управляется командами bind и mount. В частности, команда
bind -a $home/bin/rc /bin
в профиле связывает каталог $home/bin/rc с /bin, формируя союзный каталог. (Точнее, она делает /bin псевдонимом для этого союза.) Кроме текущего каталога, оболочка выполняет поиск программ только в /bin, реально же она проходит по всем каталогам, которые были соединены вместе. По соглашению, ваши собственные сценарии оболочки находятся в $home/bin/rc.
Когда вы начинаете сеанс роботы, несколько каталогов связываются с /bin, включая /rc/bin, содержащий сценарии оболочки, и /$cputype/bin, содержащий двоичные файлы для вашего типа процессора. Переменная cputype содержит информацию о типе процессора, который вы используете, типично это 386, sparc, mips или 68020. Когда вы запускаете программу вроде ls, производится поиск версии для вашего процессора в /bin и ее выполнение. Если вы впоследствии выполните команду cpu для доступа к CPU серверу, в этом процессе и запущенных им, переменная cputype будет содержать тип процессора CPU сервера и команда ls (вновь из /bin), которую вы запустите там, будет правильным двоичным файлом для этого процессора.
Механизм союзных каталогов заменяет путь поиска (переменная PATH) стандартных оболочек Unix. Насколько вы поняли, все исполняемые программы находятся в /bin. Введите
lc /binчтобы увидеть список имен всех доступных исполняемых программ.
Интересные файловые системы
Одной из главных идей Plan 9 является представление системных ресурсов и служб в виде файлов в иерархии каталогов. Она идет от Unix и еще лучше разработана в Linux, но Plan 9 заходит дальше всех. Файлами выглядят не только устройства, но и такие объекты, как серверы имен Internet.
Если вы посмотрите в каталог /dev, то увидите знакомые имена. К примеру, попробуйте выполнить
cat /dev/time
несколько раз. Или же, после того как вы скопировали какой-нибудь текст, введите
cat /dev/snarfВы заметите, что файлы типа cons и mouse появляются по несколько раз, это происходит из-за того что /dev является союзным каталогом и в нем присутствуют многочисленные совпадения одинаковых файлов. Первый /dev/mouse имеет отношение к текущему окну, следующий — к включаемому окну (вероятно, это весь экран). Введите
cat /dev/mouse
а затем попробуйте передвигать мышь внутри и вне текущего окна.
Окружение оболочки хранится в каталоге под названием /env; каждая переменная окружения хранится в файле. К примеру, введите
cat /dev/font
Запущенные процессы находятся в /proc; каждый процесс представляет собой каталог, а каждый файл такого каталога доступен процессу. Например, файл status содержит текстовую информацию о статусе процесса. Введите
awk '{print $1}' /proc/*/status
чтобы получить список запущенных процессов.
Вы также найдете интересным каталог /net; все сетевые соединения управляются как файловые системы. Во всех этих случаях, сервис представляет собой интерфейс файловой системы для клиентов, хотя за его реализацией стоит отнюдь не традиционная файловая система.
И наконец, стоит заглянуть в каталог /sys, который является стандартной файловой системой, он содержит каталоги исходных текстов программ, библиотек и заголовков, man-страницы, документацию и тому подобное. Он приблизительно эквивалентен аналогичным каталогам Unix систем.
Шрифты
Один аспект 8½, который вы можете изменить, — это шрифт отображения текста. В системе существует шрифт по-умолчанию, но обычно переменная font устанавливается явно в профиле:
font = /lib/font/bit/pelm/euro.9.font 8½ -f $font
Шрифт euro.9.font — это набор почти всех символов европейских языков, включая кириллицу, греческий язык и группу специальных символов. Существуют также другие шрифты, которые включают восточные языки и даже ряд размеров.
Plan 9 использует символьный набор Unicode, который позволяет системе и ряду программ комфортабельно работать с очень большим символьным набором. (Сравните 16 bit символов и 64 KB.) Так что если вы желаете редактировать файлы с языками, в которых используется больше символов, чем может позволить ASCII, или запускать grep или awk для них, тогда Unicode — это то, что вам нужно. У вас могут возникнуть проблемы при печати таких символов на стандартных принтерах, но на экране они выглядят отменно.
Редактирование
Стандартный текстовый редактор Plan 9 называется sam, его характеристики: хорош при редактировании нескольких файлов; обеспечивает синтаксис регулярных выражений, схожий с таковым в ed (который, к слову, также в наличии); возможность копирования и вставки текста между окнами 8½. Мышиные идиомы sam и 8½ одинаковые. Если есть сетевое соединение, он может редактировать файлы на других системах.
Между прочим, регулярные выражения в Plan 9 были приведены в порядок — все программы кроме rc поддерживают одинаковые регулярные выражения, которые достаточно близки к таковым в egrep Unix систем.
CPU сервер
В мире Plan 9 интерактивные программы вроде редакторов запускаются на терминале, а вычислительные программы вроде компиляторов — на CPU сервере, который работает быстрее и имеет более высокую полосу пропускания к файловому серверу. Команда cpu соединяет вас с CPU сервером и ваши вычисления выполняются быстрее, при этом все остальное остается без изменений. Удаленный вход в систему (не сохраняющий пространство имен, с которым вы работаете) и доступ к сетевой файловой системе (не изменяющий процессор) достаточно сильно отличаются. Строка
bind -b /mnt/term/mnt/8½ /dev
в профиле производит наследование CPU сервером всех ваших устройств (включая мышь, клавиатуру и экран), ассоциированных с вашим терминалом, так что они продолжают работать в окне CPU.
Соединение с Unix системами
Вероятно ваша система Plan 9 будет соединена какой-нибудь сетью с Unix системой (или системами). Команда con соединяет Plan 9 с другой системой (типично это Unix); команда rx предназначена для выполнения одной команды на другой машине (нечто вроде rsh в Unix).
Если вы взаимодействуете с Unix системой, есть возможность подмонтировать ее файловую систему в пространство имен Plan 9, таким образом файлы Unix стороны станут доступными в Plan 9. Команда
9fs машина
устанавливает соединение и монтирует файлы; после ее выполнения корневая файловая система объекта будет находится в каталоге /n/машина.
CPU серверы Plan 9 отвечают на запросы FTP, rlogin и telnet. Если вы желаете установить свои собственные привилегии доступа, тогда вам необходимо отвечать на вызовы, используя ключ SecureNet или эквивалентный ему; в противном случае, пользователь none получит большие привилегии, достаточные для доступа ко многим доступным глобально серверам и базам данных (см. раздел 7 руководства). Подобные ограничения присутствуют и когда вы получаете доступ к файловым серверам Plan 9 через NFS; в этом случае программа 9auth будет вести диалог вызов/ответ.
Если ваша система Plan 9 делит диск с MS-DOS, что возможно для архитектуры PC, то вы можете получить доступ к файловой системе DOS через каталог /n/c:, и другим дискам через /n/a:, и т.п. Это удобный способ получения информации в или из мира PC.
Резервирование и восстановление
Обычно состояние файловой системы Plan 9 подлежит записи каждый день (или около того); в нашей системе, оно сохраняется на оптическом диске. Если ваша система должным образом оснащена, то у вас есть возможность запуска другого сервиса, который делал бы доступным прошлое состояние файловой системы (только для чтения). К примеру, если вы дадите команду
9fs dump
то она подмонтирует эту файловую систему в каталог /n/dump. Таким образом, вы можете вернуться (командой cd) в прошлое:
cd /n/dump/1995/0401/usr/вы ls -l
При этом вы переместитесь в ваш домашний каталог, каким он был 1 апреля 1995 года. Это файловая система настоящая, так что все обычные команды работают нормально; вы можете сравнивать (команда diff) файлы, копировать старые версии в настоящее. В Plan 9 нет программ ни резервирования, ни восстановления, механизм взятия дампов включает и полностью заменяет их.
Программирование в Plan 9
В основном программирование в Plan 9 выполняется по стандарту ANSI C с поддержкой обычных инструментальных средств типа YACC. Программа make была полностью вытеснена mk, и, также как с оболочкой, требуется время, чтобы привыкнуть к ней.
Для каждого поддерживаемого типа процессора существует компилятор C (в названии используется одна буквенная мнемоника), а также версия, которая может выполняться на любом типе процессора. Mkfile нормально скрывает эти данные, каталог /sys/src/cmd содержит примеры, которые вы легко можете адаптировать.
Хотя существует поддержка ANSI C, библиотеки Plan 9 написаны не на нем и стандартные заголовочные файлы ANSI отсутствуют в системе. Компиляция программ в Plan 9 очень отличается от таковой в Unix, так что перед началом этой процедуры обязательно прочитайте документ «Как использовать компилятор Plan 9 C» (How to Use the Plan 9 C Compiler, /sys/doc/comp.ps).
Если вам нужно импортировать или экспортировать программу на языке C, то вам придется использовать среду ANSI/POSIX («APE»), которая и предназначена для этих целей. Она включает полный набор POSIX-совместимых библиотек и некоторые инструментальные средства POSIX. Драйвер компилятора называется pcc. Команда
ape/psh
связывает нужные файлы и запускает POSIX-совместимую оболочку.
Хотя эти средства POSIX и полезны для обмена программ с внешним миром, чтобы быть более продуктивными используйте (по возможности) исконные инструментальные средства Plan 9.
Выводы
Plan 9 это не Unix. Если вы думаете что это Unix, то часто будете удивляться (с отвисшей челюстью и широко открытыми удивленными глазами — прим пер.), потому что какие-то вещи здесь не доступны или работают совсем по-другому. Если же вы будете думать о ней как о новой операционной системе, то поймете, что многое работает очень гладко, и здесь есть поистине хорошие идеи, которые стоит использовать.
Copyright © 1995 Lucent
Technologies. All rights reserved.
Copyright © 2003 Перевод Андрей С. Кухар.