Enviar mensajes entre usuarios por terminal

Los comandos write, wall y talk permiten mandar mensajes entre usuarios con sesion activa dentro de un sistema, cada uno tiene una funcionalidad específica que pasamos a detallar a continuación.

Write

El comando write permite mandar un mensaje a otro usuario del sistema especificando como parámetros el usuario al que enviar el mensaje y la TTY asociada:

$ write usuario tty

Para finalizar la escritura del mensaje y enviarlo presionamos CTRL + D. La TTY se especificará cuando el usuario al que enviemos el mensaje tenga más de una sesión abierta. En el caso de que no la especificáramos, se enviaría automáticamente a la tty del usuario con actividad más reciente:

# write foo
write: foo is logged in more than once; writing to pts/2
Esto es una prueba
^D

Y en la terminal del usuario foo:

Message from roo@test on pts/3 at 19:34 ...
Esto es una prueba
EOF

Wall

El comando wall (write all) es similar a write con la diferencia de que en este caso el mensaje que mandamos es recibido por todos los usuarios con sesión activa en el sistema y a través de todas las TTYs (broadcast):

$ wall
Esto es una prueba
^D

Y en todas las TTYs:

Broadcast Message from foo@test
        (/dev/pts/2) at 19:41 ...
                                                                               
Esto es una prueba

Talk

Al contrario que mesg, write y wall, el comando talk no suele estar instalado por defecto así que deberemos instalarlo con el gestor de paquetes correspondiente, por ejemplo apt:

# apt-get install talk talkd

A diferencia de write y wall, talk permite establecer comunicación con otro usuario a través de la terminal como si fuera un chat. Además, permite establecer sesiones tanto con usuarios del mismo sistema como de equipos remotos (usuario@máquina). También permite utilizar el nombre de usuario o la TTY.

$ talk foo
$ talk foo pts/1

Al igual que con wall y write, es necesario tener el mesg activado.

Evitar que otros usuarios tengan control para escribir en nuestra terminal

Para ello se utiliza el comando mesg (y=permitido, n=denegado) a nivel de usuario:

$ mesg
is y
$ mesg n
$ mesg
is n
$ mesg y
$ mesg
is y

Con esto ya sabéis como avisar al resto de usuarios antes de reiniciar un servicio o máquina ;)