solaris - rdist (1)
NAME
rdist - remote file distribution program
SYNOPSIS
rdist [ -b ] [ -D ] [ -h ] [ -i ] [ -n ] [ -q ] [ -R ]
[ -v ] [ -w ] [ -y ] [ -d macro = value ]
[ -f distfile ] [ -m host ] ... [ package ... ]
rdist [ -b ] [ -D ] [ -h ] [ -i ] [ -n ] [ -q ] [ -R ]
[ -v ] [ -w ] [ -y ] -c pathname ... [ login@ ]
hostname [ :destpath ]
AVAILABILITY
SUNWcsu
DESCRIPTION
rdist maintains copies of files on multiple hosts. It
preserves the owner, group, mode, and modification time of
the master copies, and can update programs that are execut-
ing. Normally, a copy on a remote host is updated if its
size or modification time differs from the original on the
local host. rdist reads the indicated distfile for instruc-
tions on updating files and/or directories. If distfile is
` - ', the standard input is used. If no -f option is
present, rdist first looks in its working directory for
distfile, and then for Distfile, for instructions.
rdist updates each package specified on the command line; if
none are given, all packages are updated according to their
entries in the distfile.
In order to be able to use rdist across machines, each host
machine must have a /etc/host.equiv file, or the user must
have an entry in the .rhosts file in the home directory.
See hosts.equiv(4) for more information.
OPTIONS
-b Binary comparison. Perform a binary com-
parison and update files if they differ,
rather than merely comparing dates and sizes.
-D Enable debugging.
-h Follow symbolic links. Copy the file that
the link points to rather than the link
itself.
-i Ignore unresolved links. rdist will nor-
mally try to maintain the link structure of
files being transferred and warn the user if
all the links cannot be found.
-n Print the commands without executing them.
This option is useful for debugging a dist-
file.
-q Quiet mode. Do not display the files being
updated on the standard output.
-R Remove extraneous files. If a directory is
being updated, remove files on the remote
host that do not correspond to those in the
master (local) directory. This is useful for
maintaining truly identical copies of direc-
tories.
-v Verify that the files are up to date on all
the hosts. Any files that are out of date
are displayed, but no files are updated, nor
is any mail sent.
-w Whole mode. The whole file name is appended
to the destination directory name. Normally,
only the last component of a name is used
when renaming files. This preserves the
directory structure of the files being
copied, instead of flattening the directory
structure. For instance, renaming a list of
files such as dir1/dir2 to dir3 would create
files dir3/dir1 and dir3/dir2 instead of dir3
and dir3. When the -w option is used with a
filename that begins with ~ , everything
except the home directory is appended to the
destination name.
-y Younger mode. Do not update remote copies
that are younger than the master copy, but
issue a warning message instead.
-d macro=value Define macro to have value. This option is
used to define or override macro definitions
in the distfile. value can be the empty
string, one name, or a list of names sur-
rounded by parentheses and separated by white
space.
-c pathname ... [login@]hostname[:destpath]
Update each pathname on the named host.
(Relative filenames are taken as relative to
your home directory.) If the `login@' prefix
is given, the update is performed with the
user ID of login. If the `:destpath' is
given, the remote file is installed as that
pathname.
-f distfile Use the description file distfile. A `-' as
the distfile argument denotes the standard
input.
-m host Limit which machines are to be updated.
Multiple -m arguments can be given to limit
updates to a subset of the hosts listed in
the distfile.
USAGE
White Space Characters
NEWLINE, TAB, and SPACE characters are all treated as white
space; a mapping continues across input lines until the
start of the next mapping: either a single filename fol-
lowed by a ` ->' or the opening parenthesis of a filename
list.
Comments
Comments begin with # and end with a NEWLINE.
Macros
rdist has a limited macro facility. Macros must be defined
outside of the packages. Macros are only expanded in
filename or hostname lists, and in the argument lists of
certain primitives. Macros cannot be used to stand for
primitives or their options, or the `->' or `::' symbols.
A macro definition is a line of the form:
macro = value
A macro reference is a string of the form:
${macro}
although (as with make(1S)) the braces can be omitted if the
macro name consists of just one character.
Metacharacters
The shell meta-characters: [, ], {, }, * and ? are recog-
nized and expanded (on the local host only) just as they are
with csh(1). Metacharacters can be escaped by prepending a
backslash.
The ~ character is also expanded in the same way as with
csh, however, it is expanded separately on the local and
destination hosts.
Filenames
File names that do not begin with `/' or `~' are taken to be
relative to user's home directory on each destination host;
they are not relative to the current working directory.
Multiple file names must be enclosed within parentheses.
Primitives
The following primitives can be used to specify actions
rdist is to take when updating remote copies of each file.
install [ -b ] [ -h ] [ -i ] [ -R ] [ -v ] [ -w ] [ - y ]
[newname]
Copy out-of-date files and directories (recursively).
If no install primitive appears in the package entry,
or if no newname option is given, the name of the local
file is given to the remote host's copy. If absent
from the remote host, parent directories in a
filename's path are created. To help prevent disas-
ters, a non-empty directory on a target host is not
replaced with a regular file or a symbolic link by
rdist. However, when using the -R option, a non-empty
directory is removed if the corresponding filename is
completely absent on the master host.
The options for install have the same semantics as
their command line counterparts, but are limited in
scope to a particular map. The login name used on the
destination host is the same as the local host unless
the destination name is of the format login@host. In
that case, the update is performed under the username
login.
notify address ...
Send mail to the indicated TCP/IP address of the form:
user@host
that lists the files updated and any errors that may
have occurred. If an address does not contain a
`@host' suffix, rdist uses the name of the destination
host to complete the address.
except filename ...
Omit from updates the files named as arguments.
except_pat pattern ...
Omit from updates the filenames that match each
regular-expression pattern (see ed(1) for more informa-
tion on regular expressions). Note that `\' and `$'
characters must be escaped in the distfile. Shell
variables can also be used within a pattern, however
shell filename expansion is not supported.
special [filename] ... "command-line"
Specify a Bourne shell, sh(1) command line to execute
on the remote host after each named file is updated.
If no filename argument is present, the command-line is
performed for every updated file, with the shell vari-
able FILE set to the file's name on the local host.
The quotation marks allow command-line to span input
lines in the distfile; multiple shell commands must be
separated by semicolons (;).
The default working directory for the shell executing
each command-line is the user's home directory on the
remote host.
EXAMPLES
The following sample distfile instructs rdist to maintain
identical copies of a shared library, a shared-library ini-
tialized data file, several include files, and a directory,
on hosts named hermes and magus. On magus, commands are
executed as super-user. rdist notifies merlin@druid when-
ever it discovers that a local file has changed relative to
a timestamp file.
HOSTS = ( hermes root@magus )
FILES = ( /usr/local/lib/libcant.so.1.1
/usrlocal/lib/libcant.sa.1.1 /usr/local/include/{*.h}
/usr/local/bin )
(${FILES}) -> (${HOSTS})
install -R ;
${FILES} :: /usr/local/lib/timestamp
notify merlin@druid ;
FILES
~/.rhosts user's trusted hosts and users
/etc/host.equiv system trusted hosts and users
/tmp/rdist* temporary file for update lists
SEE ALSO
csh(1), ed(1), make(1S), sh(1), stat(2), hosts.equiv(4)
DIAGNOSTICS
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.
WARNINGS
The super-user does not have its accustomed access
privileges on NFS mounted file systems. Using rdist to copy
to such a file system may fail, or the copies may be owned
by user "nobody".
BUGS
Source files must reside or be mounted on the local host.
There is no easy way to have a special command executed only
once after all files in a directory have been updated.
Variable expansion only works for name lists; there should
be a general macro facility.
rdist aborts on files that have a negative modification time
(before Jan 1, 1970).
There should be a "force" option to allow replacement of
non-empty directories by regular files or symlinks. A means
of updating file modes and owners of otherwise identical
files is also needed.