Linux mesg命令教程:如何控制终端的消息接收(附案例详解和注意事项)

发布时间:2024年01月24日

Linux mesg命令介绍

mesg是一个用户用来控制其他用户是否可以向其关联到标准错误输出的终端设备写入访问权的实用程序。如果允许写入访问,那么像talk(1)和write(1)这样的程序可能会在终端上显示消息。在优先考虑各种安全风险的用户日益增多的情况下,正确的做法是至少对主登录shell默认情况下删除写入访问。为了确保你的tty被设置为你希望的方式,mesg应该在你的登录脚本中执行。不在终端上执行mesg的情况下,mesg会默默地退出,错误状态为2。在这种情况下执行mesg是没有意义的。命令行选项–verbose强制mesg在这种情况下打印警告。自版本2.33起引入了这种行为。

Linux mesg命令适用的Linux版本

在各个版的Linux,包括Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian都可以使用mesg命令,只要mesg在您的登录脚本执行,就可以在您的Linux系统使用mesg命令。常规来说,各版本Linux都已默认安装此工具,无须额外安装。

Linux mesg命令的基本语法

mesg [n|y]

Linux mesg命令的常用选项或参数说明

选项说明
n阻止其他用户的终端消息显示
y允许消息在你的屏幕上显示
如果没有提供选项,mesg将在你的终端上显示当前的访问状态。

Linux mesg命令实例详解

以下是mesg命令一些常见的用法:

实例1:允许其他用户给你发送消息

[linux@bashcommandnotfound.cn ~]$ mesg y

在这个实例里,我们设置终端以允许其他用户向你发送消息。

实例2:阻止其他用户给你发送消息

[linux@bashcommandnotfound.cn ~]$ mesg n

在这个实例里,我们设置终端以禁止其他用户向你发送消息。

实例3:显示当前终端接收消息的状态

[linux@bashcommandnotfound.cn ~]$ mesg

这个实例会显示当前终端的写入状态。

实例4:在脚本中使用mesg命令

你可以在脚本中使用mesg命令来控制脚本的输出是否被显示在终端中。

#!/bin/bash

mesg n
echo "这条消息将不会在终端中显示"
mesg y
echo "这条消息将会在终端中显示"

在这个实例中,我们首先使用mesg n禁止消息在终端中显示,然后在终端中打印一条消息,之后又使用mesg y允许消息在终端中显示,接着再打印一条消息。这样,第一条消息就不会被显示出来,而第二条消息则会被显示出来。

实例5:关闭和打开消息,查看状态

在这个实例中,我们将先关闭消息,然后检查状态,然后再打开消息,然后再次检查状态。

mesg n
mesg 
mesg y
mesg

打开和关闭消息后查看状态将分别返回ny

实例6:为不同的终端设置消息

如果你在多个终端中工作,并且你想为每个终端设置不同的消息状态,你可以在每个终端中分别运行mesg命令。

例如,你可以在第一个终端中运行:

mesg n

然后在第二个终端中运行:

mesg y

然后,只有第二个终端会接收到消息,而第一个终端则不会。

实例7:在.bashrc文件中设置消息

如果你希望每次登录时都禁止消息,你可以在你的~/.bashrc文件中添加mesg n,然后每次你登录时,这个命令就会自动运行。

你可以使用一个文本编辑器打开~/.bashrc文件,然后在文件的末尾添加下面这行:

mesg n

然后,每次你登录时,系统都会运行这条命令,从而禁止消息。

实例8:使用mesg命令阻止会话中断

你可能会经历一个情况,在你正忙于某个任务,比如编译一个大程序,突然其他用户给你发送消息,导致你的会话突然中断,有可能使得你的程序编译失败。这种情况下,你可以使用mesg n命令阻止其他用户发送消息,避免会话因接收到消息而中断。

mesg n
make my_big_program

实例9:查看显示和消息状态

如果想查看当前的访问状态,不带任何参数执行mesg命令即可。如果其返回“is y”,则表示当前接收消息功能是打开的;如果返回“is n”,则表示当前接收消息功能是关闭的。

mesg

实例10:在脚本中动态控制消息输出

你可以在脚本中根据需要动态控制消息输出。例如,你可能希望在脚本的某个关键点发送消息,但在其他时间保持静默。你可以在脚本的关键点处插入mesg y来打开消息,在其他地方使用mesg n关闭消息。

#!/bin/bash

# some tasks...

mesg y # enable messages
echo "Start of key tasks"
# key tasks...
mesg n # disable messages

# some other tasks...

Linux mesg命令的注意事项

如果在非终端环境执行mesg命令,mesg会静默地以错误状态2退出。在这种情况下,执行mesg是无益的。

如果你在执行mesg命令时遇到"bash: mesg: command not found"的错误提示,请按照上面提及的步骤进行查找安装帮助。

Linux mesg相关命令

文章来源:https://blog.csdn.net/u012964600/article/details/135695871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。