---
name: "mesg"
section: "1"
platform: "linux"
package: "util-linux"
version: "2.42.4-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/mesg"
---

# mesg(1)

display (or do not display) messages from other users

## NAME

mesg - display (or do not display) messages from other users

## SYNOPSIS

**mesg** \[*option*\] \[**n**\|**y**\]

## DESCRIPTION

The **mesg** utility is invoked by a user to control write access others have to the terminal device associated with standard error output. If write access is allowed, then programs such as [**talk**(1)](/talk/1.md) and [**write**(1)](/write/1.md) may display messages on the terminal.

Traditionally, write access is allowed by default. However, as users become more conscious of various security risks, there is a trend to remove write access by default, at least for the primary login shell.

The initial permissions for the terminal are set by [**login**(1)](/login/1.md) according to TTYPERM and TTYGROUP from */etc/login.defs*. The default is mode *0620* if a tty group is used, and *0600* without the group. The default tty group name is "tty".

To ensure that your ttys are set in a portable and independent manner from system settings, **mesg** should be executed in your login scripts.

**mesg** modifies the write permissions for a group on the current terminal device. Since version 2.41, **mesg** can no longer be compiled to make the terminal writable for *others* and strictly modifies only *group* permissions. The usual setup is to use a "tty" group and add relevant users to this group. Alternatively, a less secure solution is to set utilities like [**write**(1)](/write/1.md) or [**wall**(1)](/wall/1.md) to setgid for the "tty" group.

The **mesg** utility silently exits with error status 2 if not executed on a terminal. In this case executing **mesg** is pointless. The command line option **--verbose** forces **mesg** to print a warning in this situation. This behaviour has been introduced in version 2.33.

## ARGUMENTS

**n**

Disallow messages.

**y**

Allow messages to be displayed.

If no arguments are given, **mesg** shows the current message status on standard error output.

## OPTIONS

- **-v**, **--verbose**

  Explain what is being done.

- **-h**, **--help**

  Display help text and exit.

- **-V**, **--version**

  Display version and exit.

## EXIT STATUS

The **mesg** utility exits with one of the following values:

**0**

Messages are allowed.

**1**

Messages are not allowed.

**\>1**

An error has occurred.

## FILES

*/dev/\[pt\]ty\**, */dev/pts/\[0-9\]\**

## HISTORY

**mesg** (I) appears in the UNIX Programmer’s Manual. It used to invert the current state with no argument before Version 7 AT&T UNIX.

## SEE ALSO

[**login**(1)](/login/1.md), [**talk**(1)](/talk/1.md), [**write**(1)](/write/1.md), [**wall**(1)](/wall/1.md), [**xterm**(1)](/xterm/1.md)

## REPORTING BUGS

For bug reports, use the *issue tracker* \<https://github.com/util-linux/util-linux/issues\>.

## AVAILABILITY

The **mesg** command is part of the util-linux package which can be downloaded from *Linux Kernel Archive* \<https://www.kernel.org/pub/linux/utils/util-linux/\>.
