Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sh(1)

csh(1)

rcp(1)

stat(2)

RDIST(1)                             BSD                              RDIST(1)



NAME
     rdist - remote file distribution program

SYNOPSIS
     rdist [ -nqbRhivwy ] [ -f distfile ] [ -d var=value ] [ -m host ] [  name
     ... ]

     rdist [ -nqbRhivwy ] -c name ... [login@]host[:dest]

DESCRIPTION
     rdist is a program to maintain identical copies of  files  over  multiple
     hosts.  It  preserves  the  owner,  group,  mode,  and  mtime of files if
     possible and  can  update  programs  that  are  executing.   rdist  reads
     commands   from   distfile   to  direct  the  updating  of  files  and/or
     directories.  If distfile is -, the standard input is  used.   If  no  -f
     option is present, the program looks first for distfile, then Distfile to
     use as the input.  If no names are specified on the command  line,  rdist
     updates  all of the files and directories listed in distfile.  Otherwise,
     the argument is taken to be the name of a file to be updated or the label
     of  a  command to execute. If label and filenames conflict, it is assumed
     to be a label.  These may be used together to update specific files using
     specific commands.

     The -c option forces rdist to interpret  the  remaining  arguments  as  a
     small distfile.  The equivalent distfile is as follows.

          ( name ... ) -> [login@]host
               install   [dest] ;


OPTIONS
     Other options:

     -n        Print the commands  without  executing  them.  This  option  is
               useful for debugging distfile.

     -q        Quiet mode. Files that are being modified are normally  printed
               on standard output. The -q option suppresses this.

     -b        Binary comparison. Perform a binary comparison and update files
               if they differ rather than comparing dates and sizes.

     -R        Remove 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
               truly identical copies of directories.

     -h        Follow symbolic links. Copy the file that the  link  points  to
               rather than the link itself.

     -i        Ignore unresolved links.  rdist will normally try  to  maintain
               the link structure of files being transferred and warn the user
               if all the links cannot be found.

     -v        Verify that the files are up to date  on  all  the  hosts.  Any
               files  that are out of date will be displayed but no files will
               be changed nor any mail sent.

     -w        Whole mode. The whole filename is appended to  the  destination
               directory  name. Normally, only the last component of a name is
               used when renaming files.  This  will  preserve  the  directory
               structure  of  the files being copied instead of flattening the
               directory structure. For example, renaming a list of files such
               as  ( dir1/f1 dir2/f2 ) to dir3 would create files dir3/dir1/f1
               and dir3/dir2/f2, instead of dir3/f1 and dir3/f1.

     -y        Younger mode. Files are normally updated  if  their  mtime  and
               size  (see stat(2)) disagree. The -y option causes rdist not to
               update files that are younger than the master copy.   This  can
               be  used  to  prevent  newer  copies  on other hosts from being
               replaced.  A warning message is printed  for  files  which  are
               newer than the master copy.

     -d var=value
               Define var to have value.  The -d option is used to  define  or
               override  variable  definitions  in the distfile.  Value can be
               the empty string, one name, or a list of  names  surrounded  by
               parentheses and separated by tabs and/or spaces.

     -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
               the distfile.

     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> :: <time_stamp 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 have been changed since some given date.   The
     source  list  specifies  a  list of files and/or directories on the local
     host which are 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 which is being updated (second
     format) or the file is newer than the time stamp file (third format).

     Labels are optional. They are used to  identify  a  command  for  partial
     updates.

     Newlines, tabs, and blanks are only used as separators and are  otherwise
     ignored. Comments begin with # and end with a newline.

     Variables to be expanded begin with $ followed by one character or a name
     enclosed in curly braces (see the examples at the end).

     The source and destination lists have the following format:

          <name>
     or
          ( <zero or more names separated by white-space> )

     The shell metacharacters [, ],  {,  },  *,  and  ?   are  recognized  and
     expanded (on the local host only) in the same way as csh(1).  They can be
     escaped with a backslash.  The ~ character is also expanded in  the  same
     way as 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.  File
     names which do not begin with / or ~  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    <options>    opt_dest_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 and/or directories.
     Each  source  file  is  copied  to  each  host  in  the destination list.
     Directories are recursively copied in the same way.  opt_dest_name is  an
     optional parameter 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 will be created if they do
     not exist on the remote host.  To help  prevent  disasters,  a  non-empty
     directory  on a target host will never be replaced with a regular file or
     a symbolic link.  However, under the -R option a non-empty directory will
     be  removed  if  the  corresponding  filename is completely absent on the
     master host.  The options 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 login name  used  on  the  destination
     host  is the same as the local host unless the destination name is of the
     format login@host.

     The notify command is used to mail the list of  files  updated  (and  any
     errors  that  may  have occured) to the listed names.  If no @ appears in
     the name, the destination host is appended to the name (e.g., name1@host,
     name2@host, ...).

     The except command is used to update all of the files in the source  list
     except  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 ed(1) for details).  If one of
     the patterns matches some string within a filename,  that  file  will  be
     ignored.   Note  that since \ 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 $, it
     must be escaped with \.

     The special command is used to specify sh(1)  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 then the shell commands  will  be
     executed for every file updated or installed.  The shell variable FILE is
     set to the current filename before  executing  the  commands  in  string.
     string  starts  and ends with " and can cross multiple lines in distfile.
     Multiple commands to the shell should be separated by  the  ;  character.
     Commands  are  executed  in  the  user's home directory on the host being
     updated.  The special command can be used to rebuild  private  databases,
     etc.  after a program has been updated.

EXAMPLE
     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/lib/sendmail "/usr/lib/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 ;


FILES
     distfile       input command file
     /tmp/rdist*    temporary file for update lists

DIAGNOSTICS
     A complaint about mismatch of rdist version numbers may really stem  from
     some problem with starting your shell, e.g., you are in too many groups.

BUGS
     Source files must reside on the local host where rdist is executed.

     There is no easy way to have a special command executed 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 which have a negative mtime (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.

SEE ALSO
     sh(1), csh(1), rcp(1), stat(2)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026