如何获取所有活动终端

在Linux系统中,向所有已登录用户发送消息是系统管理员进行维护通知、紧急警报或批量操作的常见需求,以下是几种可靠且高效的方法,适用于大多数Linux发行版(如Ubuntu、CentOS、Debian等),注意:这些方法仅对当前已登录且有活动终端的用户生效,未登录用户无法接收消息。


方法1:使用 wall 命令(推荐)

wall(Write All)是专为广播消息设计的命令,所有登录用户会即时收到通知。

操作步骤:

  1. 打开终端,输入以下命令(需管理员权限):
    sudo wall
  2. 输入消息内容(支持多行),按 Ctrl+D 结束输入:
    紧急维护通知:
    系统将于10分钟后重启,请保存工作!
    [按 Ctrl+D 发送]
    • 效果:所有用户的终端会显示类似提示:
      Broadcast message from admin@server (pts/0) at 15:30 ...
      紧急维护通知:
      系统将于10分钟后重启,请保存工作!

权限说明:

  • 普通用户可向同一用户组的登录终端发送消息。
  • 向所有用户发送需 sudo 或 root 权限。

方法2:遍历 /dev/pts 写入消息

通过直接向用户终端设备文件写入消息(需 root 权限)。

操作步骤:

  echo "【通知】磁盘空间不足,请清理文件!" > /dev/pts/$pts
done
  • 原理:/dev/pts/ 目录存储所有登录终端的虚拟设备文件(如 SSH、本地终端)。
  • 风险:若终端号不连续(如 pts/1、pts/3),需过滤有效终端:
    for pts in $(w -h | awk '{print $2}'); do
      echo "消息内容" > /dev/$pts
    done

方法3:结合 write 命令批量发送

write 命令可向指定用户发送消息,结合 w 命令实现批量操作。

操作步骤:

# 获取所有登录用户列表
for user in $(w -h | awk '{print $1}' | sort -u); do
  echo "请及时更新密码!" | sudo write $user
done
  • 效果:每个用户会收到独立消息:
    Message from root@server on pts/0 at 15:40 ...
    请及时更新密码!

⚠️ 注意事项与常见问题

  1. 权限要求:
    • wall 和 /dev/pts 写入需 root 权限。
    • write 命令允许用户间通信,但向其他用户发送需权限(可通过 mesg y 开启接收)。
  2. 未登录用户:无主动通知机制,需通过邮件或计划任务补充。
  3. 图形界面用户:消息会显示在终端,若用户未打开终端则无法接收。
  4. 安全性:避免滥用广播功能,可能干扰用户工作。

总结建议

方法 适用场景 优势
wall 紧急通知、全体广播 简单直接,系统原生支持
写入 /dev/pts 脚本自动化场景 灵活控制终端
write 批量 需区分用户的定向消息 支持个性化通知

推荐实践:

  • 日常广播优先用 sudo wall。
  • 脚本中批量操作用 /dev/pts 遍历。
  • 需记录消息日志时,可结合 logger 命令(如 logger -t BROADCAST "消息")。

引用说明基于 Linux 内核文档(kernel.org)、wall 命令手册页(man 1 wall)及 UNIX 标准通信协议(IEEE Std 1003.1),实践环境为 Ubuntu 22.04 LTS 和 CentOS 7。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6394.html

赞 (0)
酷番叔酷番叔
上一篇 2025年7月6日 05:39
下一篇 2025年7月6日 06:02

相关推荐

  • 快速检查软件是否安装?轻松搞定!

    为什么需要发送syslog?集中管理:将多台服务器的日志汇总到单一平台(如ELK、Graylog),实时分析:快速检测安全事件(如入侵尝试)或系统错误,合规性:满足GDPR、等保等法规对日志存储的要求,核心概念syslog协议Linux通过syslog守护进程(如rsyslog/syslog-ng)处理日志,支……

    2025年7月17日
    26200
  • Linux程序无响应?8种专业停止法防数据丢失!

    终端前台程序:Ctrl + C(最常用)适用场景:程序在终端前台运行(如 python script.py 或 tail -f logfile),操作:直接按 Ctrl + C 组合键,发送 SIGINT 信号,程序会优雅终止(允许保存数据),注意:若程序未响应,可能需要更强力的方法,通过进程ID停止:kill……

    2025年7月27日
    23000
  • Linux网络不通?Ping命令如何快速排障

    基础用法基本命令格式ping [目标IP或域名]示例:ping 8.8.8.8 # 测试与Google DNS的连通性ping example.com # 通过域名测试(自动解析为IP)关键参数解析参数作用示例-c [次数]指定发送数据包数量ping -c 4 8.8.8.8(发送4次后停止)-i [秒数]设置……

    2025年6月22日
    37400
  • Linux操作系统如何详细具体更改用户权限、信息或用户组属性的方法?

    Linux操作系统中,用户与组是权限管理的核心,合理更改用户或组信息可确保系统安全与资源分配的准确性,以下从用户管理、组管理及权限关联三个维度,详细说明具体操作方法,用户管理:修改用户属性用户管理主要通过usermod命令实现,可调整用户名、家目录、登录Shell、UID(用户标识符)、主组及附加组等属性,操作……

    2025年9月27日
    28400
  • aws linux如何连接

    SSH客户端,使用实例的公有DNS和相应密钥或密码,可连接AWS Linux

    2025年8月18日
    23700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信