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