No, /dev/stdiny /dev/stdoutson el dispositivo equivocado. Estos no son dispositivos terminales, son alias para entrada estándar y salida estándar respectivamente. La entrada estándar y la salida estándar son, por definición, descriptores de archivo que las aplicaciones esperan que estén abiertas y tengan un significado convencional (descriptor de archivo 0 y 1 respectivamente, también hay 2, que es un error estándar). Los dispositivos como /dev/stdiny /dev/stdoutson útiles cuando una aplicación requiere un nombre de archivo, pero el usuario de la aplicación desea que acceda a un descriptor de archivo en particular en lugar de abrir algún archivo. Dependiendo de la variante de Unix, puede que ni siquiera sean archivos de dispositivo; por ejemplo, en Linux, son enlaces simbólicos a/proc/self/fd/0 y amigos, y estos son a su vez enlaces simbólicos "mágicos" a cualquier archivo que el proceso ya haya abierto en ese descriptor de archivo.
Cambiar los permisos de /dev/stdiny /dev/stdoutsolo cambiaría lo que sucede cuando estos nombres de archivo se usan explícitamente. No afecta nada relacionado con el terminal, y no afecta el uso normal de entrada y salida estándar, ya que los permisos solo importan al abrir un nombre de archivo en particular.
Lo que mesghace es cambiar los permisos de la terminal de control del proceso . Para una aplicación que se ejecuta en un terminal, el terminal está abierto en entrada estándar, salida estándar y error estándar (descriptores de archivo 0, 1 y 2). Puede usar el comando ttypara ver cuál es el dispositivo terminal. mesg nes equivalente a chmod g-w "$(tty)"y mesg yes equivalente a chmod g+w "$(tty)".
mesg npuede usar permisos para afectar futuroswrites solo porquewriteaún no tiene el terminal abierto.