Linux talk命令介绍
talk命令是一个视觉通信程序,它可以把你的终端上输入的内容复制到另一个用户的终端上,就像一个即时通讯服务一样。当你第一次调用talk命令时,它会联系另一个用户机器上的talk守护进程,然后发送以下消息¹:
Message from TalkDaemon@his_machine...
talk: connection requested by your_name@your_machine.
talk: respond with: talk your_name@your_machine
此时,另一个用户就可以通过输入talk your_name@your_machine来回应你。不管他从哪台机器回应,只要他的登录名是相同的。一旦通信建立,双方就可以同时输入;他们的输出会出现在分开的窗口中。按下Ctrl+L可以重新打印屏幕。擦除、删除行和删除单词字符(通常是Ctrl+H, Ctrl+U和Ctrl+W)会正常工作。要退出,按下中断字符(通常是Ctrl+C);talk命令会把光标移动到屏幕底部,并恢复终端到之前的状态。talk命令支持回滚;使用Esc+P和Esc+N来滚动你的窗口,使用Ctrl+P和Ctrl+N来滚动另一个窗口。
Linux talk命令适用的Linux版本
talk命令适用于大多数Linux发行版,但需要安装相应的软件包和配置相应的服务。下面是不同Linux发行版安装和配置talk命令的方法:
Ubuntu/Debian
要在Ubuntu或Debian上使用talk命令,需要安装talk和talk-server软件包²:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install talk
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install talk-server
然后需要创建两个文件:/etc/xinetd.d/talk和/etc/xinetd.d/ntalk,并编辑它们如下:
# default: off
# description: The talk server accepts talk
# requests for chatting with users \
# on other systems.
service talk {
flags = IPv4
disable = no
socket_type = dgram
wait = yes
user = nobody
group = tty
server = /usr/sbin/in.talkd
}
# default: off
# description: The ntalk server accepts
# ntalk connections, for chatting \
# with users on different systems.
service ntalk {
flags = IPv4
disable = no
socket_type = dgram
wait = yes
user = nobody
group = tty
server = /usr/sbin/in.ntalkd
}
最后需要重启xinetd服务:
[linux@bashcommandnotfound.cn ~]$ sudo service xinetd restart
CentOS/Fedora
要在CentOS或Fedora上使用talk命令,需要安装talk和talk-server软件包:
[linux@bashcommandnotfound.cn ~]$ sudo yum install talk
[linux@bashcommandnotfound.cn ~]$ sudo yum install talk-server
然后需要编辑/etc/xinetd.d/talk和/etc/xinetd.d/ntalk文件,把disable=yes改为disable=no¹:
# default: off
# description: The talk server accepts talk requests for chatting with users \
# on other systems.
service talk {
flags = IPv4 # or IPv6 if you want to use IPv6 addressing only.
disable = no # change this to no to enable the service.
socket_type = dgram
wait = yes
user = nobody
group = tty
server = /usr/sbin/in.talkd
}
# default: off
# description: The ntalk server accepts ntalk connections, for chatting \
# with users on different systems.
service ntalk {
flags = IPv4 # or IPv6 if you want to use IPv6 addressing only.
disable = no # change this to no to enable the service.
socket_type = dgram
wait = yes
user = nobody
group = tty
server = /usr/sbin/in.ntalkd
}
最后需要重启xinetd服务:
[linux@bashcommandnotfound.cn ~]$ sudo systemctl restart xinetd
Linux talk命令的基本语法
talk命令的基本语法如下:
talk person [ttyname]
其中,person是要通信的用户的登录名,如果是本地用户,直接输入登录名即可;如果是远程用户,需要输入user@host的形式,其中user是登录名,host是主机名或IP地址。ttyname是要通信的用户的终端名,如果该用户登录了多次,可以用这个参数来指定具体的终端,终端名的形式是ttyXX或pts/X。
Linux talk命令的常用选项说明
talk命令只有一个选项,就是-x,它用来和用户名中包含点号的用户通信。例如:
[linux@bashcommandnotfound.cn ~]$ talk user.name -x
Linux talk命令的实例
下面是一些使用talk命令的实例:
与本地用户通信
要与本地用户通信,只需要输入talk命令和该用户的登录名即可。例如:
[linux@bashcommandnotfound.cn ~]$ talk alice
这样就会向alice发送一个通信请求,如果alice同意,就会出现一个分屏窗口,你可以在上半部分输入内容,alice可以在下半部分输入内容。
与远程用户通信
要与远程用户通信,需要输入talk命令和该用户的user@host形式的名称。例如:
[linux@bashcommandnotfound.cn ~]$ talk bob@192.168.1.100
这样就会向192.168.1.100这台机器上的bob发送一个通信请求,如果bob同意,就会出现一个分屏窗口,你可以在上半部分输入内容,bob可以在下半部分输入内容。
与多次登录的用户通信
要与多次登录的用户通信,需要输入talk命令和该用户的登录名以及终端名。例如:
[linux@bashcommandnotfound.cn ~]$ talk charlie pts/3
这样就会向charlie发送一个通信请求,并指定要使用pts/3这个终端。如果charlie同意,并且在pts/3这个终端上回应,就会出现一个分屏窗口,你可以在上半部分输入内容,charlie可以在下半部分输入内容。
与用户名中包含点号的用户通信
要与用户名中包含点号的用户通信,需要使用-x选项,并输入talk命令和该用户的登录名。例如:
[linux@bashcommandnotfound.cn ~]$ talk dave.jones -x
这样就会向dave.jones发送一个通信请求。如果dave.jones同意,就会出现一个分屏窗口,你可以在上半部分输入内容,dave.jones可以在下半部分输入内容。
退出通信
要退出通信,只需要按下Ctrl+C即可。这样就会结束当前的会话,并恢复终端到之前的状态。
Linux talk命令快捷键
- Ctrl+L:重新打印屏幕。
- Ctrl+H:擦除光标前面的一个字符。
- Ctrl+U:删除当前行。
- Ctrl+W:删除光标前面的一个单词。
- Ctrl+C:退出通信。
- Esc+P:向上滚动自己的窗口。
- Esc+N:向下滚动自己的窗口。
- Ctrl+P:向上滚动对方的窗口。
- Ctrl+N:向下滚动对方的窗口。
Linux talk命令的注意事项
使用talk命令时,需要注意以下几点:
- talk命令需要双方都安装了talk和talk-server软件包,并且启用了talk和ntalk服务,否则会出现错误信息,如Connection refused或No talk daemon。
- talk命令需要双方都允许接收通信请求,否则会出现错误信息,如You have disabled talk。要允许接收通信请求,可以使用mesg命令,如mesg y。
- talk命令需要双方都有相同的终端类型,否则会出现错误信息,如Your party is using a different terminal type。要查看或设置终端类型,可以使用TERM环境变量,如echo $TERM或export TERM=xterm。
- talk命令不支持中文输入和显示,如果输入中文字符,会出现乱码或空白。要解决这个问题,可以使用其他支持中文的聊天工具,如ytalk或write。
评论区