|  | .TH FOSSILCONS 8 | 
|  | .SH NAME | 
|  | fossilcons \- fossil console commands | 
|  | .SH SYNOPSIS | 
|  | .B | 
|  | con /srv/fscons | 
|  | .PP | 
|  | .PD 0.1 | 
|  | .B . | 
|  | .I file | 
|  | .PP | 
|  | .B 9p | 
|  | .I T-message | 
|  | ... | 
|  | .PP | 
|  | .B bind | 
|  | [ | 
|  | .B -b|-a|-c|-bc|-ac | 
|  | ] | 
|  | .I new | 
|  | .I old | 
|  | .PP | 
|  | .B dflag | 
|  | .PP | 
|  | .B echo | 
|  | [ | 
|  | .B -n | 
|  | ] | 
|  | [ | 
|  | .I arg | 
|  | ... | 
|  | ] | 
|  | .PP | 
|  | .B listen | 
|  | [ | 
|  | .B -INd | 
|  | ] | 
|  | [ | 
|  | .I address | 
|  | ] | 
|  | .PP | 
|  | .B msg | 
|  | [ | 
|  | .B -m | 
|  | .I nmsg | 
|  | ] | 
|  | [ | 
|  | .B -p | 
|  | .I nproc | 
|  | ] | 
|  | .PP | 
|  | .B printconfig | 
|  | .PP | 
|  | .B srv | 
|  | [ | 
|  | .B -APWdp | 
|  | ] | 
|  | .I name | 
|  | .PP | 
|  | .B uname | 
|  | .I name | 
|  | [ | 
|  | .I id | 
|  | | | 
|  | .BI : id | 
|  | | | 
|  | .BI % newname | 
|  | | | 
|  | .BI = leader | 
|  | | | 
|  | .BI + member | 
|  | | | 
|  | .BI - member | 
|  | ] | 
|  | .PP | 
|  | .B users | 
|  | [ | 
|  | .B -d | 
|  | | | 
|  | .B -r | 
|  | .I file | 
|  | ] | 
|  | [ | 
|  | .B -w | 
|  | ] | 
|  | .PP | 
|  | .B who | 
|  | .sp | 
|  | .PP | 
|  | .B fsys | 
|  | .I name | 
|  | .PP | 
|  | .B fsys | 
|  | .I name | 
|  | .B config | 
|  | [ | 
|  | .I device | 
|  | ] | 
|  | .PP | 
|  | .B fsys | 
|  | .I name | 
|  | .B venti | 
|  | [ | 
|  | .I host | 
|  | ] | 
|  | .PP | 
|  | .B fsys | 
|  | .I name | 
|  | .B open | 
|  | [ | 
|  | .B -APVWar | 
|  | ] | 
|  | [ | 
|  | .B -c | 
|  | .I ncache | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B close | 
|  | .PP | 
|  | .B fsys | 
|  | .I name | 
|  | .B unconfig | 
|  | .sp | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B bfree | 
|  | .I addr | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B block | 
|  | .I addr | 
|  | .I offset | 
|  | [ | 
|  | .I count | 
|  | [ | 
|  | .I data | 
|  | ]] | 
|  | .PP | 
|  | .in +1i | 
|  | .ti -1i | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B check | 
|  | [ | 
|  | .B pblock | 
|  | ] [ | 
|  | .B pdir | 
|  | ] [ | 
|  | .B pfile | 
|  | ] [ | 
|  | .B bclose | 
|  | ] [ | 
|  | .B clri | 
|  | ] [ | 
|  | .B clre | 
|  | ] [ | 
|  | .B clrp | 
|  | ] [ | 
|  | .B fix | 
|  | ] [ | 
|  | .B venti | 
|  | ] [ | 
|  | .B snapshot | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B clre | 
|  | .I addr | 
|  | .I offsets | 
|  | \&... | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B clri | 
|  | .I files | 
|  | \&... | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B clrp | 
|  | .I addr | 
|  | .I offset | 
|  | \&... | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B create | 
|  | .I path | 
|  | .I uid | 
|  | .I gid | 
|  | .I perm | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B df | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B epoch | 
|  | [[ | 
|  | .B -ry | 
|  | ] | 
|  | .I n | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B halt | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B label | 
|  | .I addr | 
|  | [ | 
|  | .I type | 
|  | .I state | 
|  | .I epoch | 
|  | .I epochclose | 
|  | .I tag | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B remove | 
|  | .I files | 
|  | \&... | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B snap | 
|  | [ | 
|  | .B -a | 
|  | ] | 
|  | [ | 
|  | .B -s | 
|  | .I src | 
|  | ] | 
|  | [ | 
|  | .B -d | 
|  | .I dst | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B snapclean | 
|  | [ | 
|  | .I timeout | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B snaptime | 
|  | [ | 
|  | .B -a | 
|  | .I hhmm | 
|  | ] | 
|  | [ | 
|  | .B -s | 
|  | .I interval | 
|  | ] | 
|  | [ | 
|  | .B -t | 
|  | .I timeout | 
|  | ] | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B stat | 
|  | .IR files ... | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B sync | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B unhalt | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B vac | 
|  | .I dir | 
|  | .PP | 
|  | [ | 
|  | .B fsys | 
|  | .I name | 
|  | ] | 
|  | .B wstat | 
|  | .I file | 
|  | .I elem | 
|  | .I uid | 
|  | .I gid | 
|  | .I perm | 
|  | .I length | 
|  | .SH DESCRIPTION | 
|  | These are configuration and maintenance commands | 
|  | executed at the console of a | 
|  | .IR fossil (4) | 
|  | file server. | 
|  | The commands are split into three groups above: | 
|  | file server configuration, | 
|  | file system configuration, | 
|  | and file system maintenance. | 
|  | This manual page is split in the same way. | 
|  | .SS File server configuration | 
|  | .PP | 
|  | The | 
|  | dot | 
|  | .RI ( . ) | 
|  | command | 
|  | reads | 
|  | .IR file , | 
|  | treating each line as a command to be executed. | 
|  | Blank lines and lines beginning with a | 
|  | .L # | 
|  | character are ignored. | 
|  | Errors during execution are printed but do not stop the script. | 
|  | Note that | 
|  | .I file | 
|  | is a file in the name space in which | 
|  | .I fossil | 
|  | was started, | 
|  | .I not | 
|  | a file in any file system served by | 
|  | .IR fossil . | 
|  | .PP | 
|  | .I 9p | 
|  | executes a 9P transaction; the arguments | 
|  | are in the same format used by | 
|  | .IR 9pcon (8). | 
|  | .PP | 
|  | .I Bind | 
|  | behaves similarly to | 
|  | .IR bind (1). | 
|  | It is useful when fossil | 
|  | is started without devices it needs configured | 
|  | into its namespace. | 
|  | .PP | 
|  | .I Dflag | 
|  | toggles the debug flag and prints the new setting. | 
|  | When the debug flag is set, all protocol messages | 
|  | and information about authentication is printed to | 
|  | standard error. | 
|  | .PP | 
|  | .I Echo | 
|  | behaves identically to | 
|  | .IR echo (1), | 
|  | writing to the console. | 
|  | .PP | 
|  | .I Listen | 
|  | manages the network addresses at which | 
|  | fossil is listening. | 
|  | With no arguments, | 
|  | .I listen | 
|  | prints the current list of addresses and their network directories. | 
|  | With one argument, listen | 
|  | .I address | 
|  | starts a new listener at | 
|  | .IR address ; | 
|  | the | 
|  | .B -d | 
|  | flag causes | 
|  | .I listen | 
|  | to remove the listener | 
|  | at the given address. | 
|  | By default, the user | 
|  | .I none | 
|  | is only allowed to attach on a connection after | 
|  | at least one other user has successfully attached. | 
|  | The | 
|  | .B -N | 
|  | flag allows connections from | 
|  | .I none | 
|  | at any time. | 
|  | The | 
|  | .B -I | 
|  | flag causes | 
|  | .I fossil | 
|  | to check the IP address of incoming connections | 
|  | against | 
|  | .BR /mnt/ipok , | 
|  | rejecting attaches from disallowed addresses. | 
|  | This mechanism is not intended for general use. | 
|  | The server | 
|  | .I sources.cs.bell-labs.com | 
|  | uses it to comply with U.S. crytography | 
|  | export regulations. | 
|  | .PP | 
|  | .I Msg | 
|  | prints the maximum internal 9P message queue size | 
|  | and the maximum number of 9P processes to | 
|  | allocate for serving the queue. | 
|  | The | 
|  | .B -m | 
|  | and | 
|  | .B -p | 
|  | options set the two variables. | 
|  | .PP | 
|  | .I Printconfig | 
|  | prints the | 
|  | .B config | 
|  | line for each configured file system | 
|  | and prints the | 
|  | .B venti | 
|  | line, if any, used to configure this file server. | 
|  | .PP | 
|  | .I Srv | 
|  | behaves like listen but uses | 
|  | .BI /srv/ name | 
|  | rather than a network address. | 
|  | With the | 
|  | .B -p | 
|  | flag, | 
|  | .I srv | 
|  | edits a list of console services rather than 9P services. | 
|  | With no arguments, | 
|  | .I srv | 
|  | prints the current list of services. | 
|  | With one argument, srv | 
|  | .I name | 
|  | starts a new service at | 
|  | .IR /srv/name ; | 
|  | the | 
|  | .B -d | 
|  | flag causes | 
|  | .I srv | 
|  | to remove the named service. | 
|  | See the | 
|  | .I [fsys] open | 
|  | command below for a description of the | 
|  | .B -APW | 
|  | options. | 
|  | .PP | 
|  | .I Uname | 
|  | manipulates entries in the user table. | 
|  | There is no distinction between users and groups: | 
|  | a user is a group with one member. | 
|  | For each user, the user table records: | 
|  | .TF \fImembers | 
|  | .PD | 
|  | .TP | 
|  | .I id | 
|  | the string used to represent this user in the on-disk structures | 
|  | .TP | 
|  | .I name | 
|  | the string used to represent this user in the 9P protocol | 
|  | .TP | 
|  | .I leader | 
|  | the group's leader (see | 
|  | .IR stat (5) | 
|  | for a description of the special privileges held by a group leader) | 
|  | .TP | 
|  | .I members | 
|  | a comma-separated list of members in this group | 
|  | .PP | 
|  | The | 
|  | .I id | 
|  | and | 
|  | .I name | 
|  | are usually the same string, but need not be. | 
|  | Once an | 
|  | .I id | 
|  | is used in file system structures archived to Venti, | 
|  | it is impossible to change those disk structures, | 
|  | and thus impossible to rename the | 
|  | .IR id . | 
|  | The translation from | 
|  | .I name | 
|  | to | 
|  | .I id | 
|  | allows the appearance of renaming the user even | 
|  | though the on-disk structures still record the old name. | 
|  | (In a conventional Unix file system, the | 
|  | .I id | 
|  | is stored as a small integer rather than a string.) | 
|  | .I Leader | 
|  | and | 
|  | .I members | 
|  | are names, not ids. | 
|  | .PP | 
|  | The first argument to | 
|  | .I uname | 
|  | is the | 
|  | .I name | 
|  | of a user. | 
|  | The second argument is a verb, one of: | 
|  | .TF \fI%newname | 
|  | .PD | 
|  | .TP | 
|  | .I id | 
|  | create a user with name | 
|  | .RI ` name ' | 
|  | and id | 
|  | .RI ` id ;' | 
|  | also create a home directory | 
|  | .BI /active/usr/ uname \fR | 
|  | .TP | 
|  | .BI : id | 
|  | create a user with name | 
|  | .RI ` name ' | 
|  | and id | 
|  | .RI ` id ,' | 
|  | but do not create a home directory | 
|  | .TP | 
|  | .BI % newname | 
|  | rename user | 
|  | .RI ` name ' | 
|  | to | 
|  | .RI ` newname ,' | 
|  | throughout the user table | 
|  | .TP | 
|  | .BI = leader | 
|  | set | 
|  | .IR name 's | 
|  | group leader | 
|  | to | 
|  | .IR leader . | 
|  | .TP | 
|  | .BI = | 
|  | remove | 
|  | .IR name 's | 
|  | group leader; then all members will be | 
|  | considered leaders | 
|  | .TP | 
|  | .BI + member | 
|  | add | 
|  | .I member | 
|  | to | 
|  | .IR name 's | 
|  | list of members | 
|  | .TP | 
|  | .BI - member | 
|  | remove | 
|  | .I member | 
|  | from | 
|  | .IR name 's | 
|  | list of members | 
|  | .LP | 
|  | If the verb is omitted, the entire entry for | 
|  | .I name | 
|  | is printed, in the form | 
|  | `\fIid\fL:\fIname\fL:\fIleader\fL:\fImembers\fR.' | 
|  | .LP | 
|  | The end of this manual page gives examples. | 
|  | .PP | 
|  | .I Users | 
|  | manipulates the user table. | 
|  | The user table is a list of lines in the form printed | 
|  | by the | 
|  | .I uname | 
|  | command. | 
|  | The | 
|  | .B -d | 
|  | flag resets the user table with the default: | 
|  | .IP | 
|  | .EX | 
|  | adm:adm:adm:sys | 
|  | none:none:: | 
|  | noworld:noworld:: | 
|  | sys:sys:: | 
|  | glenda:glenda:glenda: | 
|  | .EE | 
|  | .PP | 
|  | Except | 
|  | .BR glenda , | 
|  | these users are mandatory: they must appear in all user | 
|  | files and cannot be renamed. | 
|  | .PP | 
|  | The | 
|  | .B -r | 
|  | flag reads a user table from the named | 
|  | .I file | 
|  | in file system | 
|  | .BR main . | 
|  | The | 
|  | .B -w | 
|  | flag writes the table to | 
|  | .B /active/adm/users | 
|  | on the file system | 
|  | .BR main . | 
|  | .B /active/adm | 
|  | and | 
|  | .B /active/adm/users | 
|  | will be created if they do not exist. | 
|  | .PP | 
|  | .I Users | 
|  | .B -r | 
|  | .B /active/adm/users | 
|  | is automatically executed when the file system | 
|  | .B main | 
|  | is opened. | 
|  | .PP | 
|  | .I Users | 
|  | .B -w | 
|  | is automatically executed after each change to the user | 
|  | table by the | 
|  | .I uname | 
|  | command. | 
|  | .PP | 
|  | .I Who | 
|  | prints a list of users attached to each active connection. | 
|  | .SS File system configuration | 
|  | .I Fsys | 
|  | sets the current file system to | 
|  | .IR name , | 
|  | which must be configured and open (q.v.). | 
|  | The current file system name is | 
|  | displayed as the file server prompt. | 
|  | The special name | 
|  | .B all | 
|  | stands for all file systems; | 
|  | commands applied to | 
|  | .B all | 
|  | are applied to each file system in turn. | 
|  | The commands | 
|  | .BR config , | 
|  | .BR open , | 
|  | .BR venti , | 
|  | and | 
|  | .B close | 
|  | cannot be applied to | 
|  | .BR all . | 
|  | .PP | 
|  | .I Fsys | 
|  | takes as an optional argument | 
|  | (after | 
|  | .BR name ) | 
|  | a command to execute on the named file system. | 
|  | Most commands require that the named file system | 
|  | be configured and open; these commands can be invoked | 
|  | without the | 
|  | .BI fsys " name | 
|  | prefix, in which case the current file system is used. | 
|  | A few commands | 
|  | .RB ( config , | 
|  | .BR open , | 
|  | and | 
|  | .BR unconfig ) | 
|  | operate on unopened file systems; they require the prefix. | 
|  | .PP | 
|  | .I Config | 
|  | creates a new file system named | 
|  | .I name | 
|  | using disk file | 
|  | .IR device . | 
|  | This just adds an entry to fossil's internal table. | 
|  | If | 
|  | .I device | 
|  | is missing, | 
|  | the | 
|  | .I file | 
|  | argument to | 
|  | .IR fossil 's | 
|  | .B -f | 
|  | option will be used instead; | 
|  | this allows the | 
|  | .I fossil | 
|  | configuration file to avoid naming the partition that it is embedded in, | 
|  | making it more portable. | 
|  | .PP | 
|  | .I Venti | 
|  | establishes a connection to the Venti server | 
|  | .I host | 
|  | (by default, the environment variable | 
|  | .B $venti | 
|  | or the network variable | 
|  | .BR $venti ) | 
|  | for use by the named file system. | 
|  | If no | 
|  | .I venti | 
|  | command is issued before | 
|  | .IR open , | 
|  | the default Venti server will be used. | 
|  | If the file system is open, | 
|  | and was not opened with the | 
|  | .B -V | 
|  | flag, | 
|  | the command redials the Venti server. | 
|  | This can be used to reestablish broken connections. | 
|  | It is not a good idea to use the command to switch | 
|  | between Venti servers, since Fossil does not keep track | 
|  | of which blocks are stored on which servers. | 
|  | .PP | 
|  | .I Open | 
|  | opens the file system, reading the | 
|  | root and super blocks and allocating an in-memory | 
|  | cache for disk and Venti blocks. | 
|  | The options are: | 
|  | .TF "-c\fI ncache | 
|  | .PD | 
|  | .TP | 
|  | .B -A | 
|  | run with no authentication | 
|  | .TP | 
|  | .B -P | 
|  | run with no permission checking | 
|  | .TP | 
|  | .B -V | 
|  | do not attempt to connect to a Venti server | 
|  | .TP | 
|  | .B -W | 
|  | allow wstat to make arbitrary changes to the user and group fields | 
|  | .TP | 
|  | .B -a | 
|  | do not update file access times; | 
|  | primarily to avoid wear on flash memories | 
|  | .TP | 
|  | .B -r | 
|  | open the file system read-only | 
|  | .TP | 
|  | .BI -c " ncache | 
|  | allocate an in-memory cache of | 
|  | .I ncache | 
|  | (by default, 1000) | 
|  | blocks | 
|  | .PP | 
|  | The | 
|  | .I -APW | 
|  | settings can be overridden on a per-connection basis | 
|  | by the | 
|  | .I srv | 
|  | command above. | 
|  | .PP | 
|  | .I Close | 
|  | flushes all dirty file system blocks to disk | 
|  | and then closes the device file. | 
|  | .PP | 
|  | .I Unconfig | 
|  | removes the named file system (which must be closed) | 
|  | from fossil's internal table. | 
|  | .br | 
|  | .ne 3 | 
|  | .SS File system maintenance | 
|  | .I Bfree | 
|  | marks the block at disk address | 
|  | .I addr | 
|  | as available for allocation. | 
|  | Before doing so, it prints a | 
|  | .I label | 
|  | command (q.v.) | 
|  | that can be used to restore the block to its previous state. | 
|  | .PP | 
|  | .I Block | 
|  | displays (in hexadecimal) | 
|  | the contents of the block at disk address | 
|  | .IR addr , | 
|  | starting at | 
|  | .I offset | 
|  | and continuing for | 
|  | .I count | 
|  | bytes or until the end of the block. | 
|  | If | 
|  | .I data | 
|  | (also hexadecimal) | 
|  | is given, the contents in that range are | 
|  | replaced with data. | 
|  | When writing to a block, | 
|  | .I block | 
|  | prints the old and new contents, | 
|  | so that the change is easily undone. | 
|  | Editing blocks is discouraged. | 
|  | .PP | 
|  | .I Clre | 
|  | zeros an entry from a disk block. | 
|  | Before doing so, it prints a | 
|  | .I block | 
|  | command that can be used | 
|  | to restore the entry. | 
|  | .PP | 
|  | .I Clri | 
|  | removes the internal directory entry | 
|  | and abandons storage associated with | 
|  | .IR files . | 
|  | It ignores the usual rules for sanity, such as checking against | 
|  | removing a non-empty directory. | 
|  | A subsequent | 
|  | .I flchk | 
|  | (see | 
|  | .IR fossil (4)) | 
|  | will identify the abandoned storage so it can be reclaimed with | 
|  | .I bfree | 
|  | commands. | 
|  | .PP | 
|  | .I Clrp | 
|  | zeros a pointer in a disk block. | 
|  | Before doing so, it prints a | 
|  | .I block | 
|  | command that can be used to restore the entry. | 
|  | .PP | 
|  | .I Check | 
|  | checks the file system for various inconsistencies. | 
|  | If the file system is not already halted, it is halted for | 
|  | the duration of the check. | 
|  | If the archiver is currently sending a snapshot to Venti, | 
|  | the check will refuse to run; the only recourse is to wait | 
|  | for the archiver to finish. | 
|  | .PP | 
|  | A list of keyword options control the check. | 
|  | The | 
|  | .BR pblock , | 
|  | .BR pdir , | 
|  | and | 
|  | .B pfile | 
|  | options cause | 
|  | .I check | 
|  | to print the name of each block, directory, or file encountered. | 
|  | .PP | 
|  | By default, | 
|  | .I check | 
|  | reports errors but does not fix them. | 
|  | The | 
|  | .BR bclose , | 
|  | .BR clri , | 
|  | .BR clre , | 
|  | and | 
|  | .B clrp | 
|  | options specify correcting actions that may be taken: | 
|  | closing leaked blocks, clearing bad file directory entries, | 
|  | clearing bad pointers, and clearing bad entries. | 
|  | The | 
|  | .B fix | 
|  | option enables all of these; it is equivalent to | 
|  | .B bclose | 
|  | .B clri | 
|  | .B clre | 
|  | .BR clrp . | 
|  | .PP | 
|  | By default, | 
|  | .I check | 
|  | scans the portion of the active file system held in the write buffer, | 
|  | avoiding blocks stored on Venti or used only in snapshots. | 
|  | The | 
|  | .B venti | 
|  | option causes | 
|  | .I check | 
|  | to scan the portion of the file system stored on Venti, | 
|  | and the | 
|  | .B snapshot | 
|  | option causes | 
|  | .I check | 
|  | to scan old snapshots. | 
|  | Specifying | 
|  | .B snapshot | 
|  | causes | 
|  | .I check | 
|  | to take a long time; | 
|  | specifying | 
|  | .B venti | 
|  | or | 
|  | (worse) | 
|  | .B venti | 
|  | .B snapshot | 
|  | causes | 
|  | .I check | 
|  | to take a very long time. | 
|  | .PP | 
|  | .I Create | 
|  | creates a file on the current file system. | 
|  | .I Uid | 
|  | and | 
|  | .I gid | 
|  | are uids | 
|  | .RI ( not | 
|  | unames; | 
|  | see the discussion above, in the description | 
|  | of the | 
|  | .I uname | 
|  | command). | 
|  | .I Perm | 
|  | is the low 9 bits of the permission mode of the file, | 
|  | in octal. | 
|  | The | 
|  | .BR a , | 
|  | .BR d , | 
|  | and | 
|  | .B l | 
|  | mode prefixes | 
|  | set the append-only, directory, and lock bits. | 
|  | The | 
|  | .I perm | 
|  | is formatted as described in the | 
|  | .I stat | 
|  | command; | 
|  | creating files or directories with the | 
|  | .BR snapshot (s) | 
|  | bit set is not allowed. | 
|  | .PP | 
|  | .I Df | 
|  | prints the amount of used disk space in the write buffer. | 
|  | .PP | 
|  | .I Epoch | 
|  | sets the low file system epoch. | 
|  | Snapshots in the file system are given increasing epoch numbers. | 
|  | The file system maintains a low and a high epoch number, | 
|  | and only allows access to snapshots in that range. | 
|  | The low epoch number can be moved forward to discard old snapshots | 
|  | and reclaim the disk space they occupy. | 
|  | (The high epoch number is always the epoch of the currently | 
|  | active file system.) | 
|  | .PP | 
|  | With no argument | 
|  | .I epoch | 
|  | reports the current low and high epoch numbers. | 
|  | The command | 
|  | ``\fLepoch\fI n''\fR | 
|  | is used to propose changing the low epoch to | 
|  | .IR n . | 
|  | In response, | 
|  | .I fossil | 
|  | scans | 
|  | .B /archive | 
|  | and | 
|  | .B /snapshot | 
|  | for snapshots that would be discarded, printing their | 
|  | epoch numbers and the | 
|  | .I clri | 
|  | commands necessary to remove them. | 
|  | The epoch is changed only if no such paths are found. | 
|  | The usual sequence of commands is (1) run epoch to | 
|  | print the snapshots and their epochs, (2) clri some snapshots, | 
|  | (3) run epoch again. | 
|  | If the file system is completely full (there are no free blocks), | 
|  | .I clri | 
|  | may fail because it needs to allocate blocks. | 
|  | For this situation, | 
|  | the | 
|  | .B -y | 
|  | flag to epoch forces the epoch change even when | 
|  | it means discarding currently accessible snapshots. | 
|  | Note that when there are still snapshots in | 
|  | .BR /archive , | 
|  | the archiver should take care | 
|  | of those snapshots (moving the blocks from disk to Venti) | 
|  | if you give it more time. | 
|  | .PP | 
|  | The | 
|  | .B -r | 
|  | flag to epoch causes it to remove any now-inaccessible | 
|  | snapshot directories once it has changed the epoch. | 
|  | This flag only makes sense in conjunction with the | 
|  | .B -y | 
|  | flag. | 
|  | .PP | 
|  | .I Epoch | 
|  | is a very low-level way to retire snapshots. | 
|  | The preferred way is by setting an automatic timer | 
|  | with | 
|  | .IR snaptime . | 
|  | .PP | 
|  | .I Halt | 
|  | suspends all file system activity; | 
|  | .I unhalt | 
|  | resumes activity. | 
|  | .PP | 
|  | .I Label | 
|  | displays and edits the label associated with a block. | 
|  | When editing, a parameter of | 
|  | .B - | 
|  | means leave that field unchanged. | 
|  | Editing labels is discouraged. | 
|  | .PP | 
|  | .I Remove | 
|  | removes | 
|  | .IR files . | 
|  | .PP | 
|  | .I Snap | 
|  | takes a temporary snapshot of the current file system, | 
|  | recording it in | 
|  | .BI /snapshot/ yyyy / mmdd / hhmm \fR, | 
|  | as described in | 
|  | .IR fossil (4). | 
|  | The | 
|  | .B -a | 
|  | flag causes | 
|  | .I snap | 
|  | to take an archival snapshot, recording it in | 
|  | .BI /archive/ yyyy / mmdd \fR, | 
|  | also described in | 
|  | .IR fossil (4). | 
|  | By default the snapshot is taken of | 
|  | .BR /active , | 
|  | the root of the active file system. | 
|  | The | 
|  | .B -s | 
|  | flag specifies a different source path. | 
|  | The | 
|  | .B -d | 
|  | flag specifies a different destination path. | 
|  | These  two flags are useful together for moving snapshots into | 
|  | the archive tree. | 
|  | .PP | 
|  | .I Snapclean | 
|  | immediately discards all snapshots that are more than | 
|  | .I timeout | 
|  | minutes old. | 
|  | The default timeout is the one set by the | 
|  | .I snaptime | 
|  | command. | 
|  | The discarding is a one-time event rather than | 
|  | a recurring event as in | 
|  | .IR snaptime . | 
|  | .PP | 
|  | .I Snaptime | 
|  | displays and edits the times at which snapshots are automatically | 
|  | taken. | 
|  | An archival snapshot is taken once a day, at | 
|  | .IR hhmm , | 
|  | while temporary snapshots are taken at multiples of | 
|  | .I interval | 
|  | minutes. | 
|  | Temporary snapshots are discarded after they are | 
|  | .I timeout | 
|  | minutes old. | 
|  | The snapshot cleanup runs every | 
|  | .I timeout | 
|  | minutes or once a day, whichever is more frequent, | 
|  | so snapshots may grow to an age of almost twice the timeout | 
|  | before actually being discarded. | 
|  | With no arguments, | 
|  | .I snaptime | 
|  | prints the current snapshot times. | 
|  | The | 
|  | .B -a | 
|  | and | 
|  | .B -s | 
|  | options set the archive and snapshot times. | 
|  | An | 
|  | .I hhmm | 
|  | or | 
|  | .I interval | 
|  | of | 
|  | .L none | 
|  | can be used to disable that kind of automatic snapshot. | 
|  | The | 
|  | .B -t | 
|  | option sets the snapshot timeout. | 
|  | If | 
|  | .I timeout | 
|  | is | 
|  | .LR none , | 
|  | temporary snapshots are not automatically discarded. | 
|  | By default, all three times are set to | 
|  | .LR none . | 
|  | .PP | 
|  | .I Stat | 
|  | displays metadata for each of the named | 
|  | .IR files , | 
|  | in the form: | 
|  | .IP | 
|  | .EX | 
|  | stat \fIfile elem uid gid perm length | 
|  | .EE | 
|  | .LP | 
|  | (Replacing | 
|  | .B stat | 
|  | with | 
|  | .B wstat | 
|  | yields a valid command.) | 
|  | The | 
|  | .I perm | 
|  | is an octal number less than or equal to 777, | 
|  | prefixed with any of the following letters | 
|  | to indicate additional bits. | 
|  | .IP | 
|  | .EX | 
|  | .ta +4n | 
|  | a	\fRappend only | 
|  | d	\fRdirectory | 
|  | l	\fRexclusive use | 
|  | s	\fRis the root of a snapshot | 
|  | t	\fRtemporary bit | 
|  | A	\fRMS-DOS archive bit | 
|  | G	\fRsetgid | 
|  | H	\fRMS-DOS hidden bit | 
|  | L	\fRsymbolic link | 
|  | S	\fRMS-DOS system bit | 
|  | U	\fRsetuid | 
|  | Y	\fRsticky | 
|  | .EE | 
|  | .PP | 
|  | The bits denoted by capital letters are included | 
|  | to support non-Plan 9 systems. | 
|  | They are not made visible by the 9P protocol. | 
|  | .PP | 
|  | .I Sync | 
|  | writes dirty blocks in memory to the disk. | 
|  | .PP | 
|  | .I Vac | 
|  | prints the Venti score for a | 
|  | .IR vac (1) | 
|  | archive containing the tree rooted | 
|  | at | 
|  | .IR dir , | 
|  | which must already be archived to Venti | 
|  | (typically | 
|  | .IR dir | 
|  | is a directory in the | 
|  | .B /archive | 
|  | tree). | 
|  | .PP | 
|  | .I Wstat | 
|  | changes the metadata of the named | 
|  | .IR file . | 
|  | Specifying | 
|  | .B - | 
|  | for any of the fields means ``don't change.'' | 
|  | Attempts to change the | 
|  | .B d | 
|  | or | 
|  | .B s | 
|  | bits in the | 
|  | .I perm | 
|  | are silently ignored. | 
|  | .SH EXAMPLES | 
|  | .IR Sources , | 
|  | the Plan 9 distribution file server, | 
|  | uses the following configuration file: | 
|  | .IP | 
|  | .EX | 
|  | srv -p fscons.sources | 
|  | srv -p fscons.sources.adduserd | 
|  | srv sources | 
|  | fsys main config /dev/sdC0/fossil.outside | 
|  | fsys main open -c 25600 | 
|  | fsys main | 
|  | users /active/adm/users | 
|  | listen tcp!*!564 | 
|  | msg -m 40 -p 10 | 
|  | snaptime -a 0000 -s 15 | 
|  | .EE | 
|  | .LP | 
|  | The second console is used by the daemon | 
|  | that creates new accounts. | 
|  | .PP | 
|  | To add a new user with | 
|  | .I name | 
|  | and | 
|  | .I id | 
|  | .B rob | 
|  | and create his home directory: | 
|  | .IP | 
|  | .EX | 
|  | uname rob rob | 
|  | .EE | 
|  | .PP | 
|  | To create a new group | 
|  | .B sys | 
|  | (with no home directory) | 
|  | and add | 
|  | .B rob | 
|  | to it: | 
|  | .IP | 
|  | .EX | 
|  | uname sys :sys | 
|  | uname sys +rob | 
|  | .EE | 
|  | .PP | 
|  | To save an old (but not yet discarded) snapshot into the archive tree: | 
|  | .IP | 
|  | .EX | 
|  | snap -a -s /snapshot/2003/1220/0700 -d /archive/2003/1220 | 
|  | .EE |