侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux talk命令教程(用法详解):如何用终端与其他用户实时聊天

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。
0

评论区