21.8. 控制消息

Usenet 新闻协议知道一类特殊的文章,这些文章会触发新闻系统的特定响应或操作。这些文章被称为控制消息。它们通过存在于文章标题中的控制字段来识别,该字段位于文章标题中,包含要执行的控制操作的名称。它们有几种类型,所有类型都由位于以下目录中的 shell 脚本处理:/usr/lib/news/ctl.

这些消息中的大多数在 C News 处理文章时自动执行其操作,而无需通知新闻管理员。默认情况下,只有 checkgroups 消息会交给新闻管理员处理,但您可以通过编辑脚本来更改此设置。

21.8.1. cancel 消息

最广为人知的消息是 cancel 消息,用户可以使用它来取消之前发送的文章。如果文章存在,这将有效地从假脱机目录中删除该文章。cancel 消息会转发到所有接收受影响组新闻的站点,无论是否已经看到该文章。这考虑到了原始文章可能比取消消息延迟到达的可能性。一些新闻系统允许用户取消其他人的消息;这当然是绝对不允许的。

21.8.2. newgroup 和 rmgroup

处理新闻组创建或删除的两个消息是 newgrouprmgroup 消息。只有在 Usenet 用户之间进行讨论和投票之后,才能创建“常规”层次结构以下的新闻组。alt 层次结构的规则允许接近无政府状态。有关更多信息,请参阅 news.announce.newusersnews.announce.newgroups 中的定期帖子。除非您确定自己被允许这样做,否则永远不要自己发送 newgrouprmgroup 消息。

21.8.3. checkgroups 消息

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

21.8.4. sendsys、version 和 senduuname

最后,有三个消息可以用来了解网络的拓扑结构。这些消息是 sendsysversionsenduuname。它们使 C News 返回sys文件给发送者,以及软件版本字符串和 uuname 的输出。C News 对 version 消息非常简洁;它返回一个简单的、朴素的C.

同样,您绝不应该发出这样的消息,除非您已确保它不会离开您的(区域)网络。对 sendsys 消息的回复可能会迅速使 UUCP 网络瘫痪。[1]

注意

[1]

我也不想在互联网上尝试这样做。