Wie Linux / dev / tty und / dev / tty0 verwendet

8

Ich kann den Unterschied zwischen / dev / tty und / dev / tty0 erkennen, indem ich die bereitgestellte Methode anhand dieser Frage teste . Aber ich wundere mich wirklich über die praktische Verwendung dieser Geräte (wie Situationen, in denen sie verwendet werden).

Ron Vince
quelle
@ 0xC0000022L Irgendwie kann ich tty nicht mit sda in Beziehung setzen, da tty im Gegensatz zu sda 3 verschiedene Kategorien hat (tty, tty0, tty [1, .., N]).
Ron Vince
Ich denke, die Analogie von @ 0xC0000022L ist ziemlich irreführend. Beide /dev/sdaund /dev/sda1bezeichnen bestimmte Blockgeräte (eines ist zufällig ein Teil des anderen). /dev/ttyAuf der anderen Seite handelt es sich um ein virtuelles Gerät, das sich auf keine bestimmte andere Art bezieht.
Celada

Antworten:

16

/dev/ttyist die Steuerungsgröße des aktuellen Prozesses für jeden Prozess, der diese spezielle Datei tatsächlich öffnet. Es ist nicht unbedingt ein virtuelles Konsolengerät ( /dev/ttyn ) und kann ein , eine serielle Schnittstelle usw. sein. Wenn das steuernde Tty keine virtuelle Konsole ist, muss der Prozess nicht mit Konsolengeräten interagieren, selbst wenn es pseudoty ist ist tatsächlich auf der Systemkonsole implementiert. Z.B. Für eine Shell in einem Terminalemulator unter einem lokal laufenden X-Server bilden die Programme eine Kette von Interaktionen wie:

   Unix-Shell
     ⇕ /dev/pts/2(≡ /dev/ttyfür seine Prozesse)
 Kernel-Pty-Treiber
     ⇕ /dev/ptmx
 Terminal-Emulator
     ⇕ X-Fenster-Protokoll
   X-Server
     ⇕ /dev/tty7(≡ /dev/ttyfür den Server)
 Systemkonsole
zxc↿⇂ [_̈░░]
    Benutzer

Die Verwendung /dev/ttydurch Userland-Programme umfasst:

  • Schreiben Sie etwas an das steuernde Terminal und ignorieren Sie alle Umleitungen und Leitungen.
  • Machen Sie ein ioctl () - siehe tty_ioctl (4);
  • Trennen Sie sich beispielsweise vom Terminal (TIOCNOTTY).

/dev/tty0ist die aktuell aktive (d. h. auf dem Monitor sichtbare) virtuelle Konsole des Betriebssystems . Diese spezielle Datei wird nicht erheblich von der Systemsoftware verwendet, sondern /dev/consoleist praktisch ein „Alias“ fürtty0 und /dev/consolevielen Einsatz hat von syslog - Daemons und manchmal vom Kernel selbst.

Experimentieren Sie, um den Unterschied zu zeigen: Führen Sie eine rootShell auf tty3( Ctrl+ Alt+ F3) oder in einem Terminalemulator aus. Jetzt

# sleep 2; echo test >/dev/tty

dann schnell Ctrl+ Alt+ F2, zwei Sekunden warten und Ctrl+ Alt+ was auch immer zurück. Wo sehen Sie die Ausgabe?
Und jetzt der gleiche Test für /dev/tty0.

Incnis Mrsi
quelle
Ihre Antwort unterscheidet sich nicht von der Antwort der Frage, die ich in meiner Frage verlinkt habe. Was mich betrifft, ist der Prozess, wie der Kernel sie zusammen verwendet.
Ron Vince
@ Ron Vince: aktualisiert.
Incnis Mrsi
Ist es für einen Prozess obligatorisch, in / dev / tty anstelle des spezifischen / dev / tty [1, .., N] zu schreiben?
Ron Vince
@ Ron Vince: Wiederum hat ein Prozess, der innerhalb einer SSH-Sitzung (technisch gesehen ein untergeordnetes Element von sshd) oder in einem xtermFenster ausgeführt wird, nicht die spezifische / dev / tty  n . Es interagiert nicht mit Geräten der Systemkonsole , da es an ein Pseudo-Endgerät angeschlossen ist. Dies schließt nicht aus, dass / dev / tty n geöffnet wird,  wenn es sich um einen Root-Prozess handelt oder wenn derselbe Benutzer bei tty n angemeldet ist  . Über das Hinzufügen einiger Punkte zu "spezifischem tty" zur Antwort.
Incnis Mrsi
Angenommen, ich verwende xterm, einen Terminalemulator. Ist das die Kette (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> Shell)? Für / dev / tty0 denke ich, dass ich mir darüber klar bin. Die Ausgabe von Prozessen und Kernel wird an das / dev / tty [1, .., N] gesendet, das der tty-Gerätetreiber jetzt verarbeitet. Dies ist die Kette (Kernel / Prozess -> / dev / tty0 -> current / dev / tty [1, .., N])
Ron Vince
2

/ dev / tty ist die steuernde tty für jeden Prozess. Dies kann Ihre Shell sein.

Wenn Ihr Prozess keine steuernde tty hat, / dev / tty nicht verfügbar ist, gilt dies z. B. für Dämonen.

Wenn Ihr Prozess eine steuernde tty hat, ist / dev / tty ein Treiberalias für den realen tty-Treiber, den Ihr Prozess für stdin, stdout oder stderr verwendet.

Siehe man -s7d ttyfür weitere Informationen. Beachten Sie, dass der Abschnitt, in dem sich dieses Handbuch befindet, zwischen verschiedenen Betriebssystemen unterschiedlich sein kann und nicht mit der Manpage in Abschnitt 1 verwechselt werden sollte man -k tty.

schily
quelle
"Alias ​​für den Realty-Treiber, den Ihr Prozess verwendet". Bezieht sich der zitierte Text auf tty [1, .., N]?
Ron Vince
Der Treiber-Alias ​​ist etwas anderes als nur ein Alias. Es ist ein anderer Treiber, aber er leitet die Arbeit zu dem, mit dem Ihr Prozess wirklich verbunden ist.
schily
Wenn ich das richtig verstehe (siehe auch tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), ist / dev / tty die Schnittstelle für den aktuellen Prozess (derzeit von der CPU verarbeitet) zu / dev / tty [1, .., N]. In der Zwischenzeit gibt / dev / tty0 Daten aus, die nicht zu bestimmten / dev / tty [1, .., N] gehören, und gibt daher in / dev / tty [1, .., N] aus, die zum aktuellen Prozess gehören . Wenn diese korrekt sind, frage ich mich, wann das / dev / tty0 tatsächlich verwendet wird.
Ron Vince
Wenn Sie kein eigenes Haus haben, würde Ihnen ein möglicher alternativer Eintritt in dieses Haus kein Haus geben.
schily
/ Dev / tty0 gibt also Daten an die aktuelle Shell-Sitzung des Superusers aus (zugeordnet zu / dev / tty [1, .., N]).
Ron Vince