Unter UNIX wird ein tty (wie viele andere Dinge auch) als Datei angezeigt. Auf das tty-Gerät geschriebene Daten werden an das Terminal gesendet, und vom Terminal kommende Daten können auf dem tty gelesen werden.
Wenn es sich bei dem tty um eine serielle Hardware-Schnittstelle handelt, werden die darauf geschriebenen Daten auf dem Kabel gesendet und die vom Kabel kommenden Daten werden auf dem tty angezeigt.
Wenn es sich bei dem tty um die Videokonsole eines Computers handelt, werden die darauf geschriebenen Daten auf dem Bildschirm angezeigt und die von der Tastatur kommenden Daten werden auf dem tty angezeigt.
Wenn es sich bei dem tty um ein Pseudo-tty (virtuelles Terminal) handelt, das mit einem X-Terminal-Emulator verbunden ist, z. B. werden die gnome-terminal
darauf geschriebenen Daten an die Emulator-Software des X-Terminals übermittelt und wiederum in einem Fenster angezeigt, während in dieses Fenster eingegebene Daten verfügbar sind zum Lesen auf dem virtuellen Terminal. Die Software soll mit dem "Master" -Ende des Pseudo-Terminals verbunden sein. Reale Terminals haben kein "Master" -Ende, da sich hinter ihnen ein reales Gerät befindet (wie die serielle Schnittstelle), kein virtuelles Gerät, das von einer Software implementiert wird.
Sie sehen also bereits, dass es keinen Sinn macht, einen X-Terminal-Emulator zu bitten, auf einem beliebigen tty-Gerät wie /dev/ttyS0
(einer echten seriellen Schnittstelle unter Linux) zu arbeiten. Es muss eine Pseudo-Tty sein.
Aber kann der Terminalemulator die numerische ID des verwendeten Pseudo-Endgeräts auswählen? Im Prinzip wäre es einem Kernel möglich, dies zuzulassen, aber tatsächlich unterstützt die Kernel-Schnittstelle zum Zuweisen eines neuen Pseudo-Terminals dies nicht: Der Kernel trifft seine eigene Wahl. (Im SysV-Modell werden Pesudo-Terminals durch Öffnen eines speziellen Geräts namens aufgerufen /dev/ptmx
und das Pseudo-Terminal-Gerät mit der niedrigsten Nummer wird automatisch zugewiesen.)
Aber: Warum sollten Sie die Nummer des Pseudo-Endgeräts auswählen müssen, das zugewiesen wird? Der Kernel wählt einen unbenutzten aus, der garantiert verfügbar und verwendbar ist. Haben Sie einen Grund, warum Sie es vorziehen würden, wenn Sie einen anderen wählen würden?
Zu Ihrer anderen Frage:
Ich habe viele tty-Dateien in / dev und viele pts-Dateien in / dev / pts / gesehen. Ich weiß nicht, warum es so viele davon gibt. Werden sie alle benutzt?
Das hängt vom System ab. Auf einigen Systemen sind alle möglichen Pseudo-Endgeräte in /dev/pts
oder vorab erstellt /dev
, unabhängig davon, ob sie verwendet werden oder nicht. Auf anderen existieren die Geräteknoten nur, wenn das Pseudo-Terminal verwendet wird. Sie sagen, Sie verwenden Ununbu, das Linux verwendet, das der letztere Typ ist. Ja, alle Geräteknoten, die Sie sehen, /dev/pts
werden derzeit verwendet.
Für den vorübergehenden Zugriff ist dies jedoch nicht sehr praktisch. Ich möchte socat verwenden, um ein tty oder pty an den Kunden weiterzuleiten. Dann kann der Client ein Terminal mit dieser Pty oder Tty starten.
Wenn Sie möchten, dass socat
eine andere Software eine Verbindung zum Master-Ende eines Pseudo-Terminals herstellt, muss diese Software dies speziell unterstützen. Aber du hast Glück, weil socat
es so ist. Zum Beispiel, wenn ich laufe:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Ich kann eine Shell erhalten, indem ich von irgendwo anders eine Verbindung zu Port 2222 herstelle. Aus Sicherheitsgründen sehr gefährlich !!!