Content-type: text/html Man page of rdist


Section: User Commands (1)
Index Return to Main Contents


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:

(name ... )->[login@]host[:dest] install [dest];
The rest of the command line is treated as if it came from a distfile. Defines variable to have value. This option defines or overrides variable definitions in the distfile. The value can be the empty string, one name, or a list of names surrounded by parentheses and separated by tabs or spaces, or both. Turns on debugging output. Specifies another name for distfile; specify - for standard input. Copies the file that the link points to rather than the link itself. Ignores unresolved links. The rdist command maintains the link structure of files being transferred and warns users if it cannot find all the links. Limits which machines are to be updated. You can use multiple host arguments to limit updates to a subset of the hosts listed in distfile. Prints the commands without executing them. This option is useful for debugging distfile. Operates in quiet mode. This option suppresses printing of modified file on standard output. Removes extraneous files. If a directory is being updated, any files that exist on the remote host that do not exist in the master directory are removed. This is useful for maintaining identical copies of directories. Verifies that the files are up to date on all the hosts. Any files that are out of date will be displayed, but rdist does not change any files or send any mail. Appends the whole filename to the destination directory name. Normally, rdist uses only the last component of a name for renaming files, preserving the directory structure of the copied files. Prevents recent copies of files from being replaced by files that are not as recent. Files are normally updated when their time stamp and size (see stat()) differ. The -y option prevents rdist from updating files younger than the master file.


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 [email protected].

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, [email protected], [email protected], ...).

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 [email protected]) FILES = ( /bin /lib /usr/bin /usr/games
        /usr/lib /usr/man/man? /usr/ucb /usr/local/rdist ) EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc sendmail.fc sendmail.hf 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 [email protected] ;



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)




This document was created by man2html, using the manual pages.
Time: 02:42:44 GMT, October 02, 2010