`
cloudeagle_bupt
  • 浏览: 534012 次
文章分类
社区版块
存档分类
最新评论

linux下 write/wall 给其它用户/终端 发送即时文本消息

 
阅读更多

[liuqiang@localhost bin]$ w
21:34:34 up 2 days, 5:00, 4 users, load average: 185.57, 213.49, 230.35
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
zyz pts/0 202.117.10.246 09:33 1:36m 3:09m 0.00s sshd: zyz [priv]
root pts/1 202.117.10.9 19:35 0.00s 21.16s 0.04s w
root pts/2 202.117.10.9 19:58 2:14 0.21s 0.07s -bash
root pts/3 202.117.10.9 21:32 2:08 0.02s 0.02s -bash

比如给在线的某人发消息:

write zyz pts/0
Hello , ZHangxiaopang~ Have A GoodD^H Night!

Ctrl C结束




from:http://verycto.blog.51cto.com/904981/394337

from:http://blog.donews.com/vanfan/archive/2011/12/20/1579866.aspx

一直以来,都是在我的debian机子上架一个自己写的ajax聊天工具,

方便大家传送一下比较即时的消息比如好看的文章网址等,如果是文件,

就直接拖到我的samba共享里,因为我们几个机子都是Linux,

今天试了一下Linux终端里自带的聊天命令:write 和 wall 。

who 查看一下哪些人登录:

heylin tty7 2010-05-03 20:17 (:0)
heylin pts/2 2010-05-03 20:24 (t.xiaoji.com)
heylin pts/4 2010-05-03 22:28 (:0.0)
heylin pts/5 2010-05-03 22:08 (debian-2.local)

pts/2是我登录的,pts/5是某人的。pts/4是他登录的 tty7是gnome的
命令格式:write heylin /dev/pts/4 回车
输入消息:hello, msg from xiaoji
不过不支持中文。write执行后,可以接受别人的消息,也可以继续发消息,但如果一开始是别人先发送给你,你就必须再打开一个终端才能发消息。

wall ,wall(write all)命令是广播,所有的人都可以收到。
wall [message]?NO,这个命令已经过时了,新的格式是:

echo "hello,This is a message" | wall
或者
hadoop@clone1:~/download/hadoop-0.20.203.0/conf 04:46:27$
wall <<<"11111111111"

Broadcast Message from hadoop@clone1
(/dev/pts/2) at 4:46 ...

11111111111

hadoop@clone1:~/download/hadoop-0.20.203.0/conf 04:46:37$


Linux的聊天蛮有意思的,不过,如果你正在终端编辑一个文件,那就惨了,因为消息会直接插入到你的编辑文件中!慎用~

-----------------------------------------------------------------------------------------------------------------

从一个虚拟终端向另一个虚拟终端发消息,假设都是用root帐号登录的.
[root@localhost ~]#w # 目前都有哪几个终端连接
root pts/1 Feb 17 16:58 (123.118.16.**)
root pts/2 Feb 17 19:53 (123.112.44.**)
root pts/3 Feb 17 20:01 (123.112.44.**)
[root@localhost ~]#who am i #看下自己是哪个终端
root pts/3 Feb 17 20:01 (123.112.44.**)
[root@localhost ~]#write root pts/2 #root是登陆的帐户 pts/2 是终端号 这样就可向别一个终端发消息了 用CTRL+C 来结束!!!!

1,查看当前所有登录用户所使用的终端
finger
w

2,查看自己所使用的终端
tty

3,给某个终端的用户发送信息
write root /dev/pts/4
hello,you are donkey
然后回车,再按ctrl+c即可

4,发公告信息给所有终端用户
wall this system will halt after 5 minutes #新版的 wall 不能直接这么用了,需要用 管道 或者 文件 或者 here string/here document
// wall 就是write all

5,禁止别人把信息显示在我的终端
mesg n
允许别人把信息显示在我的终端
mesg y




设置登录提示

  /etc/motd文件的用途

  /etc/motd?即message?of?today(布告栏信息),每次用户登录时,/etc/motd文件的内容会显示在用户的终端。系统管理员可以在文件中编辑系统活动消息,例如:管理员通知用户系统何时进行软件或硬件的升级、何时进行系统维护等。如果shell支持中文,还可以使用中文,这样看起来更易于了解。/etc/motd?缺点是,现在许多用户登录系统时选择自动进入图形界面,所以这些信息往往看不到。

  /etc/issue文件的用途

  /etc/issue文件的使用方法与/etc/motd文件相差不大,它们的主要区别在于:当一个网络用户或通过串口登录系统上时,/etc/issue的文件内容显示在login提示符之前,而/etc/motd内容显示在用户成功登录系统之后。

  使用write命令

  用户可以使用write命令给其他在线用户发送消息。格式:

  #writeusername[tty]

  在Shell提示符号输入write,username指接受发送信息的用户名。如果一个用户多次登录到系统,tty参数指定要发送的终端。使用write发送信息的前提条件是该用户已经登录到系统。否则会出现以下提示:

  #writecjh
  write:cjhisnotloggedin

  可以使用who命令查询登录用户名称。接着可以输入要发送的信息。当输入完毕后,键入EOF表示信息结束,用Crtl+D组合键发送信息。输入内容会出现在用户的屏幕上,同时通信中止。

  如果在网络上可以使用write命令在username后加入主机名称或域名,建立网络通信。如果要和cao主机上的bj用户通信使用命令:

  #writebj@cao

  可以使用rusers命令列出所有局域网上的登录用户。

  wall命令

  如果想要发送一条信息给系统中所有用户,可以使用wall命令,wall表示:writeall。输入wall,然后编辑信息,如果shell支持可以使用中文。然后使用Crtl+D组合键发送信息。这样系统所有登录用户的桌面会收到信息。如果在网络上,可以使用rwall命令把信息发送到局域网上所有的用户。

  talk命令

  talk命令可以和另一个登录系统用户实现双向对话。系统管理员输入信息,用户也可以输入自己的信息。双方都可以看到交流时的屏幕信息。格式:

  #talkusername

  一个例子:

  #talkb

  对方屏幕显示:

  MessagefromTalk_Daemon@www.cao.comat7:18...
  talk:connectionrequestedbyb@www.cao.com.
  talk:respondwith:talkb@www.cao.com

  然后进入talk分屏界面,双方输入的信息。会出现的对方的屏幕。

  用户完成会话后使用Crth+C断开连接。和write一样可以使用在username后加入主机名称或域名,建立网络会话连接。

  mesg命令

  用户可以阻止其他用户给自己发送消息打断工作,使用mesgn命令禁止其他用户发送消息。当别人试图再使用write给他发送信息时,发送者将会看见提示:

  #write:userhasmessagesdisabledonpts/n?

  但是超级用户可以给任何用户发送消息,即使用户使用mesgn命令。要恢复接受信息输入:

  mesg-y

在UNIX操作系统中,为了通知用户某条信息,我们常常采用向用户能看到的屏幕写信息的方法实现。
  向单一屏幕发送信息
  每个登录主机系统的用户都分配有一个终端号,例如主控台上的12个屏幕分别为tty01~tty12,从多用户卡上登录一般有tty2a、tty2b、tty21a……等等终端设备号,如果是远程登录则为ttyp0、ttyp1等虚拟终端号。它们对应的终端设备文件都在/dev目录下。
  echo'让我告诉你:……'>/dev/tty03

  这种方法使用了输出转向符“>”直接写终端文件/dev/tty03来实现向屏幕发送信息。与以下其他三种方式不同的是,这种方法是针对终端的,而不是针对登录用户的,所以即使该终端没有用户登录,使用这种方法也可以向屏幕发送信息。但其他三种方法只能对有用户登录的屏幕发送信息。


  向指定用户发送信息


  同一个系统用户可以在多个终端登录,例如超级用户可以在主控台三号屏幕,同时也可以在多用户卡连接的tty21c终端登录。此时要向指定屏幕发送信息可以用write命令。

  writeroottty03

  如果用户只在一个屏幕登录,可以省略第二个参数。利用这个命令可以实现聊天功能,因为每次回车后信息即发送至指定屏幕,这种特性是其他几种发送信息方式无法实现的。“终止”使用Ctrl+d组合键。


  向登录主机的所有用户发送信息


  多用户系统特有的广播概念:像无线广播一样,让所有人都听到你的声音。

  wall

  wall-ggroup

  wall-grootsee.txt

  例子中“-g”参数指定用户组,实现向特定组发送信息的功能。换言之,系统中有多个用户组登录,你只想将信息广播到ROOT超级用户组属性登录的用户屏幕,可以用“-groot”参数。无参数的wall命令向所有登录系统的用户发送屏幕信息,一般用于要紧急关机的场合,提示用户在规定时间保存资料、退出系统。要广播的信息可以是一个文本文件中的内容,也可以直接输入,但与write不同的是,直接输入时每行信息回车后并不发送,只有在Ctrl+d组合键确认输入结束后才全部发送。需要注意的是:如果系统中无其他用户登录,各个屏幕(终端)都处于Login:等待登录状态,那么wall命令发送的信息就不会显示在屏幕上。


  向网络中的用户屏幕发送信息


  上面的三种方法只能对本地主机的屏幕发送信息,实际工作中我们会需要向网络中多台Unix主机的用户屏幕做同样的操作,以便统一行动,此时就要用到网络广播命令rwall。

  rwall123.45.67.89<see.txt

  它的参数就是要接受信息的Unix主机IP地址,使用“<”转向符将文本文件信息发送到指定主机的所有有用户登录的屏幕上。rwall命令不需要登录对方主机,不需要口令。实际应用中一般都作成一个shell文档,将要接受信息的主机列入其中,然后统一发送。例如shell文档为gb:

  rwall123.45.67.89<$1

  rwall123.45.67.90<$1

  rwall123.45.67.91<$1

  ……

  发送信息时:./gbsee.txt。

  同样,远程主机的屏幕只有有用户登录才能接受到信息,在login:状态下不会有信息发送到屏幕上。如果对方主机已经关闭,或者线路出现故障,系统会提示:“Couldn'tcontact123.45.67.89:RPC:Timedout”。

  以上方法、命令在SCOUnix5.05系统中测试通过,在其他Unix系统中可能命令的具体形式会有所变化。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics