Su UNIX, un tty (come molte altre cose) appare come un file. I dati scritti sul dispositivo tty vanno al terminale e i dati provenienti dal terminale sono disponibili per la lettura sul tty.
Se tty è una porta seriale hardware, i dati scritti su di essa vengono inviati sul filo e i dati provenienti dal filo vengono visualizzati sul filo.
Se tty è una console video di una macchina, i dati scritti su di essa vengono visualizzati sullo schermo e i dati provenienti dalla tastiera vengono visualizzati su tty.
Se tty è uno pseudo-tty (terminale virtuale) collegato a un emulatore di terminale X come ad esempio i gnome-terminal
dati scritti su di esso vengono consegnati al software dell'emulatore di terminale X e a loro volta vengono visualizzati in una finestra, mentre sono disponibili i dati digitati in quella finestra per la lettura sul terminale virtuale. Si dice che il software sia collegato all'estremità "master" dello pseudo-terminale. I terminali reali non hanno un fine "master" perché dietro di loro c'è un dispositivo reale (come la porta seriale), non un dispositivo virtuale implementato da un software.
Quindi puoi già vedere che non avrebbe alcun senso chiedere a un emulatore di terminale X di operare su un dispositivo tty arbitrario come /dev/ttyS0
(una vera porta seriale, su Linux). Deve essere una pseudo-tty.
Ma l'emulatore di terminale può scegliere l'ID numerico del dispositivo pseudo-terminale che utilizza? In linea di principio, sarebbe possibile che un kernel lo permetta, ma in realtà l'interfaccia del kernel per allocare un nuovo pseudo-terminale non lo supporta: il kernel fa la sua scelta. (Nel modello SysV i pesudo-terminali vengono creati aprendo un dispositivo speciale chiamato /dev/ptmx
e lo pseudo-terminale disponibile con il numero più basso disponibile viene assegnato automaticamente.)
Ma: perché dovresti scegliere il numero del dispositivo pseudo-terminale che viene assegnato? Il kernel ne sceglie uno inutilizzato che è garantito per essere disponibile e utilizzabile. Hai un motivo per cui preferiresti se ne scegliesse uno diverso?
Per quanto riguarda l'altra domanda:
Ho visto molti file tty in / dev e molti file pts in / dev / pts / Non so perché ce ne siano così tanti. Vengono tutti usati?
Dipende dal sistema. Su alcuni sistemi, tutti i possibili dispositivi pseudo-terminali sono pre-creati in /dev/pts
o /dev
, indipendentemente dal fatto che siano in uso o meno. Su altri, i nodi del dispositivo esistono solo se lo pseudo-terminale è in uso. Dici che stai usando Ununbu, che usa Linux, che è quest'ultimo tipo. Quindi sì, tutti i nodi dei dispositivi che vedi /dev/pts
sono attualmente in uso.
Ma per l'accesso temporaneo, non è molto conveniente. Voglio usare socat per inoltrare un tty o un pty al client. Quindi il client può avviare un terminale con quel pty o tty.
Se si desidera socat
o qualsiasi altro software per connettersi all'estremità principale di uno pseudo-terminale, è necessario che tale software supporti specificamente tale operazione. Ma sei fortunato perché lo socat
fa. Ad esempio, se corro:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Posso ottenere una shell collegandomi alla porta 2222 da qualche altra parte. Molto pericoloso dal punto di vista della sicurezza !!!