1.\" $OpenBSD: rdist.1,v 1.39 2011/04/23 10:14:59 sobrado Exp $ 2.\" 3.\" Copyright (c) 1983 Regents of the University of California. 4.\" All rights reserved. 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 3. Neither the name of the University nor the names of its contributors 15.\" may be used to endorse or promote products derived from this software 16.\" without specific prior written permission. 17.\" 18.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28.\" SUCH DAMAGE. 29.\" 30.\" $From: rdist.man,v 6.34 1996/01/29 22:37:19 mcooper Exp $ 31.\" @(#)rdist.1 6.6 (Berkeley) 5/13/86 32.\" 33.Dd $Mdocdate: April 23 2011 $ 34.Dt RDIST 1 35.Os 36.Sh NAME 37.Nm rdist 38.Nd remote file distribution client program 39.Sh SYNOPSIS 40.Nm rdist 41.Bk -words 42.Op Fl DFnV 43.Op Fl Server 44.Op Fl A Ar num 45.Op Fl a Ar num 46.Op Fl c Ar mini_distfile 47.Op Fl d Ar var Ns = Ns Ar value 48.Op Fl f Ar distfile 49.Op Fl L Ar remote_logopts 50.Op Fl l Ar local_logopts 51.Op Fl M Ar maxproc 52.Op Fl m Ar host 53.Op Fl o Ar distopts 54.Op Fl P Ar rsh-path 55.Op Fl p Ar rdistd-path 56.Op Fl t Ar timeout 57.Op Ar name ... 58.Ek 59.Sh DESCRIPTION 60.Nm 61is a program to maintain identical copies of files over multiple hosts. 62It preserves the owner, group, mode, and mtime of files if possible and 63can update programs that are executing. 64.Pp 65.Nm 66reads commands from 67.Pa distfile 68to direct the updating of files and/or directories. 69If 70.Pa distfile 71is 72.Sq - , 73the standard input is used. 74If no 75.Fl f 76option is present, the program looks first for 77.Pa distfile , 78then 79.Pa Distfile , 80to use as the input. 81If no names are specified on the command line, 82.Nm 83will update all of the files and directories listed in 84.Pa distfile . 85If the file 86.Pa /etc/Distfile 87exists, 88it will be run automatically by the clock daemon 89.Xr cron 8 , 90via the system script 91.Xr daily 8 . 92.Pp 93If 94.Ar name 95is specified, 96it is taken to be the name of a file to be updated 97or the label of a command to execute. 98If label and file names conflict, it is assumed to be a label. 99These may be used together to update specific files using specific commands. 100.Pp 101.Nm 102uses a remote shell command to access each target host. 103By default, 104.Xr ssh 1 105is used unless overridden by the 106.Fl P 107option or the 108.Ev RSH 109environment variable. 110If the target host is the string 111.Dq localhost 112and the remote user name is the same as the local user name, 113.Nm 114will run the command: 115.Bd -literal -offset indent 116/bin/sh -c rdistd -S 117.Ed 118.Pp 119Otherwise, 120.Nm 121run will run the command: 122.Bd -literal -offset indent 123ssh \*(Lthost\*(Gt -l \*(Ltlogin_name\*(Gt rdistd -S 124.Ed 125.Pp 126.Ar host 127is the name of the target host; 128.Ar login_name 129is the name of the user to make the connection as. 130.Pp 131On each target host 132.Nm 133will attempt to run the command: 134.Bd -literal -offset indent 135rdistd -S 136.Ed 137.Pp 138Or if the 139.Fl p 140option was specified, 141.Nm 142will attempt to run the command: 143.Bd -literal -offset indent 144\*(Ltrdistd path\*(Gt -S 145.Ed 146.Pp 147If no 148.Fl p 149option is specified, or 150.Aq Ar rdistd path 151is a simple filename, 152.Xr rdistd 1 153or 154.Aq Ar rdistd path 155must be somewhere in the 156.Ev PATH 157of the user running 158.Nm 159on the remote (target) host. 160.Pp 161The options are as follows: 162.Bl -tag -width Ds 163.It Fl A Ar num 164Set the minimum number of free files (inodes) on a filesystem that must exist 165for 166.Nm 167to update or install a file. 168.It Fl a Ar num 169Set the minimum amount of free space (in bytes) on a filesystem that must exist 170for 171.Nm 172to update or install a file. 173.It Fl c Ar mini_distfile 174Forces 175.Nm 176to interpret the remaining arguments as a small distfile. 177The format is: 178.Bd -literal -offset indent 179$ rdist -c name ... [login@]host[:dest] 180.Ed 181.Pp 182The equivalent distfile is as follows: 183.Bd -literal -offset indent 184( name ... ) -\*(Gt [login@]host 185 install [dest] ; 186.Ed 187.It Fl D 188Enable copious debugging messages. 189.It Xo 190.Fl d Ar var Ns = Ns Ar value 191.Xc 192Define 193.Ar var 194to have 195.Ar value . 196This 197option is used to define or override variable definitions in 198.Pa distfile . 199.Ar value 200can be the empty string, one name, or a list of names surrounded by 201parentheses and separated by tabs and/or spaces. 202.It Fl F 203Do not fork any child 204.Nm 205processes. 206All clients are updated sequentially. 207.It Fl f Ar distfile 208Set the name of the distfile to 209.Ar distfile . 210If 211.Sq - 212(dash) is used then read from standard input (stdin). 213.It Fl L Ar remote_logopts 214Set remote logging options. 215See the section 216.Sx MESSAGE LOGGING 217for details on the syntax for 218.Ar remote_logopts . 219.It Fl l Ar local_logopts 220Set local logging options. 221See the section 222.Sx MESSAGE LOGGING 223for details on the syntax for 224.Ar local_logopts . 225.It Fl M Ar maxproc 226Set the maximum number of simultaneously running child 227.Nm 228processes to 229.Ar maxproc . 230The default is 4. 231.It Fl m Ar host 232Limit which machines are to be updated. 233Multiple 234.Fl m 235arguments can be given to limit updates to a subset of the hosts listed in 236.Pa distfile . 237.It Fl n 238Print the commands without executing them. 239This option is useful for debugging a distfile. 240.It Fl o Ar distopts 241Specify the dist options to enable. 242.Ar distopts 243is a comma separated list of options which are listed below. 244The valid values for 245.Ar distopts 246are: 247.Bl -tag -width Ds 248.It Ic chknfs 249Do not check or update files on the target host 250that reside on NFS filesystems. 251.It Ic chkreadonly 252Enable a check on the target host 253to see if a file resides on a read-only filesystem. 254If a file does, then no checking or updating of the file is attempted. 255.It Ic chksym 256If the target on the remote host is a symbolic link, but is not on the 257master host, the remote target will be left a symbolic link. 258This behavior is generally considered a bug in the original version of 259.Nm rdist , 260but is present to allow compatibility with older versions. 261.It Ic compare 262Binary comparison. 263Perform a binary comparison and update files if they differ rather than 264comparing dates and sizes. 265.It Ic defgroup Ns Op = Ns Ic groupname 266If the group of a file to be transferred does not exist on the destination 267host, use the specified group instead. 268If groupname is not specified, the 269.Em bin 270group is used. 271.It Ic defowner Ns Op = Ns Ic owner 272If the owner of a file to be transferred does not exist on the destination 273host, use the specified owner instead. 274If owner is not specified, the user 275.Em bin 276is used. 277.It Ic follow 278Follow symbolic links. 279Copy the file that the link points to rather than the link itself. 280.It Ic history 281When 282.Ic savetargets 283and 284.Ic history 285are both defined then the target file that is updated is first renamed from 286.Pa file 287to 288.Pa file.NNN 289where NNN increases for each generation update. 290The first generation is 001, and the last is 999. 291After 999 generations, the counter is reset and stuck to 001, 292and 001 will get overwritten all the time. 293This is undesirable behavior, so some other method needs to be devised 294to clean up or limit the number of generations. 295.It Ic ignlnks 296Ignore unresolved links. 297.Nm 298will normally try to maintain the link structure of files being transferred 299and warn the user if all the links cannot be found. 300.It Ic nochkgroup 301Do not check group ownership of files that already exist. 302The file ownership is only set when the file is updated. 303.It Ic nochkmode 304Do not check file and directory permission modes. 305The permission mode is only set when the file is updated. 306.It Ic nochkowner 307Do not check user ownership of files that already exist. 308The file ownership is only set when the file is updated. 309.It Ic nodescend 310Do not descend into a directory. 311Normally, 312.Nm 313will recursively check directories. 314If this option is enabled, then any files listed in the file list in the 315distfile that are directories are not recursively scanned. 316Only the existence, ownership, and mode of the directory are checked. 317.It Ic noexec 318Automatically exclude executable binary files that are in 319.Xr a.out 5 320or 321.Xr elf 5 322format from being checked or updated. 323.It Ic numchkgroup 324Use the numeric group ID (GID) to check group ownership instead of 325the group name. 326.It Ic numchkowner 327Use the numeric user ID (UID) to check user ownership instead of 328the user name. 329.It Ic quiet 330Quiet mode. 331Files that are being modified are normally printed on standard output. 332This option suppresses that. 333.It Ic remove 334Remove extraneous files. 335If a directory is being updated, any files that exist on the remote host 336that do not exist in the master directory are removed. 337This is useful for maintaining truly identical copies of directories. 338.It Ic savetargets 339Save files that are updated instead of removing them. 340Any target file that is updated is first renamed from 341.Pa file 342to 343.Pa file.OLD . 344.It Ic sparse 345Enable checking for sparse files. 346One of the most common types of sparse files are those produced by 347.Xr db 3 . 348This option adds some additional processing overhead so it should 349only be enabled for targets likely to contain sparse files. 350.It Ic updateperm 351Do not send the whole file when the size and the modification time match. 352Instead, just update the ownership, group, and permissions as necessary. 353.It Ic verify 354Verify that the files are up to date on all the hosts. 355Any files that are out of date will be displayed 356but no files will be changed and no mail will be sent. 357.It Ic whole 358Whole mode. 359The whole file name is appended to the destination directory name. 360Normally, only the last component of a name is used when renaming files. 361This will preserve the directory structure of the files being 362copied instead of flattening the directory structure. 363For example, rdisting a list of files such as 364.Pa /p/dir1/f1 365and 366.Pa /p/dir2/f2 367to 368.Pa /tmp/dir 369would create files 370.Pa /tmp/dir/p/dir1/f1 371and 372.Pa /tmp/dir/p/dir2/f2 373instead of 374.Pa /tmp/dir/dir1/f1 375and 376.Pa /tmp/dir/dir2/f2 . 377.It Ic younger 378Younger mode. 379Files are normally updated if their 380.Em mtime 381and 382.Em size 383(see 384.Xr stat 2 ) 385disagree. 386This option causes 387.Nm 388not to update files that are younger than the master copy. 389This can be used to prevent newer copies on other hosts from being replaced. 390A warning message is printed for files which are newer than the master copy. 391.El 392.It Fl P Ar rsh-path 393Set the path to the remote shell command. 394.Ar rsh-path 395may be a colon separated list of possible pathnames. 396In this case, the first component of the path to exist is used. 397For example, 398.Pa /usr/bin/ssh:/usr/bin/rsh 399or 400.Pa /usr/bin/ssh . 401.It Fl p Ar rdistd-path 402Set the path where the rdistd server is searched for on the target host. 403.It Fl Server 404This option is recognized to provide partial backward compatible support 405for older versions of 406.Nm 407which used this option to put 408.Nm 409into server mode. 410If 411.Nm 412is started with the 413.Fl Server 414command line option, it will attempt to exec (run) the old version of 415.Nm rdist , 416.Pa /usr/bin/oldrdist . 417.It Fl t Ar timeout 418Set the timeout period, 419in seconds, 420for waiting for responses from the remote 421.Nm 422server. 423The default is 900 seconds. 424.It Fl V 425Print version information and exit. 426.El 427.Sh DISTFILES 428The 429.Pa distfile 430contains a sequence of entries that specify the files 431to be copied, the destination hosts, and what operations to perform 432to do the updating. 433Each entry has one of the following formats. 434.Bd -literal -offset indent 435\*(Ltvariable name\*(Gt = \*(Ltname list\*(Gt 436[ label: ] \*(Ltsource list\*(Gt -\*(Gt \*(Ltdestination list\*(Gt \*(Ltcommand list\*(Gt 437[ label: ] \*(Ltsource list\*(Gt :: \*(Lttimestamp file\*(Gt \*(Ltcommand list\*(Gt 438.Ed 439.Pp 440The first format is used for defining variables. 441The second format is used for distributing files to other hosts. 442The third format is used for making lists of files that have been changed 443since some given date. 444The 445.Ar source list 446specifies a list of files and/or directories on the local host which are to 447be used as the master copy for distribution. 448The 449.Ar destination list 450is the list of hosts to which these files are to be copied. 451Each file in the source list is added to a list of changes if the file 452is out of date on the host which is being updated (second format) or 453the file is newer than the 454.Ar timestamp file 455(third format). 456.Pp 457Newlines, tabs, and blanks are only used as separators and are 458otherwise ignored. 459Comments begin with 460.Sq # 461and end with a newline. 462.Pp 463Variables to be expanded begin with 464.Sq $ 465followed by one character or a name enclosed in curly braces 466(see the examples at the end). 467.Pp 468Labels are optional. 469They are used to identify a specific command to execute 470(for example, allowing an update of a subset of a repository). 471.Pp 472The source and destination lists have the following format: 473.Bd -literal -offset indent 474\*(Ltname\*(Gt 475.Ed 476or 477.Bd -literal -compact -offset indent 478`(' \*(Ltzero or more names separated by whitespace\*(Gt `)' 479.Ed 480.Pp 481These simple lists can be modified by using one level of set addition, 482subtraction, or intersection like this: 483.Pp 484.Dl list - list 485or 486.Dl list + list 487or 488.Dl list & list 489.Pp 490If additional modifications are needed (e.g.\& 491.Do 492all servers and client machines except for the OSF/1 machines 493.Dc ) 494then the list will have to be explicitly constructed in steps using 495.Dq temporary 496variables. 497.Pp 498The shell meta-characters `[', `]', `{', `}', `*', and `?' 499are recognized and expanded (on the local host only) in the same way as 500.Xr ksh 1 . 501They can be escaped with a backslash. 502The `~' character is also expanded in the same way as 503.Xr ksh 1 504but is expanded separately on the local and destination hosts. 505When the 506.Fl o Ar whole 507option is used with a file name that begins with `~', everything except the 508home directory is appended to the destination name. 509File names which do not begin with `/' or `~' use the destination user's 510home directory as the root directory for the rest of the file name. 511.Pp 512The command list consists of zero or more commands of the following 513format: 514.Bl -column "except_pat" "pattern listXX" "opt_dest_name" ";" -offset indent 515.It install Ta \*(Ltoptions\*(Gt Ta opt_dest_name Ta ; 516.It notify Ta \*(Ltname list\*(Gt Ta "" Ta ; 517.It except Ta \*(Ltname list\*(Gt Ta "" Ta ; 518.It except_pat Ta \*(Ltpattern list\*(Gt Ta "" Ta ; 519.It special Ta \*(Ltname list\*(Gt Ta string Ta ; 520.It cmdspecial Ta \*(Ltname list\*(Gt Ta string Ta ; 521.El 522.Pp 523The 524.Cm install 525command is used to copy out of date files and/or directories. 526Each source file is copied to each host in the destination list. 527Directories are recursively copied in the same way. 528.Ar opt_dest_name 529is an optional parameter to rename files. 530If no 531.Cm install 532command appears in the command list or the destination name is not specified, 533the source file name is used. 534Directories in the path name will be created if they 535do not exist on the remote host. 536The 537.Fl o Ar distopts 538option as specified above has the same semantics as 539on the command line except 540.Ar distopts 541only applies to the files in the source list. 542The login name used on the destination host is the same as the local host 543unless the destination name is of the format 544.Dq login@host . 545.Pp 546The 547.Cm notify 548command is used to mail the list of files updated (and any errors 549that may have occurred) to the listed names. 550If no `@' appears in the name, the destination host is appended to 551the name 552(e.g. name1@host, name2@host, ...). 553.Pp 554The 555.Cm except 556command is used to update all of the files in the source list 557.Sy except 558for the files listed in 559.Ar name list . 560This is usually used to copy everything in a directory except certain files. 561.Pp 562The 563.Cm except_pat 564command is like the 565.Cm except 566command except that 567.Ar pattern list 568is a list of basic regular expressions 569(see 570.Xr re_format 7 571for details). 572If one of the patterns matches some string within a file name, that file will 573be ignored. 574Note that since `\e' is a quote character, it must be doubled to become 575part of the regular expression. 576Variables are expanded in 577.Ar pattern list 578but not shell file pattern matching characters. 579To include a `$', it must be escaped with `\e'. 580.Pp 581The 582.Cm special 583command is used to specify 584.Xr sh 1 585commands that are to be executed on the remote host after the file in 586.Ar name list 587is updated or installed. 588If the 589.Ar name list 590is omitted then the shell commands will be executed for every file 591updated or installed. 592.Ar string 593starts and ends with `"' and can cross multiple lines in 594.Pa distfile . 595Multiple commands to the shell should be separated by `;'. 596Commands are executed in the user's home directory on the host 597being updated. 598The 599.Cm special 600command can be used, for example, to rebuild private databases 601after a program has been updated. 602The following environment variables are set for each 603.Cm special 604command: 605.Pp 606.Bl -tag -width "BASEFILE" -offset 3n -compact 607.It Ev FILE 608The full pathname of the local file that was just updated. 609.It Ev REMFILE 610The full pathname of the remote file that was just updated. 611.It BASEFILE 612The basename of the remote file that was just updated. 613.El 614.Pp 615The 616.Cm cmdspecial 617command is similar to the 618.Cm special 619command, except it is executed only when the entire command is completed 620instead of after each file is updated. 621The list of files is placed in the 622.Ev FILES 623environment variable. 624Each file name in 625.Ev FILES 626is separated by a 627.Sq :\& 628(colon). 629.Pp 630If a hostname ends in a 631.Sq + 632(plus sign), 633then the plus 634is stripped off and NFS checks are disabled. 635This is equivalent to disabling the 636.Fl o Ar chknfs 637option just for this one host. 638.Sh MESSAGE LOGGING 639.Nm 640uses a collection of predefined message 641.Em facilities 642that each contain a list of message 643.Em types 644specifying which types of messages to send to that facility. 645The local client 646and the remote server 647each maintain their own copy 648of what types of messages to log to what facilities. 649.Pp 650The 651.Fl l 652.Ar local_logopts 653option specifies the logging options to use locally; 654.Fl L 655.Ar remote_logopts 656specifies the logging options to pass to the remote server. 657.Pp 658Logging options should be of the form: 659.Pp 660.D1 facility=types:facility=types... 661.Pp 662The valid facility names are: 663.Bl -tag -width Ds -offset indent 664.It Ic file 665Log to a file. 666To specify the file name, use the format 667.Dq file=filename=types . 668For example: 669.Pp 670.Dl file=/tmp/rdist.log=all,debug 671.It Ic notify 672Use the internal 673.Nm 674.Ic notify 675facility. 676This facility is used in conjunction with the 677.Ic notify 678keyword in a 679.Pa distfile 680to specify what messages are mailed to the 681.Ic notify 682address. 683.It Ic stdout 684Messages to standard output. 685.It Ic syslog 686Use the 687.Xr syslogd 8 688facility. 689.El 690.Pp 691.Ar types 692should be a comma separated list of message types. 693Each message type specified enables that message level. 694This is unlike the 695.Xr syslog 3 696system facility which uses an ascending order scheme. 697The following are the valid types: 698.Bl -tag -width Ds -offset indent 699.It Ic all 700All but debug messages. 701.It Ic change 702Things that change. 703This includes files that are installed or updated in some way. 704.It Ic debug 705Debugging information. 706.It Ic ferror 707Fatal errors. 708.It Ic info 709General information. 710.It Ic nerror 711Normal errors that are not fatal. 712.It Ic notice 713General info about things that change. 714This includes things like making directories which are needed in order 715to install a specific target, but which are not explicitly specified in the 716.Pa distfile . 717.It Ic warning 718Warnings about errors which are not as serious as 719.Ic nerror 720type messages. 721.El 722.Pp 723Here is a sample command line option: 724.Bd -literal -offset indent 725-l stdout=all:syslog=change,notice:file=/tmp/rdist.log=all 726.Ed 727.Pp 728This entry will set local message logging to have all but debug 729messages sent to standard output, change and notice messages will 730be sent to 731.Xr syslog 3 , 732and all messages will be written to the file 733.Pa /tmp/rdist.log . 734.Sh ENVIRONMENT 735.Bl -tag -width "TMPDIR" 736.It RSH 737Name of the default remote shell program to use. 738The default is 739.Xr ssh 1 . 740.It TMPDIR 741Name of the temporary directory to use. 742The default is 743.Pa /tmp . 744.El 745.Sh FILES 746.Bl -tag -width "$TMPDIR/rdist*XXX" -compact 747.It {d,D}istfile 748.Nm 749command file. 750.It /etc/Distfile 751System-wide 752.Nm 753command file. 754.It $TMPDIR/rdist* 755Temporary file for update lists. 756.El 757.Sh EXAMPLES 758The following is an example 759.Pa distfile : 760.Bd -literal -offset indent 761HOSTS = ( matisse root@arpa) 762 763FILES = ( /bin /lib /usr/bin /usr/games 764 /usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h} 765 /usr/lib /usr/man/man? /usr/ucb /usr/local/rdist ) 766 767EXLIB = ( Mail.rc aliases aliases.db crontab dshrc 768 sendmail.cf sendmail.hf sendmail.st uucp vfont ) 769 770${FILES} -\*(Gt ${HOSTS} 771 install -oremove,chknfs ; 772 except /usr/lib/${EXLIB} ; 773 except /usr/games/lib ; 774 special /usr/lib/sendmail "/usr/lib/sendmail -bi" ; 775 776srcs: 777/usr/src/bin -\*(Gt arpa 778 except_pat ( \e\e.o\e$ /SCCS\e$ ) ; 779 780IMAGEN = (ips dviimp catdvi) 781 782imagen: 783/usr/local/${IMAGEN} -\*(Gt arpa 784 install /usr/local/lib ; 785 notify ralph ; 786 787sendmail.cf :: stamp.cory 788 notify root@cory ; 789.Ed 790.Pp 791Using the above 792.Pa distfile : 793.Pp 794Update everything that's out of date, 795making any relevant notifications: 796.Pp 797.Dl $ rdist 798.Pp 799Update files in 800.Pa /usr/src/bin 801to host 802.Dq arpa , 803except for files with names ending 804.Dq .o 805or 806.Dq /SCCS : 807.Pp 808.Dl $ rdist srcs 809.Pp 810Update 811.Pa sendmail.cf 812if it's older than timestamp file 813.Pa stamp.cory , 814notifying root@cory if an update has happened: 815.Pp 816.Dl $ rdist sendmail.cf 817.Sh SEE ALSO 818.Xr rdistd 1 , 819.Xr rsh 1 , 820.Xr sh 1 , 821.Xr ssh 1 , 822.Xr re_format 7 , 823.Xr daily 8 , 824.Xr syslogd 8 825.Sh STANDARDS 826The options 827.Op Fl bhiNOqRrsvwxy 828are still recognized for backwards compatibility. 829.Sh CAVEATS 830If the basename of a file 831(the last component in the pathname) 832is 833.Sq .\& , 834.Nm 835assumes the remote (destination) name is a directory. 836That is, 837.Pa /tmp/.\& 838means that 839.Pa /tmp 840should be a directory on the remote host. 841.Sh BUGS 842Source files must reside on the local host where 843.Nm 844is executed. 845.Pp 846Variable expansion only works for name lists; 847there should be a general macro facility. 848.Pp 849.Nm 850aborts on files which have a negative mtime (before Jan 1, 1970). 851.Pp 852If a hardlinked file is listed more than once in the same target, 853.Nm 854will report missing links. 855Only one instance of a link should be listed in each target. 856.Pp 857The 858.Sy defowner , 859.Sy defgroup , 860and 861.Sy updateperm 862options are extensions to the 6.1.0 protocol and will not work with earlier 863versions of rdist 6. 864