在UNIX操作系统中,为了通知用户某条信息,我们常常采用向用户能看到的屏幕写信息的方法实现。
向单一屏幕发送信息
每个登录主机系统的用户都分配有一个终端号,例如主控台上的12个屏幕分别为tty01~tty12,从多用户卡上登录一般有tty2a、tty2b、tty21a……等等终端设备号,如果是远程登录则为ttyp0、ttyp1等虚拟终端号。它们对应的终端设备文件都在/dev目录下。
echo'让我告诉你:……' > /dev/tty03 这种方法使用了输出转向符“>”直接写终端文件/dev/tty03来实现向屏幕发送信息。与以下其他三种方式不同的是,这种方法是针对终端的,而不是针对登录用户的,所以即使该终端没有用户登录,使用这种方法也可以向屏幕发送信息。但其他三种方法只能对有用户登录的屏幕发送信息。
向指定用户发送信息
同一个系统用户可以在多个终端登录,例如超级用户可以在主控台三号屏幕,同时也可以在多用户卡连接的tty21c终端登录。此时要向指定屏幕发送信息可以用write命令。 write root tty03 如果用户只在一个屏幕登录,可以省略第二个参数。利用这个命令可以实现聊天功能,因为每次回车后信息即发送至指定屏幕,这种特性是其他几种发送信息方式无法实现的。“终止”使用Ctrl+d组合键。
向登录主机的所有用户发送信息
多用户系统特有的广播概念:像无线广播一样,让所有人都听到你的声音。 wall wall -g group wall -g root see.txt 例子中“-g”参数指定用户组,实现向特定组发送信息的功能。换言之,系统中有多个用户组登录,你只想将信息广播到ROOT超级用户组属性登录的用户屏幕,可以用“-g root”参数。无参数的wall命令向所有登录系统的用户发送屏幕信息,一般用于要紧急关机的场合,提示用户在规定时间保存资料、退出系统。要广播的信息可以是一个文本文件中的内容,也可以直接输入,但与write不同的是,直接输入时每行信息回车后并不发送,只有在Ctrl+d组合键确认输入结束后才全部发送。需要注意的是:如果系统中无其他用户登录,各个屏幕(终端)都处于Login:等待登录状态,那么wall命令发送的信息就不会显示在屏幕上。
向网络中的用户屏幕发送信息
上面的三种方法只能对本地主机的屏幕发送信息,实际工作中我们会需要向网络中多台Unix主机的用户屏幕做同样的操作,以便统一行动,此时就要用到网络广播命令rwall。 rwall 123.45.67.89 < see.txt 它的参数就是要接受信息的Unix主机IP地址,使用“<”转向符将文本文件信息发送到指定主机的所有有用户登录的屏幕上。rwall命令不需要登录对方主机,不需要口令。实际应用中一般都作成一个shell文档,将要接受信息的主机列入其中,然后统一发送。例如shell文档为gb: rwall 123.45.67.89 < $1 rwall 123.45.67.90 < $1 rwall 123.45.67.91 < $1 …… 发送信息时:./gb see.txt。 同样,远程主机的屏幕只有有用户登录才能接受到信息,在login:状态下不会有信息发送到屏幕上。如果对方主机已经关闭,或者线路出现故障,系统会提示:“Couldn't contact 123.45.67.89 : RPC : Timed out”。 以上方法、命令在SCO Unix5.05系统中测试通过,在其他Unix系统中可能命令的具体形式会有所变化。