Estoy trabajando con las preguntas de Unix The Textbook (capítulo 8, # 16, página 207) :
Proporcione
chmodlíneas de comando que realicen las mismas tareas que los comandosmesg nymesg y. (Sugerencia: cada dispositivo de hardware, incluido su terminal, tiene un archivo asociado en el/devdirectorio).
Creo que la respuesta es:
mesg n = chmod 770 /dev/stdout
mesg y = chmod 777 /dev/stdout
Pero me preguntaba qué pasa si lo usas chmod 000 /dev/stdin.
¿Te bloquean la entrada de comandos en la terminal?

mesg npuede usar permisos para afectar futuroswrites solo porquewriteaún no tiene el terminal abierto.Respuestas:
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/0y 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 comandottypara ver cuál es el dispositivo terminal.mesg nes equivalente achmod g-w "$(tty)"ymesg yes equivalente achmod g+w "$(tty)".fuente
ttyno informa el terminal de control, pero el terminal se abre en stdin si lo hay. Entonces, en Linux, donde / dev / stdin no es un dispositivo, sino un enlace simbólico especial al archivo abierto en / dev / stdin,chmot "$(tty)"sería más o menos lo mismo quechmod /dev/stdin(si stdin es un dispositivo tty e intentaría cambiar el modo de unnot a ttyarchivo en el directorio actual de lo contrario). Ver/dev/$(ps -o tty= -p "$$")para el terminal de control.