拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Linux命令-write(向其他用户的终端发送消息)

Linux命令-write向其他用户的终端发送消息 简介 语法⚙️ 基本用法1. 向指定用户发送消息2. 向指定终端发送3. 检查用户是否允许接收消息4. 允许/拒绝接收消息5. 在脚本中使用6. 配合 wall 广播消息7. 查看所有登录用户8. 远程通知场景9. 发送文件内容10. 处理 write 失败 场景示例场景一服务器维护通知场景二登录提醒场景三配合 watch 监控⚠️ 注意 相关 总结 FAQ快速参考write用于向系统中其他登录用户的终端发送消息是talk/mesg系列的组成部分。虽然现代已被即时通讯工具取代但在无 GUI 的服务器环境中write仍是管理员通知用户的快捷方式。 简介write向指定用户的指定终端发送消息对方终端会实时显示你的消息。默认情况下用户可以用mesg n拒绝接收write消息。用mesg y重新允许。write属于bsdutils包在大多数 Linux 发行版中预装。 语法write用户名[终端名]终端名可选格式如pts/0。不指定时默认向该用户的第一个终端发送。⚙️ 基本用法1. 向指定用户发送消息# 向 alice 的终端发送消息$writealice write: alice is logged on pts/0 write:typeyour message, end withCtrlDHello Alice, please check your email. ^D# 按 CtrlD 结束发送# 对方的终端会显示Message from root on localhost at14:30... Hello Alice, please check your email. EOF2. 向指定终端发送# 查看 alice 的登录终端$whoalice pts/02026-06-14 08:30(192.168.1.100)alice pts/12026-06-14 09:15(192.168.1.100)# 向 alice 的 pts/1 发送$writealice pts/13. 检查用户是否允许接收消息# 查看当前用户的消息设置$ mesg is y# 允许接收# 查看其他用户的设置需 root$su- alice-cmesg is n# 拒绝接收4. 允许/拒绝接收消息# 允许他人向自己发送 write 消息$ mesg y# 拒绝接收$ mesg n# 仅在当前登录会话中生效# 永久设置写入 ~/.bashrcechomesg y~/.bashrc5. 在脚本中使用#!/bin/bash# 向所有登录用户发送通知MESSAGE系统将在 5 分钟后重启请保存工作foruserin$(who|awk{print $1}|sort-u);doif[$user!$(whoami)];thenecho$MESSAGE|write$user2/dev/nullfidoneecho通知已发送6. 配合 wall 广播消息# write向指定用户发送$writealice# wall向所有用户广播$ wall系统将在 5 分钟后重启7. 查看所有登录用户$whoroot pts/02026-06-14 08:00(192.168.1.1)alice pts/12026-06-14 08:30(192.168.1.100)bob pts/22026-06-14 09:00(10.0.0.5)# 查看详细登录信息$ w8. 远程通知场景# SSH 登录后通知其他管理员$sshserver $whoamiadmin $ wall管理员 admin 已登录服务器请注意。9. 发送文件内容# 将文件内容发送给用户$writealice/tmp/notify.txt10. 处理 write 失败# 对方拒绝接收时$writealice write: alice has messages disabled# 用 wall 替代wall 不受 mesg 限制但需 root$sudowall紧急通知... 场景示例场景一服务器维护通知#!/bin/bash# 维护前通知所有在线用户echo 发送维护通知 wall系统维护通知服务器将在 10 分钟后重启进行维护。请保存工作并退出。echo通知已广播场景二登录提醒# 在 /etc/profile.d/ 中添加登录提醒脚本cat/etc/profile.d/notify.shEOF if [ $(whoami) ! root ]; then echo 欢迎 $(whoami)。当前在线用户 /tmp/welcome.msg who /tmp/welcome.msg cat /tmp/welcome.msg fi EOF场景三配合watch监控# 当某个条件触发时通知所有用户watch-n30if [ $(hostname) main-server ]; then wall 主机名已变更; fi⚠️ 注意对方可以用mesg n拒绝接收write消息此时write会报错。write消息会直接显示在对方终端可能打断对方工作。请谨慎使用。用wall广播消息需要root权限普通用户的wall也会被mesg n过滤。现代 Linux 发行版默认可能未安装write/bsdutils需要手动安装。 相关命令用途mesg设置是否允许接收write消息wall向所有用户广播消息需 roottalk交互式聊天工具write的升级版who查看当前登录的用户列表pinky查看用户详细信息 总结write是服务器环境下发送通知的旧式工具write 用户名向指定用户发送消息mesg y/n允许/拒绝接收消息wall广播消息需 root 权限对方可以拒绝接收发送前先用who检查现代环境建议用即时通讯工具替代 FAQQ1为什么write alice报错has messages disabledA因为 alice 执行了mesg n拒绝接收消息。可以请对方执行mesg y重新允许或者用sudo wall广播不受mesg限制。Q2write和wall有什么区别Awrite向指定用户发送私人消息wall向所有用户广播。普通用户只能用writewall需要 root 权限某些系统也允许普通用户wall但会被mesg n过滤。Q3如何查看谁在线Awho# 简略列表w# 详细列表含负载、进程pinky# 更友好的格式Q4write消息可以包含文件内容吗A可以用重定向writealice/path/to/file.txtQ5为什么我发送的write消息对方看不到A① 对方可能执行了mesg n② 对方可能已注销③ 某些终端设备如tmux窗格可能不支持接收write消息。用who确认对方确实在线。Q6如何阻止某个特定用户给我发writeAmesg n是全局设置无法针对特定用户。如果需要精细控制可以考虑用tmux或screen的窗格隔离或者配置pinky的访问控制。Q7write能发送中文吗A可以但依赖终端的字符编码设置。如果对方终端是 UTF-8中文可以正常显示。如果对方终端是 ASCII中文会显示为乱码。Q8现代 Linux 还有必要学write吗A在生产服务器维护场景中偶尔有用当 SSH 登录且无法使用即时通讯工具时。但日常工作中已被 Slack、钉钉、企业微信等工具取代。了解即可不必深入。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门