INTRO(1) INTRO(1)
NAME
intro - introduction to Plan 9
DESCRIPTION
Plan 9 is a distributed computing environment assembled from
separate machines acting as terminals, CPU servers, and file
servers. A user works at a terminal, running a window
system on a bitmapped display. Some windows are connected
to CPU servers; the intent is that heavy computing should be
done in those windows but it is also possible to compute on
the terminal. A separate file server provides file storage
for terminals and CPU servers alike.
Name Spaces
In Plan 9, almost all objects look like files. The object
retrieved by a given name is determined by a mapping called
the name space . A quick tour of the standard name space is
in namespace(4). Every program running in Plan 9 belongs to
a process group (see rfork in fork(2)), and the name space
for each process group can be independently customized.
A name space is hierarchically structured. A full file name
(also called a full path name) has the form
/e1/e2/.../en
This represents an object in a tree of files: the tree has a
root, represented by the first `/'; the root has a child
file named e1, which in turn has child e2, and so on; the
descendent en is the object represented by the path name.
There are a number of Plan 9 services available, each of
which provides a tree of files. A name space is built by
binding services (or subtrees of services) to names in the
name-space-so-far. Typically, a user's home file server is
bound to the root of the name space, and other services are
bound to conventionally named subdirectories. For example,
there is a service resident in the operating system for
accessing hardware devices and that is bound to /dev by con-
vention. Kernel services have names (outside the name
space) that are a `#' sign followed by a single letter; for
example, #c is conventionally bound to /dev.
Plan 9 has union directories: directories made of several
directories all bound to the same name. The directories
making up a union directory are ordered in a list. When the
bindings are made (see bind(1)), flags specify whether a
newly bound member goes at the head or the tail of the list
or completely replaces the list. To look up a name in a
union directory, each member directory is searched in list
Page 1 Plan 9 (printed 10/24/25)
INTRO(1) INTRO(1)
order until the name is found. A bind flag specifies
whether file creation is allowed in a member directory: a
file created in the union directory goes in the first member
directory in list order that allows creation, if any.
The glue that holds Plan 9 together is a network protocol
called 9P, described in section 5 of this manual. All Plan
9 servers read and respond to 9P requests to navigate
through a file tree and to perform operations such as read-
ing and writing files within the tree.
Booting
When a terminal is powered on or reset, it must be told the
name of a file server to boot from, the operating system
kernel to boot, and a user name and password. How this dia-
log proceeds is environment- and machine-dependent. Once it
is complete, the terminal loads a Plan 9 kernel, which sets
some environment variables (see env(3)) and builds an ini-
tial name space. See namespace(4), boot(8), and init(8) for
details, but some important aspects of the initial name
space are:
+o The environment variable $cputype is set to the name of
the kernel's CPU's architecture: one of 68020, mips,
sparc, 386, or hobbit. The environment variable
$objtype is initially the same as $cputype.
+o The environment variable $terminal is set to the model
of the machine running the kernel: e.g., mips magnum
3000.
+o The environment variable $service is set to terminal.
(Other ways of accessing Plan 9 may set $service to one
of cpu, con, or rx.)
+o The environment variable $user is set to the name of
the user who booted the terminal. The environment
variable $home is set to that user's home directory.
+o /$cputype/bin and /rc/bin are unioned into /bin.
After booting, the terminal runs the command interpreter,
rc(1), on /usr/$user/lib/profile after moving to the user's
home directory.
Here is a typical profile:
bind -c $home/tmp /tmp
bind -a $home/bin/rc /bin
bind -a $home/bin/$cputype /bin
font = /lib/font/bit/pelm/latin1.9.font
switch($service){
Page 2 Plan 9 (printed 10/24/25)
INTRO(1) INTRO(1)
case terminal
prompt=('term% ' ' ')
exec 8½ -f $font
case cpu
bind -b /mnt/term/mnt/8½ /dev
prompt=('cpu% ' ' ')
news
case con
prompt=('cpu% ' ' ')
news
}
The first three lines replace /tmp with a tmp in the user's
home directory and union personal bin directories with /bin,
to be searched after the standard bin directories. Then
different things happen, depending on the $service environ-
ment variable, such as running the window system 8½(1) on a
terminal.
To do heavy work such as compiling, the cpu(1) command con-
nects a window to a CPU server; the same environment vari-
ables are set (to different values) and the same profile is
run. The initial directory is the current directory in the
terminal window where cpu was typed. The value of $service
will be cpu, so the second arm of the profile switch is exe-
cuted. The root of the terminal's name space is accessible
through /mnt/term, so the bind is a way of making the window
system's graphics interface (see bit(3)) available to pro-
grams running on the CPU server. The news(1) command
reports current Plan 9 affairs.
The third possible service type, con, is set when the CPU
server is called from a non-Plan-9 machine, such as through
telnet (see con(1)).
Using Plan 9
The user commands of Plan 9 are reminiscent of those in
Research Unix, version 10; the window system is a lot like
mux. There are a number of differences, however.
The standard shell is rc(1), not the Bourne shell. The most
noticeable differences appear only when programming and
macro processing.
The character-delete character is backspace, and the line-
kill character is control-U; these cannot be changed.
DEL is the interrupt character. The shell kills any running
commands if you type a DEL in its window. See keyboard(6)
for instructions on typing characters like DEL on the vari-
ous keyboards.
Page 3 Plan 9 (printed 10/24/25)
INTRO(1) INTRO(1)
If a program dies with something like an address error, it
enters a `Broken' state. It lingers, available for debug-
ging with db(1). Broke (see kill(1)) cleans up broken pro-
cesses.
The standard editor is sam(1). There is a variant that per-
mits running the file-manipulating part of sam on a non-
Plan-9 system:
sam -r tcp!kremvax
Machine names may be prefixed by the network name, here tcp;
others include dk for Datakit and il for the Plan 9 Internet
protocol.
Login connections and remote execution on non-Plan-9
machines are usually done by saying, for example,
con kremvax
or
rx deepthought chess
(see con(1)).
You can access file systems of other machines by using 9fs
(see srv(4)). For example,
9fs kremvax
sets things up so that the root of kremvax's file tree is
visible locally in /n/kremvax.
You can get notification of mail arriving on Plan 9 using
seemail (see mail(1)); if your mail arrives elsewhere, use
vismon:
vismon tcp!kremvax
The Plan 9 file server has an integrated backup facility.
The command
9fs dump
binds to /n/dump a tree containing the daily backups on the
file server. The dump tree has years as top level file
names, and month-day as next level file names. For example,
/n/dump/1990/0120 is the root of the file system as it
appeared at dump time on January 20, 1990. If more than one
dump is taken on the same day, dumps after the first have an
extra digit. To recover the version of this file as it was
Page 4 Plan 9 (printed 10/24/25)
INTRO(1) INTRO(1)
on June 15, 1991,
cp /n/dump/1991/0615/sys/man/man1/Intro.1 .
or use yesterday(1).
SEE ALSO
This section for general publicly accessible commands.
Section (2) for library functions, including system calls.
Section (3) for kernel devices (accessed via bind(1)).
Section (4) for file services (accessed via mount).
Section (5) for the Plan 9 file protocol.
Section (6) for file formats.
Section (7) for databases and database access programs.
Section (8) for things related to administering Plan 9.
Section (9) for raster image software.
Section (10) for circuit design software.
/sys/doc for copies of papers referenced in this manual.
DIAGNOSTICS
Upon termination each program returns a string called the
exit status. It was either supplied by a call to exits(2) or
was written to the command's /proc/pid/note file (see
proc(3)), causing an abnormal termination. The empty string
is customary for successful execution; a non-empty string
gives a clue to the failure of the command.
Page 5 Plan 9 (printed 10/24/25)