Aus der Linux-Kernel-Dokumentation auf Kernel.org:
/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
In der guten alten Zeit /dev/console war die Systemadministratorkonsole. Und TTYs waren serielle Geräte der Benutzer, die an einen Server angeschlossen waren.
Jetzt /dev/console und /dev/tty0 stellen die aktuelle Anzeige dar und sind normalerweise gleich. Sie können ihn beispielsweise durch Hinzufügen von console=ttyS0 überschreiben bis grub.conf . Danach Ihre /dev/tty0 ist ein Monitor und /dev/console ist /dev/ttyS0 .
Eine Übung, um den Unterschied zwischen /dev/tty zu zeigen und /dev/tty0 :
Wechseln Sie zur 2. Konsole, indem Sie Strg drücken +Alt +F2 . Melden Sie sich als root an . Geben Sie sleep 5; echo tty0 > /dev/tty0 ein . Drücken Sie Enter und wechseln Sie zur 3. Konsole, indem Sie Alt drücken +F3 .Wechseln Sie nun mit Alt zurück zur 2. Konsole +F2 . Geben Sie sleep 5; echo tty > /dev/tty ein , drücken Sie Enter und wechseln Sie zur 3. Konsole.
Sie können diesen tty sehen ist die Konsole, an der der Prozess beginnt, und tty0 ist eine immer aktuelle Konsole.
-
/dev/consoleist ein virtueller Satz von Geräten, der beim Booten als Parameter eingestellt werden kann. Es kann auf ein serielles Gerät oder eine virtuelle Konsole umgeleitet werden und zeigt standardmäßig auf/dev/tty0. Bei mehrerenconsole=Optionen an den Kernel übergeben werden, geht die Konsolenausgabe an mehr als ein Gerät; -
/dev/tty[0-N](Nist die höchste zugeordnete TTY-Nummer, z. 63) ist eine der virtuellen Konsolen, zu denen Sie mit control wechseln -alt -F1 und so weiter; -
/dev/tty0ist auch standardmäßig eine virtuelle Konsole; -
/dev/ttyist eine Art Alias für die Konsole (physisches, virtuelles oder Pseudo-Gerät, falls vorhanden), die dem Prozess zugeordnet ist, der sie öffnet. Im Gegensatz zu den anderen Geräten benötigen Sie keine Root-Rechte, um darauf zu schreiben. Beachten Sie auch, dass Prozesse wie die voncrongestarteten und ähnliche Batch-Prozesse haben kein verwendbares/dev/tty, da sie mit keinem verknüpft sind. Diese Prozesse haben einen?imTTYSpalte vonps -efAusgabe.
/dev/console
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
Unter Linux kann die Kernel-Konsole mit console= konfiguriert werden Boot-Option. Kernel-Code, der printk() aufruft kann Nachrichten darauf schreiben, z.B. wenn ein Gerät geladen wird oder ein Fehler auftritt. Auch diese Nachrichten werden vom Kernel gepuffert. (Siehe auch dmesg ). Wenn ein Konsolengerät gefunden und gestartet wird, empfängt es alle zuvor gepufferten Nachrichten.
Sie können console= passieren mehrmals, um mehrere Konsolen zu konfigurieren, und Nachrichten werden an alle geschrieben. Anscheinend können Sie nur eine Konsole von jedem "Typ" auswählen:Sie können nicht beide console=ttyS0 verwenden und console=ttyS1 .
Die Kernel-Dokumentation gibt /dev/console an als Zeichengerät mit der Nummer (5,1) . Das Öffnen dieses Zeichengeräts öffnet die "Haupt"-Konsole, die die letzte tty in der Liste der Konsolen ist. Der erste Nicht-Kernel-Prozess namens init oder "PID 1", wird mit /dev/console gestartet verbunden mit Standardausgabe, Standardfehler und Standardeingabe.
Wenn keine der Konsolen ein tty ist, dann öffnen Sie /dev/console gibt den Fehler ENODEV zurück ("Kein solches Gerät"). Der Kernel wird drucken eine Nachricht protokollieren und init starten trotzdem. Ein Beispiel für eine Kernel-Konsole, die kein tty-Gerät ist, finden Sie unter netconsole , oder meine Lieblingskonsole der Zeilendrucker.
Sie können auch eine Liste der tty-Konsolen sehen, indem Sie /sys/class/tty/console/active lesen . systemd-Dokumentation weist darauf hin, dass die erste Das gezeigte Gerät ist die Hauptkonsole. Die Liste ist tatsächlich in umgekehrter Reihenfolge der Kernel-Befehlszeile. Die aktuelle Kernel-Dokumentation gibt fälschlicherweise an, dass das zuletzt angezeigte Gerät die Haupt- oder "aktive" Konsole ist. Aus irgendeinem Grund ist es möglich, diese Datei auf Änderungen abzufragen (falls Konsolengeräte entfernt werden?).
In einem systemd-nspawn Container, der Standard /dev/console Datei wird durch ein Pseudo-Terminal Device (PTY) ersetzt. Diese lassen sich am besten als virtuelle Endgeräte beschreiben. Sie werden dynamisch erstellt und auch zur Implementierung grafischer Terminalemulatoren wie GNOME Terminal und für den Fernzugriff wie ssh verwendet .
/dev/tty0
Die Linux-TTY-Geräteknoten tty1 durch tty63 sind virtuelle Terminals. Sie werden auch als VTs oder virtuelle Konsolen bezeichnet. Sie simulieren mehrere Konsolen zusätzlich zum Gerätetreiber der physischen Konsole. Es wird jeweils nur eine virtuelle Konsole angezeigt und gesteuert. Der aktive Anschluss kann geschaltet werden, z.B. mit chvt , oder Strg+Alt+F1 durch, wie viele Funktionstasten Sie haben.
Sie können das aktuelle VT auch mit /dev/tty0 lesen und schreiben . tty0 ist die übliche Kernel-Konsole, z.B. wenn Sie nicht explizit eine ausgewählt haben. "Das System sucht zuerst nach einer VGA-Karte [auf der VTs laufen] und dann nach einer seriellen Schnittstelle". Sie können die Konsole auch auf ein bestimmtes VT einstellen, z. console=tty1 .
"Wenn Sie keine VGA-Karte in Ihrem System haben, wird die erste serielle Schnittstelle automatisch zur Konsole." Eine "serielle Konsole" wie ttyS0 ist wahrscheinlich die häufigste Alternative zu tty0 . Es ist nicht möglich, das VT-System auf einer seriellen Konsole zu verwenden.
/dev/tty
/dev/tty ist eine der drei von POSIX spezifizierten Standardgerätedateien (/dev/ ist einer der drei von POSIX angegebenen Verzeichnisnamen). Das Öffnen entspricht dem Öffnen des Steuerterminals des aktuellen Prozesses. Das steuernde Terminal wird eingestellt, wenn ein Prozess zum ersten Mal ein Terminal öffnet, zumindest unter Linux. Zum Beispiel in init , würde es sich auf /dev/console beziehen .
Das Trennen vom steuernden Terminal ist einer der Schritte, die herkömmlicherweise erforderlich sind, um einen Hintergrundprozess zu starten, beispielsweise einen Systemlogging-Daemon. Die Schritte, um ein Hintergrundprozess zu werden, sind schrecklich kompliziert, aber um genau zu sein, der Schritt, der sich vom steuernden Terminal löst, ist der Systemaufruf setsid. In moderneren Systemen wird das Init-System z.B. systemd startet den Dienst zunächst ohne steuerndes Terminal.