☰
Linux write 命令详解:向指定登录用户终端实时发送消息
2026/10/4 1:21:03 网站建设 项目流程
  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

本文基于 write 命令手册 展开,讲解 Linux 中通过write命令向指定登录用户终端发送信息的完整用法,并结合本仓库中 mesg、wall、who、talk 等相关命令文档,梳理从消息发送、终端定位到权限控制的完整链路。读完本文,你将掌握如何定位目标用户的登录终端、向单个终端实时发送文本消息,以及如何配合mesg机制管理与控制消息接收。

一、write 命令是什么

write命令用于向指定登录用户终端上发送信息。它属于 Linux 经典的即时文本消息工具(util-linux 等基础软件包自带),其工作方式是:发送方在本机终端输入内容,write将内容逐行实时传递给对方登录终端并显示在对方屏幕上。

它与wall的最大区别在于作用范围:

  • write:点对点,只发给指定的某一个登录用户(可精确到某个终端);
  • wall 命令:广播,向系统当前所有打开的终端输出信息。

两者结合使用,前者用于精准沟通(如运维提醒某个正在登录的同事),后者用于系统级通告(如即将重启、维护通知)。

二、语法与参数

write(参数)
参数说明
用户指定要接收信息的登录用户,必填
登陆终端指定接收信息的用户的登录终端(可选)

核心规则:如果接收信息的用户不只登入本地主机一次(即有多个登录终端会话),就必须通过第二个参数指定接收信息的终端机编号,否则无法确定把消息发给哪一个终端。

三、实战用法

3.1 向单个登录用户发送消息

当目标用户Rollaend在本机只有一个登录会话(一条连线)时,直接指定用户名即可:

write Rollaend

执行后进入消息输入模式,接下来将信息打上去,输入完毕按下Ctrl+D(EOF)结束输入,write命令就会将信息传给对方;也可以按Ctrl+C中断发送。

3.2 向指定终端发送消息(多会话场景)

当用户Rollaend有多个登录会话,例如同时开着pts/2、pts/3两个终端时,必须指定终端,否则系统无法确定发送目标:

write Rollaend pts/2

同样地,输入完成后按Ctrl+D结束发送。

3.3 先确认目标用户与终端

在发送之前,建议先用相关命令确认目标用户当前是否在线、以及其登录终端编号:

  • who 命令:列出所有已登录用户的名称、终端(LINE)、登录时间和来源主机,例如:
[root@localhost ~]# who root pts/0 2013-08-19 15:04 (192.168.0.134) root pts/1 2013-12-20 10:37 (180.111.155.40)
  • tty 命令:显示当前终端对应的设备文件名,可用于确认自己所在的终端,例如/dev/pts/2。
  • users 命令:打印当前主机所有登录用户的名称(同名多次出现表示多个会话)。

结合这三个命令,可以精准确认「谁在线、在哪个终端、目标是否多会话」,再决定是否需要携带终端参数。

四、与 mesg 权限机制的联动:为什么消息会发送失败

文档中特别强调:若对方设定mesg n,则此时信息将无法传给对方。

mesg命令用于设置当前终端的写权限,即是否允许其他用户通过write将信息直接显示在你的屏幕上,参见 mesg 命令:

mesg y # 允许系统用户将信息直接显示在你的屏幕上 mesg n # 不允许系统用户将信息直接显示在你的屏幕上

这一权限机制正是write能否送达消息的前提。工作流程如下:

  1. 发送方执行write 用户名 [终端];
  2. 内核依据目标终端的写权限(mesg 状态)决定是否放行;
  3. 若目标设置了mesg n,发送方会收到类似write: 用户 is not logged in / 没有权限之类的拒绝提示,消息无法送达;
  4. 若目标为mesg y(多数终端默认开启),消息才会实时显示在对方屏幕上。

所以,在多用户服务器上,"发消息前先确认对方mesg状态" 是必要的排查步骤。同时who -T(或who -w)可以直接显示每个用户的消息状态,+表示允许写入、-表示禁止写入、?表示无法查找到终端设备,参见 who 命令 中的相关选项说明。

如果目标用户在做紧急工作(如编辑邮件)时不希望被消息打搅,可以执行mesg n暂时拒绝接收;完成紧急工作后建议立即执行mesg y重新打开接收开关,避免错过重要信息——这一交互逻辑在 talk 命令 文档中也有同样的体现(mesg n后对方会收到[Your party is refusing messages]提示)。

五、write 与同类即时消息命令的对比

命令发送范围交互方式典型场景参考文档
write指定单个用户的指定终端单向逐行发送,实时显示在对方屏幕运维与在线用户一对一沟通write
wall系统所有打开的终端单向广播维护、重启等系统级通告wall
talk指定用户(可跨主机)双向实时聊天,屏幕上下分屏需要双向回应的即时交谈talk

三者均受mesg终端写权限约束,这也是 Linux 传统终端即时通信体系(write/wall/talk)共同依赖的权限模型。

六、注意事项与常见问题

  • 消息结束方式:输入完毕后按Ctrl+D(EOF)表示信息结束,write随即把信息传给对方;按Ctrl+C则中断发送。
  • 多终端必须指定终端:目标用户有多条登录会话时,不带终端参数会导致发送失败或目标不明确,务必先用who确认终端编号。
  • 权限拦截:对方设置mesg n时消息无法送达,可提示对方先执行mesg y。
  • 发送范围限制:write是单机终端工具,消息只能发送到本机登录的终端;跨主机通信应使用 talk(支持talk 用户名@主机形式)或其他远程通信手段。
  • 内容实时性:write逐行传送输入内容,对方屏幕实时刷新,适合简短提醒,不适合发送超长文本。

小结

write命令是 Linux 终端点对点即时消息的基础工具:通过「用户 + 可选终端」精确定位接收方,配合Ctrl+D结束输入完成发送,其能否送达取决于目标终端的mesg写权限。实际运维中,建议与 who、tty 组合确认在线用户与终端编号,与 mesg 协同管理接收开关,并区分 wall(广播)与 talk(双向聊天)的适用场景,即可把 Linux 终端的即时通信体系用得规范、可控。

  • 文档
  • 教程

【免费下载链接】linux-command

Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux

项目地址:https://gitcode.com/GitHub_Trending/linux/linux-command
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询