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