Usenet 新闻协议知道一类特殊的文章,这些文章会触发新闻系统的特定响应或操作。这些文章被称为控制消息。它们通过存在于文章标题中的控制字段来识别,该字段位于文章标题中,包含要执行的控制操作的名称。它们有几种类型,所有类型都由位于以下目录中的 shell 脚本处理:/usr/lib/news/ctl.
这些消息中的大多数在 C News 处理文章时自动执行其操作,而无需通知新闻管理员。默认情况下,只有 checkgroups 消息会交给新闻管理员处理,但您可以通过编辑脚本来更改此设置。
最广为人知的消息是 cancel 消息,用户可以使用它来取消之前发送的文章。如果文章存在,这将有效地从假脱机目录中删除该文章。cancel 消息会转发到所有接收受影响组新闻的站点,无论是否已经看到该文章。这考虑到了原始文章可能比取消消息延迟到达的可能性。一些新闻系统允许用户取消其他人的消息;这当然是绝对不允许的。
处理新闻组创建或删除的两个消息是 newgroup 和 rmgroup 消息。只有在 Usenet 用户之间进行讨论和投票之后,才能创建“常规”层次结构以下的新闻组。alt 层次结构的规则允许接近无政府状态。有关更多信息,请参阅 news.announce.newusers 和 news.announce.newgroups 中的定期帖子。除非您确定自己被允许这样做,否则永远不要自己发送 newgroup 或 rmgroup 消息。
checkgroups 消息由新闻管理员发送,以使网络内的所有站点同步其活动文件,以反映 Usenet 的实际情况。例如,商业互联网服务提供商可能会向其客户的站点发送此类消息。主要层次结构的“官方” checkgroups 消息每月由其版主发布到 comp.announce.newgroups。但是,它是作为普通文章发布的,而不是作为控制消息。要执行 checkgroups 操作,请将这篇文章保存到一个文件,例如/tmp/check,删除控制消息本身开头之前的所有内容,并使用以下命令将其提供给 checkgroups 脚本
# su news -c "/usr/lib/news/ctl/checkgroups" < /tmp/check |
这将更新您的新闻组列表文件,使用新的组列表,并添加在本地组列表中列出的组。旧的新闻组列表文件将被移动到newsgroups.bac。请注意,本地发布消息很少有效,因为 inews 命令(用于接受和发布用户文章的命令)拒绝接受如此大的文章。
如果 C News 在 checkgroups 列表和活动文件之间发现不匹配,它会生成一个命令列表,用于更新您的站点,并将其通过邮件发送给新闻管理员。
输出通常如下所示
From news Sun Jan 30 16:18:11 1994 Date: Sun, 30 Jan 94 16:18 MET From: news (News Subsystem) To: usenet Subject: Problems with your active file The following newsgroups are not valid and should be removed. alt.ascii-art bionet.molbio.gene-org comp.windows.x.intrisics de.answers You can do this by executing the commands: /usr/lib/news/maint/delgroup alt.ascii-art /usr/lib/news/maint/delgroup bionet.molbio.gene-org /usr/lib/news/maint/delgroup comp.windows.x.intrisics /usr/lib/news/maint/delgroup de.answers The following newsgroups were missing. comp.binaries.cbm comp.databases.rdb comp.os.geos comp.os.qnx comp.unix.user-friendly misc.legal.moderated news.newsites soc.culture.scientists talk.politics.crypto talk.politics.tibet |
当您从新闻系统收到这样的消息时,不要自动相信它。根据 checkgroups 消息的发送者,它可能缺少一些组,甚至整个层次结构;您应该小心删除任何组。如果您发现列出的缺少组是您想要在站点上保留的组,则必须使用 addgroup 脚本添加它们。将缺少组的列表保存到一个文件,并将其提供给以下小脚本
#!/bin/sh # WHOIAM=`whoami` if [ "$WHOIAM" != "news" ] then echo "You must run $0 as user 'news'" >&2 exit 1 fi # cd /usr/lib/news while read group; do if grep -si "^$group[[:space:]].*moderated" newsgroup; then mod=m else mod=y fi /usr/lib/news/maint/addgroup $group $mod done |
最后,有三个消息可以用来了解网络的拓扑结构。这些消息是 sendsys、version 和 senduuname。它们使 C News 返回sys文件给发送者,以及软件版本字符串和 uuname 的输出。C News 对 version 消息非常简洁;它返回一个简单的、朴素的C.
同样,您绝不应该发出这样的消息,除非您已确保它不会离开您的(区域)网络。对 sendsys 消息的回复可能会迅速使 UUCP 网络瘫痪。[1]
[1] | 我也不想在互联网上尝试这样做。 |