¿Qué se almacena en los archivos /dev/pts y podemos abrirlos?

¿Qué se almacena en los archivos /dev/pts y podemos abrirlos?

Según mi conocimiento, /dev/ptslos archivos se crean para sesiones ssh o telnet.

Respuesta1

No se almacena nada en /dev/pts. Este sistema de archivos vive puramente en la memoria.

Las entradas en /dev/ptssonpseudo-terminales(pty para abreviar). Los kernels Unix tienen una noción genérica determinales. Un terminal proporciona una manera para que las aplicaciones muestren la salida y reciban la entrada a través de undispositivo terminal. Un proceso puede tener unterminal de control— para una aplicación en modo texto, así es como interactúa con el usuario.

Los terminales pueden ser terminales de hardware (“tty”, abreviatura de “teletipo”) o pseudoterminales (“pty”). Los terminales de hardware se conectan a través de alguna interfaz, como un puerto serie ( ttyS0,…) o USB ( ttyUSB0,…) o a través de la pantalla y el teclado de una PC ( tty1,…). Los pseudoterminales los proporciona un emulador de terminal, que es una aplicación. Algunos tipos de pseudo-terminales son:

  • Las aplicaciones GUI como xterm, gnome-terminal, konsole,… transforman los eventos del teclado y el mouse en entrada de texto y muestran la salida gráficamente en alguna fuente.
  • Aplicaciones multiplexoras como entrada y salida de relé de pantalla y tmux desde y hacia otro terminal, para desacoplar aplicaciones en modo texto del terminal real.
  • Las aplicaciones de shell remotas como sshd, telnetd, rlogind, etc. retransmiten entrada y salida entre un terminal remoto en el cliente y un pty en el servidor.

Si un programa abre una terminal para escribir, la salida de ese programa aparece en la terminal. Es común tener varios programas saliendo a una terminal al mismo tiempo, aunque esto puede resultar confuso a veces ya que no hay forma de saber qué parte de la salida proviene de qué programa. Los procesos en segundo plano que intentan escribir en su terminal de control pueden sersuspendido automáticamente por una señal SIGTTOU.

Si un programa abre una terminal para lectura, la entrada del usuario se pasa a ese programa. Si se leen varios programas desde el mismo terminal, cada carácter se enruta de forma independiente a uno de los programas; esto no se recomienda. Normalmente sólo hay un único programa leyendo activamente desde el terminal en un momento dado; programas que intentan leer desde su terminal de control mientras no están en elprimer planosonsuspendido automáticamente por una señal SIGTTIN.

Para experimentar, ejecútelo ttyen una terminal para ver cuál es el dispositivo terminal. Digamos que es /dev/pts/42. En un shell en otra terminal, ejecute echo hello >/dev/pts/42: la cadena hellose mostrará en la otra terminal. Ahora ejecuta cat /dev/pts/42y escribe en la otra terminal. Para eliminar ese catcomando (lo que dificultará el uso de la otra terminal), presione Ctrl+ C.

En ocasiones, escribir en otro terminal resulta útil para mostrar una notificación; por ejemplo elwriteEl comando hace eso. Normalmente no se realiza la lectura desde otro terminal.

Respuesta2

Los archivos que contiene /dev/ptsson "pseudo-ttys". Hasta cierto punto, son como tuberías con nombre, pero también imitan antiguos terminales de conexión en serie, como los VT-100. Los pseudo-ttys hacen el trabajo de transferir bytes del teclado al programa y del programa al dispositivo de salida, lo cual suena simple. Pero eso responde explícitamente a su pregunta: el kernel no almacena nada, /dev/pts/0por ejemplo. Solo entran flujos de bytes de la salida estándar de un programa conectado al pseudo-tty, y los programas cuya entrada estándar está conectada al mismo pseudo-tty leen esos bytes.

