|
|
1.1 root 1: .\" Copyright (c) 1985 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)rdist.1 6.6 (Berkeley) 5/13/86
6: .\"
7: .TH RDIST 1 "May 13, 1986"
8: .UC 6
9: .ad
10: .SH NAME
11: rdist \- remote file distribution program
12: .SH SYNOPSIS
13: .B rdist
14: [ \-nqbRhivwy ]
15: [ \-f distfile ] [ \-d var=value ] [ \-m host ]
16: [ name ... ]
17: .PP
18: .B rdist
19: [ \-nqbRhivwy ] -c name ... [login@]host[:dest]
20: .SH DESCRIPTION
21: .I Rdist
22: is a program to maintain identical copies of files over multiple hosts.
23: It preserves the owner, group, mode, and mtime of files if possible and
24: can update programs that are executing.
25: .I Rdist
26: reads commands from
27: .I distfile
28: to direct the updating of files and/or directories.
29: If
30: .I distfile
31: is `\-', the standard input is used.
32: If no
33: .B \-f
34: option is present, the program looks first for `distfile',
35: then `Distfile' to use as the input.
36: If no names are specified on the command line,
37: .I rdist
38: will update all of the files and directories listed in
39: .IR distfile .
40: Otherwise, the argument is taken to be the name of a file to be updated
41: or the label of a command to execute. If label and file names conflict,
42: it is assumed to be a label.
43: These may be used together to update specific files
44: using specific commands.
45: .PP
46: The
47: .B \-c
48: option forces
49: .I rdist
50: to interpret the remaining arguments as a small
51: .IR distfile .
52: The equivalent distfile is as follows.
53: .nf
54:
55: .ti +.5i
56: ( \fIname\fP ... ) -> [\fIlogin\fP@]\fIhost\fP
57: .ti +1i
58: install [\fIdest\fP] ;
59:
60: .fi
61: .PP
62: Other options:
63: .TP
64: .B \-d
65: Define
66: .I var
67: to have
68: .IR value .
69: The
70: .B \-d
71: option is used to define or override variable definitions in the
72: .IR distfile .
73: .I Value
74: can be the empty string, one name, or a list of names surrounded by
75: parentheses and separated by tabs and/or spaces.
76: .TP
77: .B \-m
78: Limit which machines are to be updated. Multiple
79: .B -m
80: arguments can be given to limit updates to a subset of the hosts listed the
81: .IR distfile .
82: .TP
83: .B \-n
84: Print the commands without executing them. This option is
85: useful for debugging
86: .IR distfile .
87: .TP
88: .B \-q
89: Quiet mode. Files that are being modified are normally
90: printed on standard output. The
91: .B \-q
92: option suppresses this.
93: .TP
94: .B \-R
95: Remove extraneous files. If a directory is being updated, any files that exist
96: on the remote host that do not exist in the master directory are removed.
97: This is useful for maintaining truely identical copies of directories.
98: .TP
99: .B \-h
100: Follow symbolic links. Copy the file that the link points to rather than the
101: link itself.
102: .TP
103: .B \-i
104: Ignore unresolved links.
105: .I Rdist
106: will normally try to maintain the link structure of files being transfered
107: and warn the user if all the links cannot be found.
108: .TP
109: .B \-v
110: Verify that the files are up to date on all the hosts. Any files
111: that are out of date will be displayed but no files will be changed
112: nor any mail sent.
113: .TP
114: .B \-w
115: Whole mode. The whole file name is appended to the destination directory
116: name. Normally, only the last component of a name is used when renaming files.
117: This will preserve the directory structure of the files being
118: copied instead of flattening the directory structure. For example,
119: renaming a list of files such as ( dir1/f1 dir2/f2 ) to dir3 would create
120: files dir3/dir1/f1 and dir3/dir2/f2 instead of dir3/f1 and dir3/f2.
121: .TP
122: .B \-y
123: Younger mode. Files are normally updated if their
124: .I mtime
125: and
126: .I size
127: (see
128: .IR stat (2))
129: disagree. The
130: .B \-y
131: option causes
132: .I rdist
133: not to update files that are younger than the master copy.
134: This can be used
135: to prevent newer copies on other hosts from being replaced.
136: A warning message is printed for files which are newer than the master copy.
137: .TP
138: .B \-b
139: Binary comparison. Perform a binary comparison and update files if they differ
140: rather than comparing dates and sizes.
141: .PP
142: .I Distfile
143: contains a sequence of entries that specify the files
144: to be copied, the destination hosts, and what operations to perform
145: to do the updating. Each entry has one of the following formats.
146: .nf
147:
148: .in +.5i
149: <variable name> `=' <name list>
150: [ label: ] <source list> `\->' <destination list> <command list>
151: [ label: ] <source list> `::' <time_stamp file> <command list>
152: .in
153:
154: .fi
155: The first format is used for defining variables.
156: The second format is used for distributing files to other hosts.
157: The third format is used for making lists of files that have been changed
158: since some given date.
159: The \fIsource list\fP specifies a
160: list of files and/or directories on the local host which are to be used
161: as the master copy for distribution.
162: The \fIdestination list\fP is the list of hosts to which these files are to be
163: copied. Each file in the source list is added to a list of changes
164: if the file is out of date on the host which is being updated (second format) or
165: the file is newer than the time stamp file (third format).
166: .PP
167: Labels are optional. They are used to identify a command for partial updates.
168: .PP
169: Newlines, tabs, and blanks are only used as separators and are
170: otherwise ignored. Comments begin with `#' and end with a newline.
171: .PP
172: Variables to be expanded begin with `$' followed by one character or
173: a name enclosed in curly braces (see the examples at the end).
174: .PP
175: The source and destination lists have the following format:
176: .nf
177:
178: .ti +.5i
179: <name>
180: or
181: .ti +.5i
182: `(' <zero or more names separated by white-space> `)'
183:
184: .fi
185: The shell meta-characters `[', `]', `{', `}', `*', and `?'
186: are recognized and expanded (on the local host only) in the same way as
187: .IR csh (1).
188: They can be escaped with a backslash.
189: The `~' character is also expanded in the same way as
190: .IR csh
191: but is expanded separately on the local and destination hosts.
192: When the
193: .B \-w
194: option is used with a file name that begins with `~', everything except the
195: home directory is appended to the destination name.
196: File names which do not begin with `/' or `~' use the destination user's
197: home directory as the root directory for the rest of the file name.
198: .PP
199: The command list consists of zero or more commands of the following
200: format.
201: .nf
202:
203: .in +.5i
204: .ta \w'install 'u +\w'name list 'u
205: `install' <options> opt_dest_name `;'
206: `notify' <name list> `;'
207: `except' <name list> `;'
208: `except_pat' <pattern list> `;'
209: `special' <name list> string `;'
210: .in
211:
212: .fi
213: .PP
214: The
215: .I install
216: command is used to copy out of date files and/or directories.
217: Each source file is copied to each host in the destination list.
218: Directories are recursively copied in the same way.
219: .I Opt_dest_name
220: is an optional parameter to rename files.
221: If no
222: .I install
223: command appears in the command list or
224: the destination name is not specified,
225: the source file name is used.
226: Directories in the path name will be created if they
227: do not exist on the remote host.
228: To help prevent disasters, a non-empty directory on a target host will
229: never be replaced with a regular file or a symbolic link.
230: However, under the `\-R' option a non-empty directory will be removed
231: if the corresponding filename is completely absent on the master host.
232: The
233: .I options
234: are `\-R', `\-h', `\-i', `\-v', `\-w', `\-y', and `\-b'
235: and have the same semantics as
236: options on the command line except they only apply to the files
237: in the source list.
238: The login name used on the destination host is the same as the local host
239: unless the destination name is of the format ``login@host".
240: .PP
241: The
242: .I notify
243: command is used to mail the list of files updated (and any errors
244: that may have occured) to the listed names.
245: If no `@' appears in the name, the destination host is appended to
246: the name
247: (e.g., name1@host, name2@host, ...).
248: .PP
249: The
250: .I except
251: command is used to update all of the files in the source list
252: .B except
253: for the files listed in \fIname list\fP.
254: This is usually used to copy everything in a directory except certain files.
255: .PP
256: The
257: .I except_pat
258: command is like the
259: .I except
260: command except that \fIpattern list\fP is a list of regular expressions
261: (see
262: .IR ed (1)
263: for details).
264: If one of the patterns matches some string within a file name, that file will
265: be ignored.
266: Note that since `\e' is a quote character, it must be doubled to become
267: part of the regular expression. Variables are expanded in \fIpattern list\fP
268: but not shell file pattern matching characters. To include a `$', it
269: must be escaped with `\e'.
270: .PP
271: The
272: .I special
273: command is used to specify
274: .IR sh (1)
275: commands that are to be executed on the
276: remote host after the file in \fIname list\fP is updated or installed.
277: If the \fIname list\fP is omitted then the shell commands will be executed
278: for every file updated or installed. The shell variable `FILE' is set
279: to the current filename before executing the commands in
280: .IR string .
281: .I String
282: starts and ends with `"' and can cross multiple lines in
283: .I distfile.
284: Multiple commands to the shell should be separated by `;'.
285: Commands are executed in the user's home directory on the host
286: being updated.
287: The
288: .I special
289: command can be used to rebuild private databases, etc.
290: after a program has been updated.
291: .PP
292: The following is a small example.
293: .nf
294:
295: .in +.5i
296: HOSTS = ( matisse root@arpa)
297:
298: FILES = ( /bin /lib /usr/bin /usr/games
299: /usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
300: /usr/lib /usr/man/man? /usr/ucb /usr/local/rdist )
301:
302: EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
303: sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
304:
305: ${FILES} -> ${HOSTS}
306: install -R ;
307: except /usr/lib/${EXLIB} ;
308: except /usr/games/lib ;
309: special /usr/lib/sendmail "/usr/lib/sendmail -bz" ;
310:
311: srcs:
312: /usr/src/bin -> arpa
313: except_pat ( \e\e.o\e$ /SCCS\e$ ) ;
314:
315: IMAGEN = (ips dviimp catdvi)
316:
317: imagen:
318: /usr/local/${IMAGEN} -> arpa
319: install /usr/local/lib ;
320: notify ralph ;
321:
322: ${FILES} :: stamp.cory
323: notify root@cory ;
324: .in
325:
326: .fi
327: .SH FILES
328: .nf
329: .ta \w'/tmp/rdist* 'u
330: distfile input command file
331: /tmp/rdist* temporary file for update lists
332: .fi
333: .SH "SEE ALSO"
334: sh(1), csh(1), stat(2)
335: .SH DIAGNOSTICS
336: A complaint about mismatch of rdist version numbers may really stem
337: from some problem with starting your shell, e.g., you are in too many groups.
338: .SH BUGS
339: Source files must reside on the local host where rdist is executed.
340: .PP
341: There is no easy way to have a special command executed after all files
342: in a directory have been updated.
343: .PP
344: Variable expansion only works for name lists; there should be a general macro
345: facility.
346: .PP
347: .I Rdist
348: aborts on files which have a negative mtime (before Jan 1, 1970).
349: .PP
350: There should be a `force' option to allow replacement of non-empty directories
351: by regular files or symlinks. A means of updating file modes and owners
352: of otherwise identical files is also needed.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.