本章提供有关使用 UUCP 的参考信息。具体包含以下主题:
/etc/uucp/Systems 文件包含 uucico 守护进程与远程计算机建立通信链路所需的信息。/etc/uucp/Systems 是配置 UUCP 时需要编辑的第一个文件。
Systems 文件中的每个项都代表一台与您的主机进行通信的远程计算机。某台特定主机可以对应多个项。附加的项代表按顺序尝试的备用通信路径。此外,缺省情况下 UUCP 阻止 /etc/uucp/Systems 中未包含的任何计算机登录您的主机。
可以使用 Sysfiles 文件定义多个要用作 Systems 文件的文件。有关 Sysfiles 的说明,请参见UUCP /etc/uucp/Sysfiles 文件。
System-Name Time Type Speed Phone Chat Script |
Arabian Any ACUEC 38400 111222 ogin: Puucp ssword:beledi |
对应系统名称字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的系统名称字段。
对应时间字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的时间字段。
对应类型字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的类型字段。
对应速度字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的速度字段。
对应电话字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的电话字段。
对应聊天脚本字段的项。有关更多信息,请参见/etc/uucp/Systems 文件中的聊天脚本字段。
此字段包含远程计算机的节点名。在 TCP/IP 网络上,此名称可以是计算机的主机名,也可以是特别通过 /etc/uucp/Sysname 文件为 UUCP 通信创建的名称。请参见UUCP /etc/uucp/Systems 文件。在示例 26–1 中,系统名称字段包含代表远程主机 Arabian 的项。
此字段指定可呼叫远程计算机的周日期和时间。时间字段的格式如下:
daytime[;retry]
对应于各个周日期。
对应于任意工作日。
对应于任意一天。
您的主机永远不会启动对远程计算机的呼叫。呼叫必须由远程计算机启动。随后,您的主机工作在被动模式下。
示例 26–1 中的时间字段为 Any,它指示可以随时呼叫主机 Arabian。
time 部分应该是以 24 小时表示法指定的时间范围,例如 0800-1230 表示从 8:30 a.m. 到 12:30 p.m.。如果未指定 time 部分,则假设允许在一天的任何时间执行呼叫。
允许跨 0000 的时间范围。例如,0800-0600 表示允许在 6 a.m. 到 8 a.m. 之外的任何时间执行呼叫。
可以在 retry 子字段中指定尝试失败后重试之前的最短时间(以分钟为单位)。缺省等待时间为 60 分钟。该子字段分隔符为分号 (;)。例如,Any;9 解释为可随时执行呼叫,但出现故障后至少要等待 9 分钟才可重试。
如果未指定 retry 项,则会使用指数补偿算法。这意味着 UUCP 将以缺省等待时间开始,并且该等待时间会随失败尝试次数的增加而不断增加。例如,假设初始重试时间为 5 分钟。如果没有任何响应,则下一次重试将在 10 分钟后进行。接下来的重试将在 20 分钟后进行,依此类推直至达到最长重试时间 23 小时为止。如果指定了 retry,则指定的值始终为重试时间。否则,将使用补偿算法。
此字段包含与远程计算机建立通信链路所应使用的设备类型。此字段中使用的关键字应与 Devices 文件项的第一个字段匹配。
Arabian Any ACUEC, g 38400 1112222 ogin: Puucp ssword:beledi |
通过在类型字段中添加协议,可以定义与系统联系时采用的协议。上例显示如何将协议 g 附加到设备类型 ACUEC 中。有关协议的信息,请参见/etc/uucp/Devices 文件中的协议定义。
此字段(也称为类字段)指定建立通信链路时所使用设备的传输速度。UUCP 速度字段可以包含字母和速度(如 C1200 或 D1200)以区分拨号器的类。请参阅/etc/uucp/Devices 文件中的类字段。
某些设备可以在任何速度下使用,因此可以使用关键字 Any。此字段必须与关联的 Devices 文件项中的类字段匹配。
eagle Any ACU, g D1200 NY3251 ogin: nuucp ssword:Oakgrass |
如果不需要为此字段指定信息,请使用短横线 (-) 作为此字段的占位符。
使用此字段,可以指定供自动拨号装置(称为端口选定器)使用的远程计算机的电话号码(称为令牌)。电话号码包含可选的字母缩写和数字部分。如果使用缩写,则必须在 Dialcodes 文件中列出缩写。
nubian Any ACU 2400 NY555-1212 ogin: Puucp ssword:Passuan eagle Any ACU, g D1200 NY=3251 ogin: nuucp ssword:Oakgrass |
在电话字段中,等号 (=) 指示 ACU 等待二次拨号音响起后再拨打其余的数字。字符串中的短横线 (-) 指示 ACU 暂停四秒后再拨打下一个数字。
如果您的计算机与端口选定器相连,您便可以访问与该选定器连接的其他计算机。这些远程计算机的 Systems 文件项不应在电话字段中包含电话号码。此字段应包含将传递给交换机的令牌。这样,端口选定器即可了解主机要与其进行通信的远程计算机,通常只需了解系统名称。关联的 Devices 文件项的结尾应该有 \D,从而确保不使用 Dialcodes 文件来转换此字段。
此字段(也称为登录字段)包含称为聊天脚本的字符串。聊天脚本包含本地和远程计算机必须在其初始会话中传递给对方的字符。聊天脚本具有以下格式:
expect send [expect send] ....
expect 表示本地主机为启动会话而期待从远程主机接收的字符串。send 是本地主机在从远程主机接收 expect 字符串后发送的字符串。聊天脚本可以具有多个 expect-send(期待发送)序列。
本地主机期待从远程计算机接收的登录提示
本地主机为进行登录而向远程计算机发送的登录名
本地主机期待从远程计算机接收的口令提示
本地主机向远程计算机发送的口令
expect[-send-expect]...
如果未成功读取前一个 expect,则会发送 -send。-send 后的 -expect 是下一个期待字符串。
例如,如果字符串为 login-login,则本地主机上的 UUCP 将期待 login。如果 UUCP 从远程计算机接收到 login,则 UUCP 将转至下一个字段。如果 UUCP 未收到 login,UUCP 将发送回车,然后再次查找 login。如果本地计算机最初不期待任何字符,请在 expect 字段中使用字符 ""(代表 NULL 字符串)。除非 send 字符串以 \c 结束,否则所有 send 字段发送时都将附加一个回车。
以下是使用 expect-send 字符串的 Systems 文件项的示例:
sonora Any ACUEC 9600 2223333 "" \r \r ogin:-BREAK-ogin: Puucpx ssword:xyzzy |
本示例指示本地主机上的 UUCP 发送两个回车并等待 ogin:(对应于 Login:)。如果未收到 ogin:,则发送 BREAK。收到 ogin: 时,将发送登录名 Puucpx。收到 ssword:(对应于 Password:)时,将发送口令 xyzzy。
表 26–1 Systems 文件的聊天脚本字段中使用的转义符
转义符 |
含义 |
---|---|
\b |
发送或期待退格字符。 |
\c |
如果位于字符串结尾,则取消通常发送的回车。否则应忽略。 |
\d |
延迟 1 至 3 秒,然后再发送更多字符。 |
\E |
启动回显检查。从此刻开始,无论何时传输字符,UUCP 都会等待接收到字符后才继续执行检查。 |
\e |
取消回显检查。 |
\H |
忽略某一挂起。对回拨调制解调器使用此选项。 |
\K |
发送 BREAK 字符。 |
\M |
启用 CLOCAL 标志。 |
\m |
禁用 CLOCAL 标志。 |
\n |
发送或期待换行符。 |
\N |
发送 NULL 字符 (ASCII NUL)。 |
\p |
暂停大约 1/4 至 1/2 秒。 |
\r |
发送或期待回车。 |
\s |
发送或期待空格字符。 |
\t |
发送或期待制表符。 |
EOT |
发送 EOT,随后带有两次换行。 |
BREAK |
发送 BREAK 字符。 |
\ddd |
发送或期待八进制数字 (ddd) 表示的字符。 |
某些公司设置了拨入服务器以处理来自远程计算机的呼叫。例如,您的公司可能已具有配备了回拨调制解调器的拨入服务器,员工可以从其家用计算机对该服务器进行呼叫。拨入服务器识别远程计算机后,便会断开与远程计算机的链路,然后再回叫远程计算机。随后将重新建立通信链路。
在 Systems 文件聊天脚本中应进行回拨的位置使用 \H 选项可以简化回拨。在希望拨入服务器挂起的位置包含 \H(作为期待字符串的一部分)。
例如,假设呼叫拨入服务器的聊天脚本包含以下字符串:
INITIATED\Hogin: |
本地计算机上的 UUCP 拨号设备期待从拨入服务器接收字符 INITIATED。与字符 INITIATED 匹配后,拨号设备就会刷新它所接收的所有后续字符,直到拨入服务器挂起为止。随后,本地拨号设备将等待,直到从拨入服务器接收到期待字符串的下一部分(即字符 ogin:)为止。接收到 ogin: 后,拨号设备随后会继续处理聊天脚本。
字符串不需要直接放在 \H 之前或之后,如前面的样例字符串所示。
也可以使用伪发送 STTY=value 字符串设置调制解调器特性。例如,STTY=crtscts 可启用硬件流控制。STTY 接受所有的 stty 模式。有关完整的详细信息,请参见 stty(1) 和 termio(7I) 手册页。
以下示例在 Systems 文件项中启用了硬件流控制:
unix Any ACU 2400 12015551212 "" \r ogin: Puucp ssword:Passuan "" \ STTY=crtscts |
在某些情况下,由于您正在呼叫的系统会检查端口奇偶校验并删除错误的行,因此您必须重置奇偶校验。 expect-send(期待发送)对句 "" P_ZERO 将高序位(奇偶校验位)设置为 0。请参见以下示例中的期待发送对句:
unix Any ACU 2400 12015551212 "" P_ZERO "" \r ogin: Puucp ssword:Passuan |
以下是可跟在 expect-send(期待发送)对句 "" P_ZERO 后的奇偶校验对句:
将奇偶校验设置为偶校验(缺省值)
将奇偶校验设置为奇校验
将奇偶校验位设置为 1
可以将这些奇偶校验对句插入聊天脚本中的任何位置。奇偶校验对句适用于 expect-send(期待发送)对句 "" P_ZERO 后的聊天脚本中的所有信息。奇偶校验对句还可以用在 Dialers 文件的项中。以下示例包括奇偶校验对句 "" P_ONE:
unix Any ACU 2400 12015551212 "" P_ZERO "" P_ONE "" \r ogin: Puucp ssword:Passuan |
/etc/uucp/Devices 文件包含可用于与远程计算机建立链路的所有设备的信息。这些设备包括 ACU(包括高速调制解调器)、直接链路和网络连接。
/etc/uucp/Devices 文件中的项具有以下语法:
Type Line Line2 Class Dialer-Token-Pairs |
以下是 Devices 文件中对应于与端口 A 连接且以 38,400 bps 速度运行的 U.S. Robotics V.32bis 调制解调器的项。
ACUEC cua/a - 38400 usrv32bis-ec |
对应类型字段的项。有关更多信息,请参见/etc/uucp/Devices 文件中的类型字段。
对应线路字段的项。有关更多信息,请参见/etc/uucp/Devices 文件中的线路字段。
对应线路 2 字段的项。有关更多信息,请参见/etc/uucp/Devices 文件中的线路 2 字段。
对应类字段的项。有关更多信息,请参见/etc/uucp/Devices 文件中的类字段。
对应拨号器-令牌对字段的项。有关更多信息,请参见/etc/uucp/Devices 文件中的拨号器-令牌对字段。
此字段说明设备建立的链路类型。UUCP 类型字段可以包含下面各节中介绍的某个关键字。
Direct 关键字主要出现在 cu 连接的项中。此关键字指明链路是连接其他计算机或端口选定器的直接链路。请为通过 cu 的 -l 选项引用的每一行单独创建一项。
ACU 关键字指明连接远程计算机的链路(无论通过 cu、UUCP、asppp 还是 Solaris PPP 4.0)是通过调制解调器建立的。可以将此调制解调器直接连接到您的计算机,也可以通过端口选定器间接连接到您的计算机。
端口选定器是类型字段中的变量,由端口选定器的名称替换。端口选定器是连接到网络的设备,用于提示输入呼叫调制解调器的名称,随后授予访问权限。文件 /etc/uucp/Dialers 包含仅用于 micom 和 develcon 端口选定器的调用程序脚本。可以将您自己的端口选定器项添加到 Dialers 文件中。有关更多信息,请参见UUCP /etc/uucp/Dialers 文件。
此变量由类型字段中的计算机名称替换,它指明链路是连接此特定计算机的直接链路。可使用此命名方案将 Devices 项中的行与 /etc/uucp/Systems 中用于计算机 System-Name 的项进行关联。
示例 26–5 显示 /etc/uucp/Devices 中的字段与 /etc/uucp/Systems 中的字段的比较。Devices 文件的类型字段中使用的关键字要与 Systems 文件项的第三个字段匹配。在 Devices 文件中,类型字段具有 ACUEC 项,指明本例中的自动呼叫装置为 V.32bis 调制解调器。此值与 Systems 文件中的类型字段(也包含 ACUEC 项)匹配。有关更多信息,请参见UUCP /etc/uucp/Systems 文件。
以下是 Devices 文件中的项的示例。
ACUEC cua/a - 38400 usrv32bis-ec |
以下是 Systems 文件中的项的示例。
Arabian Any ACUEC 38400 111222 ogin: Puucp ssword:beledi |
此字段包含与 Devices 项关联的线路(称为端口)的设备名称。如果与特定项关联的调制解调器已连接到 /dev/cua/a 设备(串行端口 A),则输入此字段的名称将为 cua/a。在线路字段中可以使用可选调制解调器控制标志 M 来指明设备应该处于打开状态,而无需等待载体。例如:
cua/a,M |
此字段为占位符。请始终使用连字符 (-)。 801 型拨号器(在 Solaris OS 中不受支持)使用线路 2 字段。非 801 拨号器通常不使用此配置,但仍要求在此字段中使用连字符。
如果在类型字段中使用关键字 ACU 或 Direct,则类字段包含设备的速度。不过,类字段可以包含字母和速度(如 C1200 或 D1200)以区分拨号器的类,如 Centrex 或 Dimension PBX。
由于许多大型办公室具有多种类型的电话网络,因此这种区分是必要的。一个网络可能专供内部办公室通信,而另一个网络用于处理外部通信。在这种情况下,必须区分内部通信应该使用的线路和外部通信应该使用的线路。
Devices 文件的类字段中使用的关键字应与 Systems 文件的速度字段匹配。
ACU cua/a - D2400 hayes |
某些设备可以在任何速度下使用,因此可以在类字段中使用关键字 Any。如果使用 Any,则线路可以满足 Systems 文件的速度字段中请求的任何速度。如果此字段为 Any 且 Systems 文件速度字段也为 Any,则缺省速度为 2400 bps。
拨号器-令牌对 (Dialer-Token-Pairs, DTP) 字段包含拨号器的名称及传递该名称的令牌。DTP 字段具有以下语法:
dialer token [dialer token]
dialer 部分可以是调制解调器和端口监视器的名称,也可以是直接链路设备的 direct 或 uudirect。您可以具有任意数目的拨号器-令牌对。如果 dialer 部分不存在,则可以从 Systems 文件的相关项中获取它。token 部分可以紧接在 dialer 部分之后提供。
最后一个拨号器-令牌对可能不存在,具体取决于关联的拨号器。在大多数情况下,最后一对仅包含 dialer 部分。token 部分可以从关联的 Systems 文件项的电话字段中获取。
dialer 部分中的有效项可以在 Dialers 文件中定义,也可以是几种特殊拨号器类型之一。这些特殊的拨号器类型被编译为软件,因此即使 Dialers 文件中不包含相应的项,也可以使用这些特殊的拨号器类型。以下列出了特殊的拨号器类型。
TCP/IP 网络
传输级别接口网络(不含 STREAMS)
传输级别接口网络(含 STREAMS)
有关更多信息,请参见/etc/uucp/Devices 文件中的协议定义。
可以采用四种不同的方式构建 DTP 字段,具体视与项关联的设备而定。
以下是构建 DTP 字段的第一种方式:
直接连接的调制解调器-如果调制解调器直接连接至计算机上的端口,则关联的 Devices 文件项的 DTP 字段只有一对,通常是调制解调器的名称。此名称用于将特定的 Devices 文件项与 Dialers 文件中的项进行匹配。因此,拨号器字段必须与 Dialers 文件项的第一个字段匹配。
Dialers hayes =,-, "" \\dA\pTE1V1X1Q0S2=255S12=255\r\c \EATDT\T\r\c CONNECT |
请注意,Devices 文件项的 DTP 字段中仅存在 dialer 部分 (hayes)。这意味着将被传递给拨号器的 token(在本例中为电话号码)来自 Systems 文件项的电话字段。(\T 被隐含了,如示例 26–9 所示。)
以下是构建 DTP 字段的第二种和第三种方式:
直接链路-对于与特定计算机的直接链路,关联项的 DTP 字段包含关键字 direct。这种情况对于两类直接链路项 Direct 和 System-Name 都适用。 请参阅/etc/uucp/Devices 文件中的类型字段。
同一端口选定器上的计算机-如果要与之通信的计算机与您的计算机位于同一个端口选定器交换机上,则您的计算机必须首先访问该交换机。然后,该交换机将与其他计算机进行连接。这类项只具有一对。dialer 部分用于匹配 Dialers 文件项。
Dialers develcon ,"" "" \pr\ps\c est:\007 \E\D\e \007 |
如上所示,token 部分被保留为空。这指示从 Systems 文件中检索令牌。此计算机的 Systems 文件项的电话字段中包含令牌,电话字段通常是为计算机的电话号码而保留的。有关详细信息,请参阅 UUCP /etc/uucp/Systems 文件。此类 DTP 包含转义符 (\D),可确保电话字段的内容不被解释为有效的 Dialcodes 文件项。
以下是构建 DTP 字段的第四种方式:
连接至端口选定器的调制解调器-如果高速调制解调器连接至端口选定器,则计算机必须首先访问端口选定器交换机。该交换机将与调制解调器进行连接。此类项需要两个拨号器-令牌对。每一对的 dialer 部分(项的第五个和第七个字段)用于匹配 Dialers 文件项,如下所示。
develcon "" "" \pr\ps\c est:\007 \E\D\e \007 ventel =&-% t"" \r\p\r\c $ <K\T%\r>\c ONLINE! |
在第一对中,develcon 是拨号器,vent 是传递给 Develcon 交换机的令牌,用于告知该交换机与您的计算机连接的设备,如 Ventel 调制解调器。由于可以采用不同的方式来设置每个交换机,因此该令牌对于每个端口选定器都是唯一的。连接 Ventel 调制解调器后,即可访问第二对。Ventel 是拨号器,令牌来自 Systems 文件。
DTP 字段中可以出现两个转义符:
\T-指示应使用 /etc/uucp/Dialcodes 文件来转换电话(token) 字段。此转义符通常位于与调制解调器(如 Hayes 和 U.S. Robotics)关联的每个调用程序脚本的 /etc/uucp/Dialers 文件中。因此,访问调用程序脚本之前不会进行转换。
\D-指示不应使用 /etc/uucp/Dialcodes 文件来转换电话(token) 字段。如果未在 Devices 项的结尾指定转义符,则假设具有 \D(缺省值)。\D 还可以在包含与网络交换机 develcon 和 micom 关联的项的 /etc/uucp/Dialers 文件中使用。
可以定义 /etc/uucp/Devices 中的每个设备使用的协议。由于可以使用缺省协议,也可以使用正在调用的特定系统定义协议,因此该规范通常是不必要的。有关详细信息,请参阅 UUCP /etc/uucp/Systems 文件。如果确实要指定协议,则必须使用以下格式:
Type,Protocol [parameters] |
例如,可以使用 TCP,te 来指定 TCP/IP 协议。
下表显示了 Devices 文件的可用协议。
表 26–2 /etc/uucp/Devices 中使用的协议
协议 |
说明 |
---|---|
此协议通常用于通过 TCP/IP 和其他可靠连接的传输。t 采用无错传输。 |
|
此协议是 UUCP 的固有协议。g 速度较慢,但非常可靠且适用于通过噪音较大的电话线的传输。 |
|
此协议采用通过面向消息的无错通道进行的传输,面向消息的通道与面向字节流的通道(如 TCP/IP)相反。 |
|
此协议用于通过 X.25 连接的传输。f 依赖于数据流的流控制,且对于通过(几乎)可保证无错的链路(特别是 X.25/PAD 链路)进行传输非常有意义。只能针对整个文件执行校验和。如果传输失败,接收方可以请求重新传输。 |
以下示例显示了设备项的协议名称:
TCP,te - - Any TCP - |
此示例指明,对于设备 TCP,应尝试使用 t 协议。如果传输的另一端拒绝,则使用 e 协议。
e 和 t 都不适合在调制解调器上使用。即使调制解调器能保证无错传输,数据仍然会在调制解调器与 CPU 之间丢失。
/etc/uucp/Dialers 文件包含常用调制解调器的拨号说明。您可能不需要在此文件中更改或添加项,除非计划使用非标准调制解调器或计划自定义您的 UUCP 环境。不过,您应该了解该文件的内容以及它与 Systems 和 Devices 文件之间的关系。
该文件中的内容指定在使用某条线路进行数据传输之前,必须先在该线路上进行的初始会话。此会话(称为聊天脚本)通常是传输和期待的 ASCII 字符串序列。聊天脚本通常用于拨打电话号码。
如UUCP /etc/uucp/Devices 文件中的示例所示,Devices 文件项中的第五个字段是 Dialers 文件或特殊拨号器类型(如 TCP、TLI 或 TLIS)的索引。uucico 守护进程尝试将 Devices 文件中的第五个字段与每个 Dialers 文件项的第一个字段进行匹配。此外,从第七个位置开始,每个奇数编号的 Devices 字段都会用作 Dialers 文件的索引。如果匹配成功,系统会解释 Dialers 项以执行拨号器会话。
Dialers 文件中的每个项都具有以下语法:
dialer substitutions expect-send |
以下示例显示 U.S. Robotics V.32bis 调制解调器的项。
usrv32bis-e =,-, "" dA\pT&FE1V1X1Q0S2=255S12=255&A1&H1&M5&B2&W\r\c OK\r \EATDT\T\r\c CONNECT\s14400/ARQ STTY=crtscts |
对应拨号器字段的项。拨号器字段与 Devices 文件中的第五个以及其他奇数编号的字段匹配。
对应替换字段的项。替换字段是转换字符串。每一对字符中的第一个字符都被映射为该对的第二个字符。此映射通常用于将 = 和 - 转换为拨号器“等待拨号音”和“暂停”所需的内容。
expect-send(期待发送)字段中的项。expect-send(期待发送)字段是字符串。
更多 expect-send(期待发送)字段。
以下示例显示在安装 Solaris 期间,安装 UUCP 时分发的 Dialers 文件项的样例。
penril =W-P "" \d > Q\c : \d- > s\p9\c )-W\p\r\ds\p9\c-) y\c : \E\TP > 9\c OK ventel =&-% "" \r\p\r\c $ <K\T%%\r>\c ONLINE! vadic =K-K "" \005\p *-\005\p-*\005\p-* D\p BER? \E\T\e \r\c LINE develcon "" "" \pr\ps\c est:\007 \E\D\e \n\007 micom "" "" \s\c NAME? \D\r\c GO hayes =,-, "" \dA\pTE1V1X1Q0S2=255S12=255\r\c OK\r \EATDT\T\r\c CONNECT # Telebit TrailBlazer tb1200 =W-, "" \dA\pA\pA\pTE1V1X1Q0S2=255S12=255S50=2\r\c OK\r \EATDT\T\r\c CONNECT\s1200 tb2400 =W-, "" \dA\pA\pA\pTE1V1X1Q0S2=255S12=255S50=3\r\c OK\r \EATDT\T\r\c CONNECT\s2400 tbfast =W-, "" \dA\pA\pA\pTE1V1X1Q0S2=255S12=255S50=255\r\c OK\r \EATDT\T\r\c CONNECT\sFAST # USrobotics, Codes, and DSI modems dsi-ec =,-, "" \dA\pTE1V1X5Q0S2=255S12=255*E1*F3*M1*S1\r\c OK\r \EATDT\T\r\c CONNECT\sEC STTY=crtscts,crtsxoff dsi-nec =,-, "" \dA\pTE1V1X5Q0S2=255S12=255*E0*F3*M1*S1\r\c OK\r \EATDT\T\r\c CONNECT STTY=crtscts,crtsxoff usrv32bis-ec =,-, "" \dA\pT&FE1V1X1Q0S2=255S12=255&A1&H1&M5&B2&W\r\c OK\r \EATDT\T\r\c CONNECT\s14400/ARQ STTY=crtscts,crtsxoff usrv32-nec =,-, "" \dA\pT&FE1V1X1Q0S2=255S12=255&A0&H1&M0&B0&W\r\c OK\r \EATDT\T\r\c CONNECT STTY=crtscts,crtsxoff codex-fast =,-, "" \dA\pT&C1&D2*MF0*AA1&R1&S1*DE15*FL3S2=255S7=40S10=40*TT5&W\r\c OK\r \EATDT\T\r\c CONNECT\s38400 STTY=crtscts,crtsxoff tb9600-ec =W-, "" \dA\pA\pA\pTE1V1X1Q0S2=255S12=255S50=6\r\c OK\r \EATDT\T\r\cCONNECT\s9600 STTY=crtscts,crtsxoff tb9600-nec =W-, "" \dA\pA\pA\pTE1V1X1Q0S2=255S12=255S50=6S180=0\r\c OK\r \EATDT\T\r\c CONNECT\s9600 STTY=crtscts,crtsxoff |
下表列出了 Dialers 文件的发送字符串中常用的转义符。
表 26–3 /etc/uucp/Dialers 的反斜杠字符
字符 |
说明 |
---|---|
发送或期待退格字符。 |
|
无换行符或回车。 |
|
延迟大约 2 秒。 |
|
\D |
未使用 Dialcodes 进行转换的电话号码或令牌。 |
禁用回显检查。 |
|
对速度较慢的设备启用回显检查。 |
|
插入 Break 字符。 |
|
发送换行符。 |
|
发送八进制数字。UUCP /etc/uucp/Systems 文件一节中列出了可以使用的其他转义符。 |
|
发送或期待 NULL 字符 (ASCII NUL)。 |
|
暂停大约 12–14 秒。 |
|
返回。 |
|
发送或期待空格字符。 |
|
使用 Dialcodes 进行转换的电话号码或令牌。 |
penril =W-P "" \d > Q\c : \d- > s\p9\c )-W\p\r\ds\p9\c-) y\c : \E\TP > 9\c OK |
首先,建立了电话号码参数的替换机制,以便将任何 = 替换为 W(等待拨号音),将任何 - 替换为 P(暂停)。
下面是该行的其余部分提供的握手情况:
"" -不等待,表示继续执行下一步。
\d-延迟 2 秒,然后发送回车。
> -等待 >。
Q\c-发送 Q(不带回车)。
: -期待 :。
\d--延迟 2 秒,发送 - 和回车。
> -等待 >。
s\p9\c-发送 s,暂停,发送 9(不带回车)。
)-W\p\r\ds\p9\c-)-等待 )。如果未收到 ),则会按照以下方式处理 - 字符之间的字符串。发送 W,暂停,发送回车,延迟,发送 s,暂停,发送 9(不带回车),然后等待 )。
y\c-发送 y(不带回车)。
: -等待 :。
\E\TP-\E 启用回显检查。从此刻开始,无论何时传输字符,UUCP 都会等待接收到字符后才继续操作。随后,UUCP 将发送电话号码。\T 旨在获取作为参数传递的电话号码。\T 将应用 Dialcodes 转换和此项的字段 2 指定的调制解调器功能转换。随后,\T 将发送 P 和回车。
> -等待 >。
9\c-发送 9(不带换行符)。
OK-等待字符串 OK。
也可以使用伪发送 STTY=value 字符串设置调制解调器特性。例如,STTY=crtscts 可启用外发硬件流控制。STTY=crtsxoff 可启用传入硬件流控制。STTY=crtscts,crtsxoff 可同时启用外发和传入硬件流控制。
STTY 接受所有的 stty 模式。请参见 stty(1) 和 termio(7I) 手册页。
以下示例在 Dialers 项中启用了硬件流控制:
dsi =,–, "" \dA\pTE1V1X5Q0S2=255S12=255*E1*F3*M1*S1\r\c OK\r \EATDT\T\r\c CONNECT\sEC STTY=crtscts |
在某些情况下,由于您正在呼叫的系统会检查端口奇偶校验并删除错误的行,因此您必须重置奇偶校验。expect-send(期待发送)对句 P_ZERO 将奇偶校验设置为零:
foo =,-, "" P_ZERO "" \dA\pTE1V1X1Q0S2=255S12=255\r\c OK\r\EATDT\T\r\c CONNECT |
以下是可跟在 expect-send(期待发送)对句后的奇偶校验对句:
将奇偶校验设置为偶校验(缺省值)
将奇偶校验设置为奇校验
将奇偶校验设置为 1
也可以在 Systems 文件项中使用此伪发送字符串。
执行基本的 UUCP 配置时,除了 Systems、Devices 和 Dialers 文件,还可以使用本节中介绍的文件。
使用 /etc/uucp/Dialcodes 文件,可以定义在 /etc/uucp/Systems 文件的电话字段中使用的拨号代码缩写。可以使用 Dialcodes 文件提供有关由同一站点中的多个系统使用的基本电话号码的附加信息。
每个项都具有以下语法:
Abbreviation Dial-Sequence |
此字段提供 Systems 文件的电话字段中使用的缩写。
此字段提供访问特定的 Systems 文件项时传递给拨号器的拨号序列。
下面对这两个文件中的字段进行了比较。以下是 Dialcodes 文件中的字段。
Abbreviation Dial-Sequence |
以下是 Systems 文件中的字段。
System-Name Time Type Speed Phone Chat Script |
下表包含 Dialcodes 文件中字段的内容样例。
表 26–4 Dialcodes 文件中的项
缩写 |
拨号序列 |
---|---|
NY |
1=212 |
jt |
9+847 |
在第一行中,NY 是出现在 Systems 文件的电话字段中的缩写。例如,Systems 文件可能具有以下项:
NY5551212
当 uucico 读取 Systems 文件中的 NY 时,uucico 将在 Dialcodes 文件中搜索 NY 并获取拨号序列 1=212。1=212 是呼叫纽约市任何电话所需的拨号序列。此序列包括数字 1、表示暂停和等待二次拨号音的等号 (=),以及区号 212。uucico 会将此信息发送给拨号器,然后返回 Systems 文件获取电话号码的其余部分:5551212。
jt 9=847- 项将与 Systems 文件中的电话字段(如 jt7867)协同使用。当 uucico 读取 Systems 文件中包含 jt7867 的项时,uucico 会将序列 9=847-7867 发送给拨号器(如果拨号器-令牌对中的令牌为 \T)。
通过 /etc/uucp/Sysfiles 文件,可以将 uucp 和 cu 使用的不同文件指定为 Systems、Devices 和 Dialers 文件。有关 cu 的更多信息,请参见 cu(1C) 手册页。您可以针对以下文件使用 Sysfiles:
不同的 Systems 文件,以便可以向 uucp 服务以外的其他地址请求登录服务。
不同的 Dialers 文件,以便可以为 cu 和 uucp 指定不同的握手方式。
多个 Systems、Dialers 和 Devices 文件。需要特别指出的是,Systems 文件可能会变得非常大,因而可以将该文件分成多个较小的文件,使其更便于处理。
service=w systems=x:x dialers=y:y devices=z:z |
表示 uucico、cu 或这两个命令(以冒号分隔)
表示一个或多个要用作 Systems 文件的文件,每个文件名以冒号分隔且按照其出现的顺序读取
表示一个或多个要用作 Dialers 文件的文件
表示一个或多个要用作 Devices 文件的文件
假设每个文件名都相对于 /etc/uucp 目录(除非指定了全路径)。
以下样例 /etc/uucp/Sysfiles 除了定义标准的 /etc/uucp/Systems 文件以外,还定义了本地 Systems 文件 (Local_Systems):
service=uucico:cu systems=Systems :Local_Systems |
当 /etc/uucp/Sysfiles 包含此项时,uucico 和 cu 将首先检查标准的 /etc/uucp/Systems。如果该文件中没有对应于被呼叫系统的项,或者该文件中的项出现问题,这两个命令将检查 /etc/uucp/Local_Systems。
正如在前一项中指定的那样,cu 和 uucico 将共享 Dialers 和 Devices 文件。
当为 uucico 和 cu 服务定义了不同的 Systems 文件时,计算机会存储两个不同的 Systems 列表。可以使用 uuname 命令列显 uucico 列表,或者使用 uuname -C 命令列显 cu 列表。以下是该文件的另一个示例,说明了先检查备用文件,然后再检查缺省文件(如果必要)的情况:
service=uucico systems=Systems.cico:Systems dialers=Dialers.cico:Dialers \ devices=Devices.cico:Devices service=cu systems=Systems.cu:Systems \ dialers=Dialers.cu:Dialers \ devices=Devices.cu:Devices |
使用 UUCP 的每一台计算机都必须具有标识名称,通常称为节点名。节点名随聊天脚本和其他标识信息一同包含在远程计算机的 /etc/uucp/Systems 文件中。通常,UUCP 使用的节点名与 uname -n 命令返回的节点名相同,TCP/IP 也使用该名称。
通过创建 /etc/uucp/Sysname 文件,可以指定与 TCP/IP 主机名完全无关的 UUCP 节点名。该文件有一个占据一行的项,其中包含系统的 UUCP 节点名。
/etc/uucp/Permissions 文件指定远程计算机在登录、访问文件和执行命令方面具有的权限。某些选项可限制远程计算机请求文件的能力及其接收本地计算机放入队列中的文件的能力。其他选项可用于指定远程计算机能够在本地计算机上执行的命令。
每项都是一个逻辑行,物理行以反斜杠 (\) 结尾以指示连续性。以空格分隔的选项组成了项。每个选项都是采用以下格式的名称-值对:
name=value
Values 可以是以冒号分隔的列表。指定的选项中不允许包含空格。
注释行以井号 (#) 开头,且占用整行,直到换行符。空白行将被忽略,即使是在多行项中。
Permissions 文件项的类型如下所示:
LOGNAME 项包含一个 LOGNAME 选项。MACHINE 项包含一个 MACHINE 选项。一个项可以同时包含这两个选项。
使用 Permissions 文件限制为远程计算机授予的访问权限级别时,应该考虑以下几点:
远程计算机呼叫您的计算机并请求接收文件时,该请求可能会被授权,也可能会被拒绝。REQUEST 选项指定远程计算机是否可以请求从您的计算机建立文件传输。字符串 REQUEST=yes 指定远程计算机可以请求从您的计算机传输文件。字符串 REQUEST=no 指定远程计算机不能请求从您的计算机接收文件。如果未指定 REQUEST 选项,则将使用缺省值 REQUEST=no。REQUEST 选项可以出现在 LOGNAME 项中(这样远程计算机就能呼叫您的计算机),也可以出现在 MACHINE 项中(这样您就可以呼叫远程计算机)。
远程计算机呼叫您的计算机并完成其工作后,即会尝试检索您的计算机针对远程计算机排入队列的工作。SENDFILES 选项指定您的计算机是否可以发送针对远程计算机排入队列的工作。
如果远程计算机使用 LOGNAME 选项中的一个名称进行登录,字符串 SENDFILES=yes 指定您的计算机可以发送针对远程计算机排入队列的工作。如果在 /etc/uucp/Systems 的时间字段中输入了 Never,则此字符串是必需的。Never 项将本地计算机设置为被动模式,但是不允许启动对此特定远程计算机的呼叫。有关更多信息,请参见UUCP /etc/uucp/Systems 文件。
字符串 SENDFILES=call 指定仅当您的计算机呼叫远程计算机时才发送在您的计算机中排入队列的文件。call 值是 SENDFILES 选项的缺省值。此选项仅在 LOGNAME 项中有意义,因为将呼叫发送到远程计算机时将应用 MACHINE 项。如果该选项与 MACHINE 项结合使用,则会忽略该选项。
使用此选项,除您的计算机的 TCP/IP 主机名(通过 hostname 命令返回)外,还可以指定其唯一的 UUCP 节点名。例如,如果您无意中为您的主机指定的名称与某个其他系统的名称相同,则可以设置 Permissions 文件的 MYNAME 选项。假设您希望将您的组织称为 widget。如果您的所有调制解调器都与主机名为 gadget 的计算机相连,则 gadget 的 Permissions 文件中的项如下:
service=uucico systems=Systems.cico:Systems dialers=Dialers.cico:Dialers \ devices=Devices.cico:Devices service=cu systems=Systems.cu:Systems \ dialers=Dialers.cu:Dialers \ devices=Devices.cu:Devices |
现在,系统 world 可以登录计算机 gadget,就像登录 widget 一样。为了在您呼叫计算机 world 时,也能使其通过别名 widget 识别您的计算机,可以定义如下项:
MACHINE=world MYNAME=widget |
也可以使用 MYNAME 选项进行测试,因为此选项允许计算机呼叫其本身。但是,由于可能会使用此选项屏蔽计算机的实际标识,因此应使用UUCP VALIDATE 选项中介绍的 VALIDATE 选项。
这些选项指定 uucico 可以读取或写入的文件系统的各个部分。可以在 MACHINE 或 LOGNAME 项中指定 READ 和 WRITE 选项。
READ 和 WRITE 选项的缺省值都为 uucppublic 目录,如以下字符串所示:
READ=/var/spool/uucppublic WRITE=/var/spool/uucppublic |
字符串 READ=/ 和 WRITE=/ 指定具有对“其他”权限的本地用户可访问的任何文件的访问权限。
这些项的值是以冒号分隔的路径名称的列表。READ 选项用于请求文件,而 WRITE 选项用于存储文件。其中的一个值必须是要进入或退出的文件的全路径名的前缀。要授予在 /usr/news 和公共目录中存储文件的权限,请对 WRITE 选项使用以下值:
WRITE=/var/spool/uucppublic:/usr/news |
如果使用 READ 和 WRITE 选项,则必须指定所有的路径名,因为系统不会将这些路径名添加到缺省列表中。例如,如果 /usr/news 路径名是 WRITE 选项中指定的唯一路径,则系统将拒绝在公共目录中存储文件的权限。
在设置可供远程系统进行读写访问的目录时需格外小心。例如,/etc 目录包含许多关键的系统文件。远程用户不应拥有在此目录中存储文件的权限。
NOREAD 和 NOWRITE 选项指定除 READ 和 WRITE 选项或缺省值之外的其他情况。以下项允许读取除 /etc 目录(及其子目录,请记住,这些选项是前缀)中的文件以外的任何文件。
READ=/ NOREAD=/etc WRITE=/var/spool/uucppublic |
此项只允许向缺省目录 /var/spool/uucppublic 中写入内容。NOWRITE 与 NOREAD 选项的工作方式相同。可以在 LOGNAME 和 MACHINE 项中使用 NOREAD 和 NOWRITE 选项。
可以在 LOGNAME 项中使用 CALLBACK 选项指定在回叫呼叫系统之前不执行任何事务。以下是设置 CALLBACK 的原因:
字符串 CALLBACK=yes 指定您的计算机必须回叫远程计算机,然后才能进行文件传输。
CALLBACK 选项的缺省值为 CALLBACK=no。如果将 CALLBACK 设置为 yes,则必须在对应于呼叫者的 MACHINE 项中指定影响其余会话的权限。请勿在 LOGNAME 或远程计算机针对您的主机设置的 LOGNAME 项中指定这些权限。
如果两个站点为彼此都设置了 CALLBACK 选项,则永远不会启动会话。
COMMANDS 选项可能会危及系统的安全性。使用此选项时应格外小心。
可以在 MACHINE 项中使用 COMMANDS 选项指定远程计算机可在您的计算机上执行的命令。uux 程序生成远程执行请求,并对要传输到远程计算机的请求进行排队。文件和命令将被发送到目标计算机进行远程执行,这对于仅在您的系统发出呼叫时才会应用 MACHINE 项而言,是一个例外。
请注意,不能在 LOGNAME 项中使用 COMMANDS。MACHINE 项中的 COMMANDS 定义命令权限,无论是您呼叫远程系统还是远程系统呼叫您。
字符串 COMMANDS=rmail 指定远程计算机可在您的计算机上执行的缺省命令。如果在 MACHINE 项中使用命令字符串,则将覆盖缺省命令。例如,以下项将覆盖 COMMAND 缺省值,以使名为 owl、raven、hawk 和 dove 的计算机可在您的计算机上立即执行 rmail、rnews 和 lp。
MACHINE=owl:raven:hawk:dove COMMANDS=rmail:rnews:lp |
除以上指定的名称外,还可以指定命令的全路径名。例如,以下项指定命令 rmail 使用缺省搜索路径。
COMMANDS=rmail:/usr/local/rnews:/usr/local/lp |
UUCP 的缺省搜索路径为 /bin 和 /usr/bin。远程计算机为要执行的命令指定 rnews 或 /usr/local/rnews 时,则会执行 /usr/local/rnews,而无论缺省路径是什么。同样,/usr/local/lp 是要执行的 lp 命令。
在列表中包含 ALL 值意味着,系统将执行该项中指定的远程计算机的任何命令。如果使用此值,则将授予远程计算机对您的计算机的完全访问权限。
此值允许的访问权限远远多于普通用户拥有的访问权限。仅在两台计算机都位于同一个站点、紧密连接,且用户受信任时,才应使用此值。
以下是添加了 ALL 值的字符串:
COMMANDS=/usr/local/rnews:ALL:/usr/local/lp |
此字符串说明了两点:
只要指定了存在潜在危险的命令(如带有 COMMANDS 选项的 cat 和 uucp),就应使用 VALIDATE 选项。通过 UUCP 远程执行守护进程 (uuxqt) 执行命令时,读写文件的任何命令都对本地安全性造成潜在危险。
只要指定的命令对您的计算机的安全造成潜在危险,就应在使用 COMMANDS 选项的同时使用 VALIDATE 选项。尽管 VALIDATE 提供的命令访问权限比 ALL 更安全,但它也不过是在 COMMANDS 选项之上提高了安全性级别。
VALIDATE 通过交叉检查呼叫计算机的主机名与它使用的登录名,提供一定程度的呼叫者身份验证。以下字符串可确保在 widget 或 gadget 之外的任何计算机尝试以 Uwidget 身份进行登录时会拒绝连接。
LOGNAME=Uwidget VALIDATE=widget:gadget |
VALIDATE 选项要求拥有权限的计算机具有处理 UUCP 事务的唯一登录名和口令。此验证的重要特征是使与此项关联的登录名和口令受到保护。如果外界人员获取了该信息,便不能再将特定的 VALIDATE 选项视为安全选项。
请认真考虑要授予哪些远程计算机拥有处理 UUCP 事务权限的登录名和口令。为远程计算机提供具有文件访问和远程执行功能的特殊登录名和口令等同于为该计算机上的任何人提供访问您的计算机的普通登录名和口令。因此,如果您不信任远程计算机上的某个人,请勿为该计算机提供拥有权限的登录名和口令。
以下 LOGNAME 项指定,如果声明为 eagle、owl 或 hawk 的某个远程计算机登录了您的计算机,则它一定使用了登录名 uucpfriend:
LOGNAME=uucpfriend VALIDATE=eagle:owl:hawk |
如果外界人员获取了 uucpfriend 登录名和口令,便很容易进行伪装。
但是,此项与 COMMANDS 选项有什么关系,MACHINE 项中仅包含什么内容呢?此项会将 MACHINE 项(和 COMMANDS 选项)与 LOGNAME 项(与拥有权限的登录名关联)相链接。由于登录远程计算机时不会运行执行守护进程,因此需要此链接。实际上,该链接是不知道哪个计算机发送执行请求的异步进程。因此,真正的问题是:您的计算机如何识别执行文件的来源?
每个远程计算机在您的本地计算机上都有其自己的假脱机目录。这些假脱机目录具有仅为 UUCP 程序提供的写入权限。远程计算机中的执行文件在传输到您的计算机后将被置于其假脱机目录中。uuxqt 守护进程运行时,即可使用假脱机目录名称在 Permissions 文件中查找 MACHINE 项并获取 COMMANDS 列表。或者,如果该计算机名称未出现在 Permissions 文件中,则将使用缺省列表。
以下示例显示 MACHINE 项与 LOGNAME 项之间的关系:
MACHINE=eagle:owl:hawk REQUEST=yes \ COMMANDS=rmail:/usr/local/rnews \ READ=/ WRITE=/ LOGNAME=uucpz VALIDATE=eagle:owl:hawk \ REQUEST=yes SENDFILES=yes \ READ=/ WRITE=/ |
COMMANDS 选项中的值表示,远程用户可以执行 rmail 和 /usr/local/rnews。
在第一项中,必须保证希望呼叫列出的某台计算机时,真正呼叫的是 eagle、owl 或 hawk。因此,eagle、owl 或 hawk 假脱机目录中的所有文件都是由这些计算机中的某一台放入的。如果远程计算机登录并声明它是这三台计算机中的某一台,则其执行文件将被置于拥有权限的假脱机目录中。因此,必须确认该计算机具有拥有权限的登录名 uucpz。
可以为特定的 MACHINE 项中未提到的远程计算机指定不同的选项值。当许多计算机呼叫您的主机,且命令集不断发生变化时,可能会产生这种需要。可将 OTHER 作为计算机名称用于此项,如以下示例所示:
MACHINE=OTHER \ COMMANDS=rmail:rnews:/usr/local/Photo:/usr/local/xp |
也可以针对其他 MACHINE 项中未提到的计算机设置 MACHINE 项的所有其他选项。
常用选项相同时,可以将 MACHINE 和 LOGNAME 项合并为一个项。例如,以下两组项具有相同的 REQUEST、READ 和 WRITE 选项。
MACHINE=eagle:owl:hawk REQUEST=yes \ READ=/ WRITE=/ |
和
LOGNAME=uupz REQUEST=yes SENDFILES=yes \ READ=/ WRITE=/ |
可以合并这些项,如下所示:
MACHINE=eagle:owl:hawk REQUEST=yes \ logname=uucpz SENDFILES-yes \ READ=/ WRITE=/ |
通过合并 MACHINE 和 LOGNAME 项,提高了 Permissions 文件的可管理性和有效性。
通过一系列计算机发送文件时,中间计算机在其 COMMANDS 选项中必须具有命令 uucp。如果键入以下命令,则仅在计算机 willow 允许计算机 oak 执行 uucp 程序时才执行转发操作。
% uucp sample.txt oak\!willow\!pine\!/usr/spool/uucppublic |
计算机 oak 还必须允许您的计算机执行 uucp 程序。计算机 pine(指定的最后一个计算机)不必允许 uucp 命令,因为该计算机不会执行任何转发操作。通常情况下,不会以该方式设置计算机。
/etc/uucp/Poll 文件包含轮询远程计算机所需的信息。Poll 文件中的每个项依次包含要呼叫的远程计算机的名称、制表符或空格以及应呼叫该计算机的时间点(小时)。Poll 文件中项的格式如下所示:
sys-name hour ...
例如,项 eagle 0 4 8 12 16 20 指示系统每四小时对计算机 eagle 轮询一次。
uudemon.poll 脚本负责处理 Poll 文件,但并不实际执行轮询。该脚本仅在假脱机目录中设置轮询工作文件(名称始终为 C.file)。uudemon.poll 脚本将启动调度程序,且调度程序将检查假脱机目录中的所有工作文件。
使用 /etc/uucp/Config 文件,可以手动覆盖某些参数。Config 文件中的每个项都具有以下格式:
parameter=value
有关可配置参数名称的完整列表,请参见随同系统提供的 Config 文件。
以下 Config 项将缺省协议排序设置为 Gge,并将 G 协议缺省值更改为 7 个窗口和 512 字节的包。
Protocol=G(7,512)ge |
/etc/uucp/Grades 文件包含作业等级的定义,将发送到远程计算机的作业排入队列时会使用作业等级定义。此文件还包含每个作业等级的权限。 此文件中的每一项都代表由管理员定义的作业等级的定义,用户将使用该定义将作业排入队列。
Grades 文件中的每一项都具有以下格式:
User-job-grade System-job-grade Job-size Permit-type ID-list
每一项包含的各字段间以空格分隔,最后一个字段所包含的子字段也以空格分隔。如果项占用多个物理行,则可以使用反斜杠以继续在下一行中输入内容。注释行以井号 (#) 开头,且占用整行。将始终忽略空行。
此字段包含管理员定义的用户作业等级名称,最多可含 64 个字符。
此字段包含用户作业等级映射到的单字符作业等级。有效的字符列表为 A–Z、a–z,A 的优先级最高,z 的优先级最低。
可以将一个用户作业等级绑定到多个系统作业等级。请注意,系统将在 Grades 文件中按顺序查找用户作业等级。因此,应列出系统作业等级的多次出现情况,以符合对最大作业大小的限制。
虽然未限制用户作业等级的最大数目,但是系统作业等级允许的最大数目为 52。原因是可以将多个用户作业等级映射到一个系统作业等级,但是每个用户作业等级在文件中必须占用单独的一行。下面是一个示例:
mail N Any User Any netnews N Any User Any |
如果 Grades 文件中包含此配置,则这两个用户作业等级字段将共享同一个系统作业等级。由于作业等级的权限与用户作业等级关联,而不是与系统作业等级关联,因此两个用户作业等级可以共享同一个系统作业等级而具有两组不同的权限。
可以定义将缺省用户作业等级绑定到系统作业等级。必须将关键字 default 用作 Grades 文件的用户作业等级字段中的用户作业等级及其要绑定到的系统作业等级。应该将限制字段和 ID 字段定义为 Any,以便可以将任何用户和任何大小的作业排入此等级。下面是一个示例:
default a Any User Any |
如果未定义缺省用户作业等级,则将使用内置的缺省等级 Z。由于限制字段的缺省值为 Any,因此不会检查多次出现的缺省等级。
此字段指定可进入队列的最大作业大小。 作业大小以字节为单位,且可以是下述选项的列表。
指定此作业等级的最大作业大小的整数
表示多少 KB 的十进制数(K 是千字节的缩写)
表示多少 MB 的十进制数(M 是兆字节的缩写)
指定不存在最大作业大小的关键字
以下是一些示例:
5000 表示 5000 字节
10K 表示 10 KB
2M 表示 2 MB
此字段包含表示如何解释 ID 列表的关键字。下表列出了这些关键字及其含义。
表 26–5 允许类型字段
关键字 |
ID 列表内容 |
---|---|
允许其使用此作业等级的用户的登录名 |
|
不允许其使用此作业等级的用户的登录名 |
|
允许其成员使用该作业等级的组名 |
|
不允许其成员使用该作业等级的组名 |
此字段包含允许或拒绝排入此作业等级的登录名或组名的列表。名称列表以空格分隔,且以换行符终止。关键字 Any 表示允许任何人排入此作业等级。
本节介绍三个影响 UUCP 设备的使用但很少修改的文件。
使用 /etc/uucp/Devconfig 文件,可以按服务(uucp 或 cu)来配置设备。Devconfig 项定义用于特定设备的 STREAMS 模块。这些项具有以下格式:
service=x device=y push=z[:z...]
x 可以是 cu、uucico 或这两种服务(以冒号分隔)。y 是网络名称,而且必须与 Devices 文件中的项匹配。z 由 STREAMS 模块的名称替换(按这些模块推入流的顺序)。可以为 cu 和 uucp 服务定义不同的模块和设备。
以下是适用于 STARLAN 网络且在该文件中最常使用的项:
service=cu device=STARLAN push=ntty:tirdwr service=uucico device=STARLAN push=ntty:tirdwr |
此示例将推送 ntty,然后推送 tirdwr。
/etc/uucp/Limits 文件控制在 uucp 网络中同时运行的 uucico、uuxqt 和 uusched 的最大数目。在大多数情况下 ,缺省值是可接受的,且不需要进行更改。但是,如果要更改缺省值,请使用任意文本编辑器。
service=x max=y:
x 可以是 uucico、uuxqt 或 uusched,而 y 是该服务所允许的限制。这些字段可以采用任何顺序且为小写形式。
以下项是 Limits 文件中最常用的项:
service=uucico max=5 service=uuxqt max=5 service=uusched max=2 |
该示例允许在计算机上运行五个 uucico、五个 uuxqt 和两个 uusched。
影响通信设备使用的另一文件是 remote.unknown 文件。此文件是在任何 Systems 文件启动会话的情况下找不到计算机时执行的二进制程序。此程序记录会话尝试并丢弃连接。
如果更改 remote.unknown 文件的权限使得该文件不能执行,则系统将接受来自任何系统的连接。
不存在于任何 Systems 中的计算机启动会话时,将执行此程序。该程序记录会话尝试,但无法建立连接。如果更改此文件的权限使得该文件不能执行 (chmod 000 remote.unknown),则系统将接受任何会话请求。这种更改非常严肃,必须有充分理由才应进行此更改。
接下来介绍 UUCP 管理文件。这些文件是在假脱机目录中创建的,用于锁定设备、保存临时数据或保留有关远程传输或执行的信息。
临时数据文件 (TM)-从其他计算机收到文件时,UUCP 进程将在假脱机目录 /var/spool/uucp/x 下创建这些数据文件。目录 x 的名称与发送文件的远程计算机的名称相同。临时数据文件的名称具有以下格式:
TM.pid.ddd
pid 是进程 ID,ddd 是从 0 开始的连续的三位数字。
收到整个文件后,TM.pid.ddd 文件将被移至导致传输的 C.sysnxxxx 文件(在后文中论述)中指定的路径名下。如果处理被异常终止,TM.pid.ddd 文件可以保留在 x 目录中。uucleanup 应自动删除这些文件。
锁定文件 (LCK)-锁定文件是在每个正在使用的设备的 /var/spool/locks 目录中创建的。锁定文件可防止重复的会话和多次尝试使用同一个呼叫设备。下表显示了不同类型的 UUCP 锁定文件。
文件名 |
说明 |
---|---|
LCK.sys |
sys 表示正在使用该文件的计算机的名称 |
LCK.dev |
dev 表示正在使用该文件的设备的名称 |
LCK.LOG |
LOG 表示锁定的 UUCP 日志文件 |
如果意外丢弃了通信链路(如在计算机崩溃时),这些文件可以保留在假脱机目录中。父进程不再处于活动状态后,锁定文件即被忽略(删除)。锁定文件包含创建锁定的进程的进程 ID。
工作文件 (C.)-工作文件是在已针对远程计算机排队工作(如文件传输或远程命令执行)后在假脱机目录中创建的。工作文件的名称具有以下格式:
C.sysnxxxx
sys 是远程计算机的名称,n 是表示工作等级(优先级)的 ASCII 字符,xxxx 是由 UUCP 指定的四位作业序列号。工作文件包含以下信息:
数据文件( D.)-数据文件是在命令行上指定将源文件复制到假脱机目录时创建的。数据文件的名称具有以下格式:
D.systmxxxxyyy-systm 是远程计算机名称中的前五个字符。 xxxx 是由 uucp 指定的四位作业序列号。该四位作业序列号的后面可以跟有后续数字。在为一个工作文件 (C.) 创建多个 D. 文件时将使用 yyy。
X. (执行文件)-执行文件是在执行远程命令之前在假脱机目录中创建的。执行文件的名称具有以下格式:
X.sysnxxxx
sys 是远程计算机的名称,n 是表示工作等级(优先级)的字符,xxxx 是由 UUCP 指定的四位序列号。执行文件包含以下信息:
本节列出了与 UUCP 关联的错误消息。
错误消息 |
说明或操作 |
---|---|
CAN'T OPEN |
open() 或 fopen() 失败。 |
CAN'T WRITE |
write()、fwrite()、fprint() 或类似的命令失败。 |
CAN'T READ |
read()、fgets() 或类似的命令失败。 |
CAN'T CREATE |
creat() 调用失败。 |
CAN'T ALLOCATE |
动态分配失败。 |
CAN'T LOCK |
尝试创建 LCK(锁定)文件失败。在某些情况下,此错误是致命的。 |
CAN'T STAT |
stat() 调用失败。 |
CAN'T CHMOD |
chmod() 调用失败。 |
CAN'T LINK |
link() 调用失败。 |
CAN'T CHDIR |
chdir() 调用失败。 |
CAN'T UNLINK |
unlink() 调用失败。 |
WRONG ROLE |
这是内部逻辑问题。 |
CAN'T MOVE TO CORRUPTDIR |
尝试将某些错误的 C. 或 X. 文件移至 /var/spool/uucp/.Corrupt 目录失败。可能缺少该目录,或者模式或属主不正确。 |
CAN'T CLOSE |
close() 或 fclose() 调用失败。 |
FILE EXISTS |
尝试创建 C. 或 D. 文件,但该文件已存在。当序列文件访问发生问题时就会出现此错误,通常说明软件出现错误。 |
NO uucp SERVICE NUMBER |
尝试 TCP/IP 调用,但是 /etc/services 文件中没有任何对应 UUCP 的项。 |
BAD UID |
用户 ID 不在口令数据库中。请检查名称服务配置。 |
BAD LOGIN_UID |
与上一个说明相同。 |
BAD LINE |
Devices 文件中有错误的行。一行或多行中的参数不足。 |
SYSLST OVERFLOW |
gename.c 中的内部表溢出。单个作业尝试与 30 多个系统对话。 |
TOO MANY SAVED C FILES |
与上一个说明相同。 |
RETURN FROM fixline ioctl |
ioctl(2) 应该永远不会失败,但却失败了。系统驱动程序出现问题。 |
BAD SPEED |
Devices 或 Systems 文件(类或速度字段)中出现错误的行速度。 |
BAD OPTION |
Permissions 文件中有错误的行或选项。必须立即纠正此错误。 |
PKCGET READ |
远程计算机可能已挂起。无需执行任何操作。 |
PKXSTART |
远程计算机以无法恢复的方式异常中止。通常可以忽略此错误。 |
TOO MANY LOCKS |
出现内部问题。请与系统供应商联系。 |
XMV ERROR |
某个文件或目录出现了问题。可能是假脱机目录造成的,因为尝试此进程之前假设已检查目标的模式。 |
CAN'T FORK |
错误消息 |
说明/操作 |
---|---|
OK |
状态是可接受的。 |
NO DEVICES AVAILABLE |
当前没有可呼叫的设备。请检查特定系统的 Devices 文件中是否包含有效设备。请在 Systems 文件中检查用于呼叫系统的设备。 |
WRONG TIME TO CALL |
在 Systems 文件中指定的时间以外的其他时间对系统进行了呼叫。 |
TALKING |
自解释 |
LOGIN FAILED |
登录特定计算机失败。原因可能是登录名或口令错误、编号错误、计算机速度较慢,或执行拨号器-令牌对脚本时发生故障。 |
CONVERSATION FAILED |
会话在成功启动后失败。此错误通常意味着:一端已关闭、程序异常中止或线路(链路)断开。 |
DIAL FAILED |
远程计算机始终无应答。原因可能是拨号器错误或电话号码错误。 |
BAD LOGIN/MACHINE COMBINATION |
呼叫计算机时使用的登录名/计算机名与 Permissions 文件中指定的不一致。此错误可能是由于有人试图通过伪装身份进行呼叫而造成的。 |
DEVICE LOCKED |
要使用的呼叫设备当前已锁定且正在被其他进程使用。 |
ASSERT ERROR |
出现 ASSERT 错误。请检查 /var/uucp/.Admin/errors 文件中的错误消息,并参阅UUCP ASSERT 错误消息一节。 |
SYSTEM NOT IN Systems FILE |
该系统不在 Systems 文件中。 |
CAN'T ACCESS DEVICE |
尝试使用的设备不存在或模式错误。请检查 Systems 和 Devices 文件中的相应项。 |
DEVICE FAILED |
无法打开设备。 |
WRONG MACHINE NAME |
被呼叫的计算机报告的名称与期待的名称不同。 |
CALLBACK REQUIRED |
被呼叫的计算机要求回叫您的计算机。 |
REMOTE HAS A LCK FILE FOR ME |
远程计算机具有针对您的计算机的 LCK 文件。远程计算机可能正在尝试呼叫您的计算机。如果远程计算机具有旧版本的 UUCP,则与您的计算机对话的进程可能已失败,但保留了 LCK 文件。如果远程计算机具有新版本的 UUCP 且未与您的计算机进行通信,则具有 LCK 文件的进程被挂起。 |
REMOTE DOES NOT KNOW ME |
远程计算机的 Systems 文件中没有您的计算机的节点名。 |
REMOTE REJECT AFTER LOGIN |
您的计算机登录时使用的登录名与远程计算机期待的登录名不一致。 |
REMOTE REJECT, UNKNOWN MESSAGE |
远程计算机因未知原因拒绝与您的计算机进行通信。远程计算机运行的可能不是标准版本的 UUCP。 |
STARTUP FAILED |
登录成功,但是初始握手失败。 |
CALLER SCRIPT FAILED |
此错误通常与 DIAL FAILED 相同。但是,如果经常出现此错误,则可能是 Dialers 文件中的调用程序脚本存在问题。请使用 Uutry 进行检查。 |
下表列出了 /usr/include/sysexits.h 文件产生的错误状态消息的退出代码编号。uucp 当前仅使用了部分代码编号。
表 26–9 按编号排列的 UUCP 错误消息
消息编号 |
说明 |
含义 |
---|---|---|
64 |
错误消息的基准值 |
错误消息从该值开始。 |
64 |
命令行用法错误 |
命令使用不正确,例如参数数目错误、标志错误或语法错误。 |
65 |
数据格式错误 |
输入数据在某方面不正确。此数据格式只能应用于用户数据,不能用于系统文件。 |
66 |
无法打开输入 |
输入文件(不是系统文件)不存在或不可读。 此问题可能还包括诸如邮件程序“找不到邮件”等错误。 |
67 |
地址未知 |
指定的用户不存在。此错误用于邮寄地址或远程登录。 |
68 |
主机名未知 |
主机不存在。 此错误用于邮寄地址或网络请求。 |
69 |
服务不可用 |
服务不可用。 如果支持程序或文件不存在,就会出现此错误。 此消息也可能只是简单地指明出现了某些问题,但当前无法确定原因。 |
70 |
内部软件错误 |
检测到内部软件错误。 此错误应仅限于与非操作系统相关的错误(如果可能)。 |
71 |
系统错误 |
检测到操作系统错误。发生诸如“不能派生”、“不能创建管道”等情况时可能出现此错误。 例如,此错误包括 getuid 返回 passwd 文件中不存在的用户。 |
72 |
缺少关键的 OS 文件 |
系统文件(如 /etc/passwd 或 /var/admin/utmpx)不存在,无法打开,或包含错误(如语法错误)。 |
73 |
无法创建输出文件 |
无法创建用户指定的输出文件。 |
74 |
输入/输出错误 |
对某个文件执行 I/O 操作时出现错误。 |
75 |
临时故障。邀请用户重试 |
临时故障并非是真正的错误。 例如,在 sendmail 中,这可能表示邮件程序无法创建连接,应在稍后重试请求。 |
76 |
协议中的远程错误 |
远程系统在协议交换期间返回了不可能出现的内容。 |
77 |
权限被拒绝 |
您没有足够的权限执行此操作。 此消息不适用于文件系统问题(文件系统问题应使用 NOINPUT 或 CANTCREAT),而适用于较高级别的权限。 例如,kre 使用此消息限制可发送邮件的学生。 |
78 |
配置错误 |
系统检测到配置中有错误。 |
79 |
找不到项 |
找不到项。 |
79 |
列出的最大值 |
错误消息的最高值。 |