Von dieser Antwort auf Linux: Unterschied zwischen / dev / console, / dev / tty und / dev / tty0
Aus der Dokumentation :
/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console
In den guten alten Zeiten
/dev/console
war die Systemadministratorkonsole. Und TTYs waren die seriellen Geräte der Benutzer, die an einen Server angeschlossen waren. Jetzt/dev/console
und/dev/tty0
repräsentieren aktuelle Anzeige und sind in der Regel gleich. Sie können es beispielsweise durch Hinzufügenconsole=ttyS0
zu überschreibengrub.conf
. Danach ist Ihr/dev/tty0
Monitor und/dev/console
ist/dev/ttyS0
.
Unter " Systemkonsole " versteht man /dev/console
die Gerätedatei eines physischen Textterminals, genau wie /dev/tty{1..63}
die Gerätedateien für die virtuellen Konsolen.
Durch " /dev/console
und /dev/tty0
aktuelle Anzeige darstellen und in der Regel gleich sind", /dev/console
scheint es mir, dass es sich auch um die Gerätedatei einer virtuellen Konsole handeln kann. /dev/console
scheint eher wie /dev/tty0
als wie /dev/tty{1..63}
( /dev/tty0
ist die derzeit aktive virtuelle Konsole und kann eine von sein /dev/tty{1..63}
).
Was ist /dev/console
? Was wird es verwendet?
Spielt /dev/console
der Linux-Kernel die gleiche Rolle wie /dev/tty
ein Prozess? ( /dev/tty
Ist das steuernde Terminal der Prozesssitzung des Prozesses und kann ein Punkt sein, /dev/ttyn
wobei n
1 bis 63 oder mehr sind?)
Die andere Antwort erwähnt:
In der Kerneldokumentation ist
/dev/console
als Zeichen ein Gerät mit der Nummer 5: 1 angegeben. Wenn Sie dieses Zeichengerät öffnen, wird die "Haupt" -Konsole geöffnet. Dies ist die letzte Nummer in der Liste der Konsolen.
Bedeutet "die Liste der Konsolen" alle console=
in der Startoption enthaltenen Konsolen ?
Bedeutet " /dev/console
als Zeichengerät mit der Nummer 5: 1", dass /dev/console
es sich um die Gerätedatei eines physischen Textterminals handelt, dh einer Systemkonsole? (Aber auch hier kann die erste Antwort, die ich oben zitiert habe, /dev/console
dieselbe sein, bei /dev/tty0
der es sich nicht um ein physisches Textterminal, sondern um eine virtuelle Konsole handelt.)
Vielen Dank.
Antworten:
/dev/console
existiert hauptsächlich, um die Konsole des Kernels dem Benutzerbereich auszusetzen. In der Dokumentation des Linux-Kernels zu Geräten heißt es jetzt/dev/console
, der Geräteknoten mit Major 5 und Minor 1, bietet Zugriff auf alles, was der Kernel als primäres Mittel zur Interaktion mit dem Systemadministrator ansieht. Dies kann eine physikalische Konsole mit dem System verbunden werden (mit der virtuellen Konsole Abstraktion auf, so kann es verwenden ,tty0
oder jede ,ttyN
wo N zwischen 1 und 63) oder einer seriellen Konsole oder einer Hypervisor - Konsole, oder sogar ein Braille - Gerät. Beachten Sie, dass der Kernel selbst nicht verwendet wird/dev/console
: Geräteknoten sind für den Benutzerbereich, nicht für den Kernel; Es überprüft jedoch, ob/dev/console
vorhanden und verwendbar ist, und richtetinit
die Standardeingabe, die Standardausgabe und die Fehleranzeige auf ein/dev/console
.Wie hier beschrieben,
/dev/console
handelt es sich um ein Zeichengerät mit festem Dur und Moll, da es sich um ein separates Gerät (wie z. B. ein Mittel zum Zugreifen auf den Kernel; kein physisches Gerät) handelt, das/dev/tty0
keinem anderen Gerät entspricht. Dies ähnelt in gewisser Weise der Situation, in/dev/tty
der es sich um ein eigenes Gerät handelt (5: 0), da es geringfügig andere Funktionen als die anderen virtuellen Konsolen oder Endgeräte bietet.Die "Liste der Konsolen" ist in der Tat die Liste der Konsolen, die durch die
console=
Boot-Parameter definiert sind (oder die Standardkonsole, falls keine vorhanden sind). Sie können die auf diese Weise definierten Konsolen sehen, indem Sie auf schauen/proc/consoles
./dev/console
bietet in der Tat Zugang zu den letzten dieser :quelle
"Was ist
/dev/console
?" wird in der vorherigen Antwort beantwortet . Vielleicht ist diese Antwort klarer, wenn Sie die Antworten auf die beiden anderen Fragen kennen.Q1. "Was ist die Gerätedatei, die das physische Terminal selbst darstellt?"
Es gibt keine solche Gerätedatei.
Q2. "Wofür wird es
/dev/console
verwendet?"Unter Linux werden
/dev/console
Meldungen beim Starten (und Herunterfahren) angezeigt. Es wird auch für den "Einzelbenutzermodus" verwendet, wie in Stephen Kitts Antwort ausgeführt. Es gibt nicht viel anderes, wofür es Sinn macht, es zu benutzen."In den guten alten Tagen" von Unix
/dev/console
war ein dediziertes physisches Gerät. Dies ist jedoch unter Linux nicht der Fall.Verwandte Beweise
1. "Was ist die Gerätedatei, die das physische Terminal selbst darstellt?"
Die zugrunde liegenden Geräte für
/dev/tty{1..63}
sindstruct con_driver
. Informationen zu allen möglichen Treibern finden Sie unter https://elixir.bootlin.com/linux/v4.19/ident/do_take_over_consoleEs gibt keine Gerätedatei für diese zugrunde liegenden Geräte!
Es gibt nur eine minimale Benutzeroberfläche, um sie zu verwalten.
Wenn Sie wirklich mehr wissen wollen, das
(M)
steht für Modul . Dh das Dummy-Konsolengerät wird nicht von einem ladbaren Kernelmodul bereitgestellt; Es ist Teil des ursprünglichen Kernel-Images (auch "builtin" genannt).Zweitens zeigt die
bind
Datei in jedem Unterverzeichnis von/sys/class/vtconsole
an, welches vtconsole-Gerät aktiv ist. Wenn ich0
auf das aktive schreibe , scheint es auf das Dummy umzuschalten. (GUI-VTs scheinen nicht betroffen zu sein, Text-VTs funktionieren jedoch nicht mehr). Schreiben1
für den Dummy aktiviert ihn nicht. Beide Methoden funktionieren, um zum realen zurückzukehren. Wenn ich den Code richtig gelesen habe, sollte der Trickecho 1 > bind
nur für Konsolentreiber funktionieren, die als Modul (?!) Erstellt wurden.Speziell für Framebuffer- Konsolen finden Sie unter https://kernel.org/doc/Documentation/fb/fbcon.txt weitere Informationen zum Binden verschiedener Framebuffer-Geräte (
/dev/fb0
...) an bestimmte virtuelle Konsolen . Dies beinhaltet eine Kernel-Option oder einen aufgerufenen Befehl .fbcon:map=
con2fbmap
Natürlich können die Details mit verschiedenen Kernelversionen, Architekturen, Firmwares, Geräten, Treibern usw. variieren. Ich musste nie wirklich eine der obigen Schnittstellen verwenden. Der Kernel lässt einfach
i915
/inteldrmfb
/, was auch immer Sie es aufrufen möchten, übernehmen, wenn es geladen wird, und ersetzt zvgacon
.Es sieht so aus, als hätte meine EFI-Maschine nie welche
vgacon
. Also erstens verwendet es eine Dummy - Konsole, und zweitens nach 1,2 Sekunden schaltet er auffbcon
, läuft auf der Oberseiteefifb
. Aber bis jetzt musste ich mich nicht darum kümmern, was die Details sind; es funktioniert einfach.2. "Wofür wird
/dev/console
verwendet?"Sie können / dev / console als TTY-Gerät verwenden. Wenn Sie beispielsweise darauf schreiben, wird auf ein bestimmtes zugrunde liegendes Gerät geschrieben, das auch eine eigene Zeichengerätenummer hat.
Oft ist / dev / console an / dev / tty0 gebunden, aber manchmal kann es auch an ein anderes Gerät gebunden sein.
In diesem Fall wird beim Schreiben nach / dev / console nach / dev / tty0 geschrieben. Das Schreiben in / dev / tty0 entspricht dem Schreiben in das derzeit aktive / dev / ttyN-Gerät.
Dies wirft jedoch eine interessante Frage auf. Durch den Zugriff
tty0
werden verschiedene virtuelle Konsolen aufgerufen, je nachdem, welche gerade aktiv sind. Wofür verwenden die Leute eigentlichtty0
und was wirdconsole
auf Linux verwendet?Technisch gesehen können Sie von
console
/ aus lesen und schreibentty0
, z. B. a ausführengetty
, um das Anmelden zu ermöglichentty0
. Dies ist jedoch nur als schneller Hack nützlich. Da dies bedeutet, dass Sie die mehreren virtuellen Konsolen von Linux nicht nutzen können.systemd
suchtsysfs
nach einem Attribut, das dem Gerät / dev / console zugeordnet ist, um das zugrunde liegende TTY-Gerät zu erkennen. Dies ermöglicht essystemd
, automatisch eine zu erzeugengetty
und sich zB an einer seriellen Konsole anzumelden, wenn der Benutzer eine Kernel-Konsole durch Booten mit einrichtetconsole=ttyS0
. Das ist praktisch; Sie müssen diese Konsole nicht an zwei verschiedenen Orten konfigurieren. Wieder sehenman systemd-getty-generator
. Öffnetsystemd
sich aber eigentlich nicht/dev/console
dafür.Während des System-Bootstraps ist möglicherweise noch nicht einmal sysfs aktiviert. Sie möchten aber möglichst bald Fehler- und Fortschrittsmeldungen anzeigen können! Wir kreisen also um Punkt 1). Der Kernel startet PID 1 mit stdin / stdout / stderr
/dev/console
. Es ist sehr schön, diesen einfachen Mechanismus von Anfang an einzurichten.In einem Linux-Container kann die Datei
/dev/console
unter als etwas anderes erstellt werden - nicht als Zeichen für die Gerätenummer5:1
. Stattdessen kann es als PTS-Gerätedatei erstellt werden. Dann ist es sinnvoll, sich über diese/dev/console
Datei anzumelden .systemd
In einem Container können Sie sich auf einem solchen Gerät anmelden. sehenman systemd-getty-generator
.Dieser Mechanismus wird verwendet, wenn Sie einen Container mit dem
systemd-nspawn
Befehl ausführen . (Ich denke nur, wenn Siesystemd-nspawn
auf einem TTY laufen , obwohl ich von der Suche in der Manpage nicht unterscheiden kann).systemd-nspawn
Erstellt den Container/dev/console
als Bindemount eines PTS-Geräts vom Host. Dies bedeutet, dass dieses PTS-Gerät im/dev/pts/
Inneren des Behälters nicht sichtbar ist .PTS-Geräte sind lokal für ein bestimmtes
devpts
Mount. PTS-Geräte sind eine Ausnahme von der normalen Regel, dass Geräte anhand ihrer Gerätenummer identifiziert werden. PTS-Geräte werden durch die Kombination ihrer Gerätenummer und ihrerdevpts
Halterung identifiziert .Sie können dringende Nachrichten an
console
/tty0
schreiben, um in die aktuelle virtuelle Konsole des Benutzers zu schreiben. Dies kann für dringende Benutzerbereichsfehlermeldungen nützlich sein, ähnlich wie dringende Kernelmeldungen, die an die Konsole gesendet werden (sieheman dmesg
). Es ist jedoch nicht üblich, dies zu tun, sobald das System gebootet ist.rsyslog hat ein Beispiel auf dieser Seite , in dem Kernelnachrichten ausgegeben werden
/dev/console
. Dies ist unter Linux sinnlos, da der Kernel dies standardmäßig bereits tut. Ein Beispiel, das ich nicht wiederfinden kann, besagt, dass es keine gute Idee ist, dies für Nicht-Kernel-Nachrichten zu verwenden, da es einfach zu viele Syslog-Nachrichten gibt, Sie Ihre Konsole überfluten und es zu viel im Wege steht.systemd-journald bietet ebenfalls Optionen zum Weiterleiten aller Protokolle an die Konsole. Im Prinzip kann dies zum Debuggen in einer virtuellen Umgebung hilfreich sein. Für das Debuggen leiten wir jedoch normalerweise an weiter
/dev/kmsg
. Dadurch werden sie im Kernel-Protokollpuffer gespeichert, sodass Sie sie mit lesen könnendmesg
. Wie Nachrichten, die vom Kernel selbst generiert werden, können diese Nachrichten abhängig von der aktuellen Kernelkonfiguration an die Konsole zurückgesendet werden.quelle
xconsole
, den Überblick zu behalten ;-). (Um zu vermeiden, dass Nachrichten direkt in den Framebuffer geschrieben werden, z . B. auf SPARC- Stationen .)/dev/tty{1..63}
und/dev/pts/n
sind Gerätedateien, die Geräte selbst darstellen (obwohl es sich um Emulationen handelt), nicht in Bezug auf den Prozess oder den Kernel./dev/tty0
Stellt den dar, in/dev/tty{1..63}
dem gerade etwas verwendet wird (vielleicht Kernel- oder Shell-Prozess?)./dev/tty
Stellt das steuernde Terminal dar, das derzeit von einer Prozesssitzung verwendet wird./dev/console
Stellt das Terminal dar, das derzeit vom Kernel verwendet wird? Was ist die Gerätedatei, die das physische Terminal selbst darstellt, nicht in Bezug auf den Kernel oder den Prozess?