Los pseudo-ttys también ponen una capa de direccionamiento indirecto en esos flujos de bytes. El kernel puede inspeccionar bytes en busca de valores especiales como "Control-C" o "Control-D" o "Control-U" (que son todos configurables, consulte man stty) y enviar un SIGINT, establecer el final del archivo en la entrada estándar o borrar una línea en la entrada. También hay una función de almacenamiento en búfer en alguna parte, por lo que mi "no almacena nada" está algo mal, pero solo por unos pocos kilobytes.

El kernel puede inspeccionar los valores de bytes en la salida y hacer cosas como convertir una nueva línea (salto de línea ASCII, LF o "\n") en dos bytes, retorno de carro y avance de línea (CRLF o "\r\n"), o cualquier byte que requiera un hardware de terminal serie. La dirección indirecta de un pseudo-tty permite la independencia del hardware.

Los pseudo-ttys también permiten todas las llamadas al sistema "establecer velocidad de baudios", "establecer paridad", etc. ioctl(), y probablemente no hagan nada con ellas. Esto permite que los programas que se escribieron en la época de los VT-100, ADM-3 y Wyse sigan funcionando sin errores. El software, el controlador de dispositivo pseudo-ttys, actúa como hardware.

Los pseudo-ttys pueden ser usados ​​por sshdy telnet, pero también se usan entre un emulador de terminal (como xtermo rxvt) y el shell que normalmente se ejecuta dentro de xterm.

Linux y muchos Unix tienen pseudo-ttys. El Plan 9 no. Los pseudo-ttys son una especie de reliquia, restos de los días de los terminales de hardware conectados por cable serie.

Respuesta3

/dev/es un directorio especial para archivos de dispositivos. Estas son abstracciones, no son archivos reales en el disco. El directorio se completa durante el arranque y está sujeto a cambios para reflejar las interfaces de dispositivos existentes, que son creadas y destruidas por el kernel y un demonio de espacio de usuario udevd.

Muchos de los dispositivos así representados son virtuales. Esto incluye las entradas en /dev/pts, que son dispositivos de consola. Por eso se crea uno para sesiones remotas; también se crean cuando abre una terminal GUI local.

Puedes abrirlos como archivos, aunque no tiene mucha utilidad. Para obtener el /dev/ptsnodo al que está conectado su shell, use tty:

> tty
/dev/pts/4

Ahora cambia a otra consola e intenta:

> echo "duck!" > /dev/pts/4

Inteligente. Ahora intenta:

> cat /dev/pts/4

Luego intente usar el shell en /dev/pts/4. Estás atascado hasta que sales catpor el otro lado, pero la mayor parte de lo que escribes en pts/4 pasará (por ejemplo, al intentar "hola mundo" terminé en hlpts/4 y ello worden la catconsola).

Mi suposición aquí es que el dispositivo recibe información del shell y la envía a través del sistema, que es como las cosas terminan en la pantalla: el shell no se ocupa del hardware, sino el sistema. Pruébelo strace bash(y eche un vistazo man stracesi no sabe qué es); recibes una ráfaga preliminar de llamadas cuando se inicia bash. Ahora empieza a pulsar teclas:

read(0, "h", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "h", 1h)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "e", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "e", 1e)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "y", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "y", 1y)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0

Por cada letra escrita hay una lectura desde la entrada estándar y una escritura en la salida estándar. Pero, ¿a qué está conectado el estándar del caparazón? Ahora pruébelo straceen su terminal GUI; tendrá que averiguar el nombre si no lo sabe, por ejemplo, en KDE es konsole, y GNOME tiene el gnome-terminal, creo. El resultado de esto stracees probablemente más críptico: el mío tiene muchos poll()y recvfrom(). No veo ninguna escritura, pero si ahora haces el cattruco desde otra terminal, notarás que cuando escribes, las pulsaciones de teclas que lee cat no causan ninguna respuesta en la salida de strace: la terminal no está t recibirlos. Entonces, la aplicación de terminal GUI y cat compiten para leer desde el mismo dispositivo, al que envía el shell.

información relacionada