该文档描述位于 /usr/bin/rdist 文件中的早期 AIX rdist 命令和与 rdistd 守护程序一起使用的新的 /usr/sbin/rdist 命令。
远程文件分布客户机程序
rdist [ -n ] [ -q ] [ -b ] [ -D ] [ -R ] [ -h ] [ -i ] [ -v ] [ -w ] [ -y ] [ -f FileName ] [ -d Argument=Value ] [ -m Host ] ... [ Name ] ...
rdist [ -n ] [ -q ] [ -b ] [ -D ] [ -R ] [ -h ] [ -i ] [ -v ] [ -w ] [ -y ] -c Name ... [ Login@ ] Host [ :Destination ]
rdist 命令维护多个主机上的相同文件副本。rdist 命令保存文件的所有者、组、模式和修改时间,也可能更新正在运行的程序。rdist 命令能接收来自下列来源的导向信息:
如果不使用 -f 标志,rdist 命令会在 $HOME目录中查找 distfile 文件。如果找不到 distfile 文件,就会查找Distfile 文件。
由 Name 参数指定的值作为一个要更新的文件名或一个要执行的子命令读入。如果在命令行中不为 Name 参数指定值,rdist 命令会更新发布文件中列出的所有文件和目录。如果为 Name 参数指定-(负号),rdist 命令使用标准输入。如果由 Name 参数指定的文件名与子命令的名称相同,rdist 命令把 Name 参数解释为一个子命令。
rdist 命令需要在每个主机上配置 .rhosts 文件。详细信息请参阅 ".rhosts File Format for TCP/IP"AIX 5L Version 5.2 Files Reference
发布文件指定要复制的文件,为发布指定目标主机,和当使用 rdist 命令发布更新文件时执行的操作。通常,rdist 命令在 $HOME 目录中使用 distfile 文件。如果使用 -f 标志可以指定一个不同的文件。
每个发布文件的记录都有如下格式:
标号是可选的,并用于为部分更新标识一个子命令。
VariableName | 标识在发布文件中使用的变量。 |
NameList | 指定一个文件、目录、主机或子命令的列表。 |
SourceList | 在本地主机上为 rdist 命令指定文件和目录来作为发布的主副本使用。 |
DestinationList | 表示接收文件副本的主机。 |
SubcommandList | 列出要执行的发布文件子命令。 |
rdist 命令把换行字符、制表符和空格当作分隔符处理。用于扩展的发布文件变量以一个 $(美元符号)开头,后面接一个单独的字符或一个以 {} (大括号) 括起来的名称。注释以 #(磅号)开头并以一个换行字符结尾。
发布文件源和目标列表包含零个或多个用空格分隔的名称,具有如下格式:
[Name1] [Name2] [Name3] ...
rdist 命令在本地主机上标识并扩展如下 shell 元字符,其方式与 csh 命令相同。
为了防止这些字符被扩展,在它们之前加上一个 \ (反斜杠)。rdist 命令也扩展 ~ (代字号),其方法与 csh 命令相同,但在本地和目标主机上分别进行。
用于 shell 的多个命令必须用 ;(分号)分隔。命令在正在更新的主机上的用户主目录中执行。special 子命令用于更新程序后重建专用的数据库。
发布文件子命令列表可以包含零个或多个下列子命令:
此命令返回下列出口值:
0 | 成功完成。 |
>0 | 指定错误发生。 |
HOSTS =( matisse root@arpa )
此处 HOSTS 变量被定义为 matisse 和 root@arpa。rdist 命令更新在 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 )
此处 FILES 值定义为为 SourceList 记录使用的文件。
EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont)
此处 EXLIB 值被定义为一个文件列表以从更新进程中排除。
/usr/src/bin ->arpa except_pat(\e\e.o\e ${<namelist> /SCCS\e ${<namelist>}
或
/usr/src/bin ->arpa except_pat(\\.o\e ${<namelist> /SCCS\e ${<namelist>}
/usr/src/bin ->arpa except_pat(\\.o\$ /SCCS\$
${FILES} ->${HOSTS} install -R except /usr/lib/${EXLIB} ; except /usr/games/lib ; special /usr/sbin/sendmail "/usr/sbin/sendmail.bz" ;
行的 [Label:] 记录是可选的,并不在此处出现。$(美元标记)和 {} (大括号) 导致文件名 FILES, HOSTS 和 EXLIB 扩展成前面的示例为它们指明的列表。示例的余下部分包含子命令列表。
srcsL: /usr/src/bin -> arpa except_pat (\e\e.o\e$ /SCCS\e$ ) ;
标号是 srcsL: 并可用于为更新而标识该记录。/usr/src/bin 文件是被复制的源而主机 arpa 是复制的目的地。第三行包含一个来自子命令列表的子命令。
${FILES} :: stamp.cory notify root@cory
$(美元符号)和 {} (大括号) 引起由 FILES 指定的名称扩展成为它指明的列表。时间戳记文件是 stamp.cory。最后一行是一个来自子命令列表的子命令。
/usr/bin/rdist | 包含 rdist 命令。 |
$HOME/distfile | 包含一个子命令列表,此列表由 rdist 命令读取。 |
/tmp/rdist | 包含一个更新列表。这是一个临时文件。 |
.rhosts 文件格式。
《AIX 5L V5.2 系统管理指南:通信与网络》中的『网络概述』。
该文档描述位于 /usr/bin/rdist 文件中的早期AIX rdist 命令和与新的 rdistd 守护程序一起使用的 new /usr/sbin/rdist 命令。
用于远程发布文件客户程序。
/usr/sbin/rdist [ -Fn ] [ -A num ] [ -a num ] [ -d var=value] [ -l < local logopts> ] [ -L <remote logopts> ] [ -f distfile] [ -M maxproc -m host ] [ -o distops ] [ -t timeout ] [ -p <rdist-path> ] [ -P <transport-path> ] [ name ... ]
/usr/sbin/rdist -Fn -c name ... [ login@ ] host [ :dest ]
/usr/sbin/rdist -Server
/usr/sbin/rdist -V
rdist 是一个程序,用于维护存在于多个主机上的文件的相同副本。它保存文件的所有者、组、方式和修改时间,并能更新正在运行的程序。rdist 命令能接收来自下列来源的导向信息:
( filename ... ) -> [user@]host install [dest name] ;
如果没有指定 name 参数,rdist 将会更新全部列在 distfile 中的文件和目录。否则,这个参数将会是要更新的文件名或一个要执行的命令的标号。如果标号和文件名冲突,它假定为一个标号。这些可以一起使用以更新使用特定命令的特定文件。
-Server 选项为老版本的 rdist 提供了向后兼容性,老版本用这个选项把 rdist 放置到服务器模式。如果 rdist 以 -Server 命令行选项启动,它试图运行老版本的 rdist。这个选项只有在旧 rdist 存在于 /usr/bin/rdist 时才会有效。
rdist 使用任意的传输程序访问每个目标主机。这个传输程序可在命令行中由 -P 标志指定。如果不使用 -P 标志,rsh 就会被作为传输程序。 如果使用 rsh 方法,目标主机是字符串 localhost 并且远程用户名和本地用户名相同,rdist 会试图运行下列命令:
/bin/sh -c rdistd -S
否则 rdist 会运行下列命令:
rsh host -l remuser rdistd -S
在上面的示例中,host 参数是目标主机名,remuser 是以连接作为用户的名称,并且 rdistd 是 rdist 目标主机上的服务器命令。
传输程序必须与上面的对于 rsh 的语法相一致。否则,传输程序应该由 shell 脚本包装,此 shell 脚本理解这个命令行语法。
在每个目标主机上 rdist 会试图运行下列命令:
rdistd -S
或
<rdistd path> -S
在上面的示例中,指定了 -p 标志。 如果没有包含 -p 标志,或者 <rdistd path> 是一个简单文件名,rdistd 或 <rdistd path> 必须在远程(目标)主机上运行 rdist 的用户的 PATH 中存在。
rdist 命令使用下列环境变量:
TMPDIR | 要使用的临时目录名称。缺省是 /tmp。 |
-A num | 只要文件系统中存在最小数目的空闲文件(inodes),就更新或安装文件。 |
-a num | 只要文件系统中存在最小的可用空间,就更新或安装文件。 |
-d var = value | 指定 value 给 var 变量。这个选项用于定义或覆盖 distfile 中的变量定义。Value 可以是空字符串、名称或一个由圆括号括起来并由制表符和(或)空格分隔的名称列表。 |
-F | 相继更新全部客户程序而不全派生子进程。 |
-f distfile | 用 distfile 作为发布文件。如果 distfile 被指定为 -,从标准输入读取。 |
-l logopts | 设置本地记录选项。参阅 Message Logging 部分可以看到关于 logopts 语法的更多信息。 |
-L logopts | 设置远程记录选项。logopts 与本地记录相同,那些被传递给远程服务器(rdistd)的值除外。请参阅 Message Logging 部分可以看到关于 logopts语法的更多信息。 |
-M num | 限定同时运行的子 rdist 进程的最大数目为 num。缺省值是 4。 |
-m machine | 限定给定机器的文件的更新。可以给定多个 -m 参数以限定一部分主机的更新,这些主机在 distfile 中列出。 |
-n | 显示但不执行命令。使用 -n 标志调试 distfile。 |
-o distopts | 指定要启用的 dist 选项。distopts 是下面列出的选项的逗号分隔列表。distopts 的有效值是:
|
-o distopts | (dist 选项, 接上):
|
-p <rdist-path> | 在目标主机上的给定路径中搜索 rdistd 服务器。 |
-P <rdist-path> | 使用如 transport-path 中给定的传输程序。transport-path 可以是一个冒号分隔的可能路径名列表。在这种情况下,使用存在路径的第一个组成部分。 |
-t timeout | 设置 timeout 周期(秒)以等待来自远程 rdist 服务器的响应。缺省值是 900 秒。 |
-V | 打印版本信息并退出。 |
rdist 命令提供一套消息设备,每个设备包含一个消息类型列表以指定发送给这个设备哪种类型的消息。每个本地客户机 (rdist)和远程服务器(rdistd) 都维护单独的关于什么类型的消息记录到什么设备的副本。
-l logopts 标志指定在本地客户机上使用什么记录选项。-L logopts 标志指定传递给远程 rdistd 服务器什么记录选项。
logopts 应该有如下形式:
facility=types:facility= types...
有效的设备名如下:
types 是一个消息类型的逗号分隔列表。每个指定的消息类型启用消息级别。这不同于 syslog 系统设备,它使用升序方案。下列是有效的类型:
发布文件指定要复制的文件,为发布指定目标主机,和当使用 rdist 命令发布更新文件时执行的操作。
每个发布文件的记录都有如下格式:
VariableName = NameList | 定义在发布文件(SourceList, DestinationList 或 SubcommandList)其它记录中使用的变量。 |
[Label:] SourceList -> DestinationList SubcommandList | 引导 rdist 命令发布在 SourceList 变量中命名的文件到主机,主机在 DestinationList 变量中命名。发布文件命令执行其它的功能。 |
[Label:] SourceList :: TimeStampFile SubcommandList | 引导 rdist 命令以更新自给定的日期后改变了的文件。发布文件子命令执行其它功能。如果文件比时间戳记文件新,那么更新每个用 SourceList 变量指定的文件。 |
标号是可选的。它们用于为部分更新标识命令。
VariableName | 标识在发布文件中使用的变量。 |
NameList | 指定一个文件,目录,主机或子命令的列表。 |
SourceList | 在本地主机上为 rdist 命令指定文件和目录作为发布的主副本使用。 |
DestinationList | 表示接收文件副本的主机。 |
SubcommandList | 列出要执行的发布文件子命令。 |
rdist 命令把换行字符,制表符和空格当作分隔符处理。用于扩展的发布文件变量以一个美元符号开头,后面接一个单独的字符或一个以大括号括起来的名称。 注释以英镑符号开头,以一个换行符结束。
发布文件源和目标列表包含零个或多个用空格分隔的名称,具有如下格式:
[Name1] [Name2] [Name3] ...
rdist 命令在本地主机上标识和扩展下列 shell 元字符,其方式与 csh 命令相同。
为防止扩展这些字符,在它们之前加上一个反斜杠。 rdist 命令也扩展代字号,其方式与 csh 命令相同,但在本地和目标主机上分别进行。当 -o whole 选项与一个以代字号开头的文件名一起使用时,除主目录之外的所有东西都会被附加到目标名称。对其余的文件名称,不以正斜杠或代字号开头的文件名使用目标用户的主目录作为根目录。
用于 shell 的多个命令需用分号隔开。命令在正在更新的主机上的用户主目录中执行。程序更新后,特定的子命令可被用于重建专用的数据库。
发布文件子命令列表可以包含零个或多个下列子命令:
install Options[OptionalDestName]; | 复制过期的文件和目录。
rdist 命令复制每个源文件或目录到每个目标列表中的主机上。由Options 变量指定的有效选项是 rdist 命令标志 -b, -h, -i, -R, -v, -w,
和 -y。这选项仅用于由 SourceList 变量指定的文件。当使用 -R 标志时,如果在主机上没有相应的文件名称,非空目录会被除去。OptionalDestName 参数重命名文件。
如果该子命令没有出现在子命令列表中,或者目标名称没有被指定,将会使用源文件名。如果在远程主机上不存在路径名中的目录,就创建它们。在目标主机上使用的登录名称与本地主机上的相同,除非目标名称具有格式: login@host。 |
notify NameList; | 发送邮件更新的文件列表和可能产生的任何错误到所列表名(NameList 参数)。如果没有 @ (符号 "@") 出现在名称中,目标主机追加给名称 (name@host)。 |
except NameList; | 导致 rdist 命令更新所有由 SourceList 记录指定的文件,那些由 NameList 变量指定的文件除外。 |
except_pat NameList; | 防止 rdist 命令更新任何包含字符串与 NameList 变量指定的列表中的成员相匹配的文件。 |
special NameList "String"; | 指定在远程主机上执行的 shell 命令( "String" 变量),在此之前,更新或安装由 NameList 变量指定的文件。 如果 NameList 变量被省略,对每个更新或安装的文件执行 shell。变量 FILE 在 rdist 命令执行 "String" 变量之前被设置为当前文件名,变量 REMFILE 包含刚被更新的远程文件的全路径名,变量 BASEFILE 包含刚被更新的远程文件的 basename 。"String" 值必须用双引号括起来,并能在发布文件中跨越多行。 |
cmdspecial NameList "String"; | cmdspecial 命令与 special 命令相似,只有当全部命令执行完毕时而不是更新每个文件后执行此命令这点除外。shell 变量 FILES 包含文件列表。每个在 FILES shell 变量中的文件名用一个冒号隔开。 |
如果主机名以一个加号结尾,NFS 检查禁用。这相当于只对此主机禁用 -o chknfs 选项。
此命令返回下列出口值:
0 | 成功完成。 |
>0 | 一个错误发生。 |
HOSTS =( matisse root@arpa )
在上面的示例中,HOSTS 变量被定义为 matisse 和 root@arpa。rdist 命令更新在 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 )
在上面的示例中,FILES 值被定义为用于 SourceList 记录的文件。
EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont)
在上面的示例中,EXLIB 值被定义为一个从更新进程中移除的文件列表。
/usr/src/bin ->arpa except_pat(\e\e.o\e ${<namelist> /SCCS\e ${<namelist>}
或
/usr/src/bin ->arpa except_pat(\\.o\e ${<namelist> /SCCS\e ${<namelist>}
/usr/src/bin ->arpa except_pat(\\.o\$ /SCCS\$
${FILES} ->${HOSTS} install -R except /usr/lib/${EXLIB} ; except /usr/games/lib ; special /usr/sbin/sendmail "/usr/sbin/sendmail.bz" ;
行 [Label:] 记录是可选的,并不在此显示。美元符号和大括弧会使文件名 FILES、 HOSTS 和 EXLIB 扩展成前面示例中为它们指明的列表。示例的余下部分包含子命令列表。
srcsL: /usr/src/bin -> arpa except_pat (\e\e.o\e$ /SCCS\e$ ) ;
标号是 srcsL: ,并可用于为更新而标识该记录。 /usr/src/bin 文件是被复制的源,主机 arpa 是复制的目的地。第三行包含一个来自子命令列表的子命令。
${FILES} :: stamp.cory notify root@cory
美元符号和大括号引起由 FILES 指定的名称扩展成为它指明的列表。时间戳记文件是 stamp.cory。最后一行是一个来自子命令列表的子命令。
/usr/sbin/rdist | 版本 6.1.5 中包含 rdist 命令。 |
distfile | 包含输入命令。 |
$ TMPDIR/rdist* | 更新列表的临时文件。 |
csh 命令、rcmd() 系统调用、rdistd 命令、rsh 命令、sh 命令、stat() 系统调用。