在 Linux 中,可以通过终端向已登录的用户发送消息,常用的方法有以下几种:
1. 使用 wall
命令(广播消息)
wall
(Write ALL)命令可以向所有已登录用户的终端发送广播消息。
-
发送消息:
sudo wall "系统将在5分钟后重启,请保存工作!"
或通过输入多行内容(按
Ctrl+D
结束):sudo wall 系统维护中,请及时保存工作。 按 Ctrl+D 结束输入。
-
所有用户会收到类似以下格式的消息:
Broadcast message from root@hostname (pts/0) at 10:00 ... 系统维护中,请及时保存工作。
2. 使用 write
命令(单用户消息)
write
命令可以向特定用户的终端发送消息(需用户允许接收消息)。
-
语法:
write <用户名> [<终端设备>]
示例:
write alice pts/1
输入消息后按
Enter
,结束时按Ctrl+C
。 -
步骤:
-
查看当前登录用户及其终端:
who # 输出类似: # alice pts/1 2023-10-01 09:00 (192.168.1.10) # bob pts/2 2023-10-01 09:05 (192.168..2)
-
向用户
alice
的pts/1
发送消息:write alice pts/1 Hello Alice,请检查日志文件。
-
对方终端会显示:
Message from root@hostname on pts/0 at 10:00 ... Hello Alice,请检查日志文件。 EOF
-
-
注意:
-
如果用户禁用了消息(
mesg n
),需要先允许接收消息(mesg y
)。 -
若未指定终端设备,默认选择用户最早登录的终端。
-
3. 直接写入终端设备
每个用户的终端对应 /dev/pts/X
文件(X
为终端编号),可直接向其写入消息。
-
查看用户的终端设备:
who # 输出示例: # alice pts/1 2023-10-01 09:00 (192.168.1.10)
-
发送消息:
echo "Hello from admin" > /dev/pts/1
或使用
sudo
避免权限问题:sudo sh -c 'echo "紧急通知!" > /dev/pts/1'
4. 使用 echo
结合 write
(脚本中推荐)
在脚本中批量发送消息时,可以组合命令:
echo "系统即将升级!" | write alice pts/1
注意事项
-
权限问题:
-
向其他用户的终端发送消息可能需要
sudo
权限。 -
用户可通过
mesg y
或mesg n
允许/禁止接收消息(wall
会绕过此限制)。
-
-
查看用户终端:
-
使用
who
或w
命令确认用户是否在线及终端设备号。
-
-
避免滥用:
-
频繁发送消息可能干扰其他用户,建议用于重要通知。
-
总结
-
广播通知:
wall
(适合全体用户)。 -
单用户私信:
write
或直接写入/dev/pts/X
。 -
脚本自动化:
echo
结合终端设备路径。