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/console
ist 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]
(N
ist 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/tty0
ist auch standardmäßig eine virtuelle Konsole; -
/dev/tty
ist 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 voncron
gestarteten und ähnliche Batch-Prozesse haben kein verwendbares/dev/tty
, da sie mit keinem verknüpft sind. Diese Prozesse haben einen?
imTTY
Spalte vonps -ef
Ausgabe.
/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.