Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RDIST(1)		    General Commands Manual		      RDIST(1)

NAME
       rdist --	remote file distribution program

SYNOPSIS
       rdist  [-nqbRhivwyD] [-P	rshcmd]	[-f distfile] [-d var=value] [-m host]
	     [name ...]
       rdist [-nqbRhivwyD] [-P rshcmd] -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 pos-
       sible and can update programs that are executing.  Rdist	reads commands
       from distfile to	direct the updating of files and/or directories.

       Options specific	to the first SYNOPSIS form:

       -       If distfile is `-', the standard	input is used.

       -f distfile
	       Use the specified distfile.

       If  either  the	-f  or	`-' option is not specified, the program looks
       first for "distfile", then "Distfile" to	use as the input.  If no names
       are specified on	the command line, rdist	will update 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 ex-
       ecute.  If label	and file names conflict, it is assumed to be a	label.
       These may be used together to update specific files using specific com-
       mands.

       Options specific	to the second SYNOPSIS form:

       -c	   Forces  rdist  to  interpret	 the  remaining	arguments as a
		   small distfile.

		   The equivalent distfile is as follows.

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

       Options common to both forms:

       -P rshcmd   Alternative program to provide rsh(1)  -like	 transport  to
		   the	remote	server.	  It must provide a binary-transparent
		   path	to the remote server, and must have a command argument
		   syntax that is compatible with rsh(1).

       -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  sur-
		   rounded by parentheses and separated	by tabs	and/or spaces.

       -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	 main-
		   tain	the link structure of files being transferred and warn
		   the user if all the links cannot be found.

       -m host	   Limit  which	machines are to	be updated.  Multiple -m argu-
		   ments can be	given to limit updates	to  a  subset  of  the
		   hosts listed	in the distfile.

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

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

       -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 file	name is	appended to the	desti-
		   nation 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,	renam-
		   ing	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/f2.

       -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	   Debug mode.

       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 lo-
       cal 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 for-
       mat) 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	other-
       wise 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 meta-characters `[', `]', `{', `}', `*', and `?'  are	recog-
       nized 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 ex-
       panded in the same way as csh(1)	but is expanded	separately on the  lo-
       cal and destination hosts.  When	the -w option is used with a file name
       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 file	name.

       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 directo-
       ries.  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 file name	is used.  Directories in the path name 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 reg-
       ular file or a symbolic link.  However, under the `-R'  option  a  non-
       empty  directory	 will be removed if the	corresponding filename is com-
       pletely 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 occurred) 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 re_format(7) for details).
       If one of the patterns matches some string within  a  file  name,  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 char-
       acters.	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
       `;'.  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.

       The following is	a small	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

SEE ALSO
       csh(1), sh(1), stat(2), re_format(7)

HISTORY
       The rdist command appeared in 4.3BSD.

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.

       Rdist relies on rcmd(3) type remote services executing successfully and
       in silence.  A  common  error  is  for  non-interactive	initialization
       scripts,	 like  .cshrc,	to  generate  output (or to run	other programs
       which generate output when not attached to a terminal --	the most  fre-
       quent offender is stty(1)).  This extra output will cause rdist to fail
       with the	error message:

	     rdist: connection failed: version numbers don't match

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 di-
       rectories by regular files or symlinks.	A means	of updating file modes
       and owners of otherwise identical files is also needed.

4.3 Berkeley Distribution	March 17, 1994			      RDIST(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=44bsd-rdist&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help