Content-type: text/html
rdist - Maintains identical copies of files on multiple hosts
rdist [-bDhinqRvwy] [-f distfile|-] [-d variable=value] [-m host] [file...]
rdist [-bhinqRvwy] -csource... [login@]host[:dest]
The
rdist
command maintains identical copies of files
on multiple hosts.
Performs a binary comparison; updates files if they differ. Forces rdist to interpret the remaining arguments as the sources of small distfiles in the following format:
The rdist command preserves the owner, group, mode, and modification time of files if possible. It can also update programs that are executing. The rdist command reads commands from distfile in your $HOME directory and directs the updating of files or directories, or both. If distfile is a - (dash), standard input is used.
If no -f option is specified, the program looks first for distfile, then Distfile to use as the input. If no filenames are specified on the command line, rdist updates all of the files and directories listed in distfile. Otherwise, the argument is read as the name of a file to be updated or a command to execute. If the name of the file specified by the file argument is the same as the name of a command, the rdist command treats the filename as a command.
The file specified by distfile contains a sequence of entries that specify the files to be copied, the destination hosts, and what operations to perform to do the updating. Each entry has one of the following formats.
<variable_name> '=' <name_list>
[label:] <source_list> '->' <destination_list> <command_list>
[label:] <source_list> '::' <timestamp_file> <command_list>
The first format is used for defining variables. The second format is used for distributing files to other hosts. The third format is used for making lists of files that were changed since some given date.
The source_list specifies a list of files or directories, or both, on the local host that is to be used as the master copy for distribution. The destination_list is the list of hosts to which these files are to be copied. Each file in the source list is added to a list of changes if the file is out of date on the host that is being updated (second format) or the file is newer than timestamp_file (third format).
Labels are optional. They are used to identify a command for partial updates.
Newlines, tabs, and spaces are only used as separators and are otherwise ignored. Comments begin with a # (number sign) and end with a newline.
Variables to be expanded begin with a $ (dollar sign) followed by one character or a name enclosed in { } (braces) (see EXAMPLES).
Each line of the source and destination lists contains zero or more names, separated by spaces. The shell metacharacters [, ], {, }, *, and ? are recognized and expanded (on the local host only) as with csh. They can be escaped with a \ (backslash). The ~ (tilde) character is also expanded as with csh, but is expanded separately on the local and destination hosts. When the -w option is used with a filename that begins with ~, everything except the home directory is appended to the destination name. Filenames that do not begin with a / (slash) or a ~ (tilde) use the destination user's home directory as the root directory for the rest of the filename.
The command list consists of zero or more commands of the following format:
install <option ...> <destination_name> notify <name_list> except <name_list> except_pat <pattern_list> special <name_list> string
The install command is used to copy out of date files or directories, or both. Each source file is copied to each host in the destination list. Directories are recursively copied in the same way. The destination_name is an optional argument to rename files. If no install command appears in the command list or the destination name is not specified, the source filename is used.
Directories in the pathname are created if they do not exist on the remote host. To help prevent disasters, a nonempty directory on a target host will never be replaced with a regular file or a symbolic link. However, under the -R option, a nonempty directory is removed if the corresponding filename is completely absent on the master host.
Options for install are -R, -h, -i, -v, -w, -y, and -b and have the same semantics as options on the command line, except they only apply to the files in the source list. The username used on the destination host is the same as the local host unless the destination name is of the format user@host.
The notify command is used to mail the list of files updated (and any errors that may have occurred) to the listed names. If no @ (at sign) appears in the name, the destination host is appended to the name (for example, name1@host, name2@host, ...).
The except command is used to update all of the files in the source list for the files listed in name_list. This is usually used to copy everything in a directory, except certain files.
The except_pat command is like the except command, except that pattern_list is a list of regular expressions (see grep for details). If one of the patterns matches some string within a filename, that file is ignored. Note that since \ (backslash) is a quote character, it must be doubled to become part of the regular expression. Variables are expanded in pattern_list, but not shell file pattern-matching characters. To include a $ (dollar sign), it must be escaped with \ (backslash).
The special command is used to specify sh commands that are to be executed on the remote host after the file in name_list is updated or installed. If the name_list is omitted, the shell commands are executed for every file updated or installed. The FILE shell variable is set to the current filename before executing the commands in string. The string starts and ends with a " (double quote) and can cross multiple lines in distfile. Separate multiple commands to the shell with a ; (semicolon). Commands are executed in your home directory on the host being updated. The special command can be used to rebuild private databases and so forth after a program is updated.
If you run the rdist command as a normal user and any of the target hosts does not allow normal users to run rdist, updates to that host will fail with the following error message:
rdist: connection failed: version numbers don't match
The following is a small example of a distfile:
HOSTS = ( matisse root@arpa)
FILES = ( /bin /lib /usr/bin /usr/games
/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
/usr/lib /usr/man/man? /usr/ucb /usr/local/rdist )
EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
${FILES} -> ${HOSTS}
install -R ;
except /usr/lib/${EXLIB} ;
except /usr/games/lib ;
special /usr/sbin/sendmail "/usr/sbin/sendmail -bz" ;
srcs:
/usr/src/bin -> arpa
except_pat ( \\.o\$ /SCCS\$ ) ;
IMAGEN = (ips dviimp catdvi)
imagen:
/usr/local/${IMAGEN} -> arpa
install /usr/local/lib ;
notify ralph ;
${FILES} :: stamp.cory
notify root@cory ;
Contains a list of commands to be read by
rdist.
Contains update lists temporarily.
A complaint about mismatch of
rdist
version numbers
may really stem from some problem with starting your shell; for example, you
are in too many groups.
Commands: csh(1), grep(1), ksh(1), nrdist(1), sh(1)