Auf einem Linux - System, was ist der Unterschied zwischen /dev/console
, /dev/tty
und /dev/tty0
?
Was ist ihre jeweilige Verwendung und wie vergleichen sie?
Auf einem Linux - System, was ist der Unterschied zwischen /dev/console
, /dev/tty
und /dev/tty0
?
Was ist ihre jeweilige Verwendung und wie vergleichen sie?
Antworten:
Aus der Dokumentation :
/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 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ügen console=ttyS0
zu überschreiben grub.conf
. Danach ist Ihr /dev/tty0
Monitor und /dev/console
ist /dev/ttyS0
.
Eine Übung, um den Unterschied zwischen /dev/tty
und zu zeigen /dev/tty0
:
Wechseln Sie zur 2. Konsole, indem Sie Ctrl+ Alt+ drücken F2. Einloggen als root
. Typ sleep 5; echo tty0 > /dev/tty0
. Drücken Sie Enterund wechseln Sie in die dritte Konsole durch Drücken von Alt+ F3. Wechseln Sie nun mit Alt+ zurück zur 2. Konsole F2. Tippen sleep 5; echo tty > /dev/tty
, drücken Enterund zur 3. Konsole wechseln.
Sie können sehen, dass dies tty
die Konsole ist, an der der Prozess beginnt, und dass tty0
es sich um eine immer aktuelle Konsole handelt.
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
und voila - eine root shell.
sudo anycommand
funktioniert, dann funktioniert es auch, sudo -i
root zu werden. Es gibt kein Linux / BSD / Unix, bei dem man nicht root werden kann. (Dann wäre es nicht mehr Linux / BSD / Unix.)
/dev/console
ist eine virtuelle Gruppe von Geräten, die beim Booten als Parameter festgelegt werden kann. Es wird möglicherweise auf ein serielles Gerät oder eine virtuelle Konsole umgeleitet und zeigt standardmäßig auf /dev/tty0
. Wenn mehrere console=
Optionen an den Kernel übergeben werden, wird die Konsolenausgabe an mehr als ein Gerät gesendet.
/dev/tty0
ist die aktuelle virtuelle Konsole
/dev/tty[1-x]
ist eine der virtuellen Konsolen, zu denen Sie mit control- alt- F1usw. wechseln .
/dev/tty
ist eine Art Alias für die Konsole (physisches, virtuelles oder Pseudogerä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 von cron
und ähnliche Batch-Prozesse nicht verwendbar sind /dev/tty
, da sie mit keinem assoziiert sind. Diese Prozesse haben eine ?
in der TTY
Spalte der ps -ef
Ausgabe.
/dev/tty
kann sich um ein anderes Gerät handeln, je nachdem, welcher Prozess es öffnet. Antwort aktualisiert.
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
Unter Linux kann die Kernel-Konsole mithilfe der console=
Boot-Option konfiguriert werden . Kernel-Code, der aufruft, printk()
kann Nachrichten an ihn schreiben, z. B. wenn ein Gerät geladen wird oder ein Fehler auftritt. Diese Nachrichten werden auch 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=
mehrere Male übergehen , um mehrere Konsolen zu konfigurieren, und Nachrichten werden an alle von ihnen geschrieben. Anscheinend können Sie nur eine Konsole von jedem "Typ" auswählen: Sie können nicht beide console=ttyS0
und verwenden console=ttyS1
.
In der Kerneldokumentation ist /dev/console
als Zeichen ein Gerät mit einer Nummer angegeben (5,1)
. Wenn Sie dieses Zeichengerät öffnen, wird die "Haupt" -Konsole geöffnet. Dies ist die letzte Nummer in der Liste der Konsolen. Der erste Prozess, der kein Kernel ist, wird init
"PID 1" genannt und mit /dev/console
der Standardausgabe, dem Standardfehler und der Standardeingabe verbunden.
Wenn keine der Konsolen ein tty ist, /dev/console
gibt das Öffnen den Fehler zurück ENODEV
("No such device"). Der Kernel wirddruckeneine Nachricht aufzeichnen und init
trotzdem starten . Ein Beispiel für eine Kernel-Konsole, bei der es sich nicht um ein tty-Gerät handelt, finden Sie unter " Zeilendrucker"netconsole
oder "Meine Lieblingskonsole" .
Sie können auch eine Liste von tty-Konsolen lesen /sys/class/tty/console/active
. Die systemd-Dokumentation weist darauf hin, dass das erste angezeigte Gerät die Hauptkonsole ist. Die Liste ist eigentlich in umgekehrter Reihenfolge der Kernel-Befehlszeile. In der aktuellen Kerneldokumentation wird fälschlicherweise angegeben, 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 wird die Standarddatei /dev/console
durch ein Pseudo-Terminal-Gerät (PTY) ersetzt. Diese werden am besten als virtuelle Endgeräte bezeichnet. Sie werden dynamisch erstellt und werden auch verwendet, um grafische Terminalemulatoren wie GNOME Terminal und für den Fernzugriff wie zu implementieren ssh
.
Das Linux TTY - Gerät Knoten tty1
durch tty63
sind virtuelle Terminals. Sie werden auch als VTs oder virtuelle Konsolen bezeichnet. Sie simulieren mehrere Konsolen über dem Gerätetreiber der physischen Konsole. Es wird immer nur eine virtuelle Konsole angezeigt und gesteuert. Das aktive Terminal kann z. B. mit chvt
oder Strg + Alt + F1 über beliebig viele Funktionstasten umgeschaltet werden.
Sie können das aktuelle VT auch mit lesen und schreiben /dev/tty0
. tty0
ist die übliche Kernel-Konsole, zB wenn Sie nicht explizit eine ausgewählt haben. Msgstr "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 der erste serielle Anschluss automatisch zur Konsole." Eine "serielle Konsole" ttyS0
ist wahrscheinlich die häufigste Alternative zu tty0
. Es ist nicht möglich, das VT-System über einer seriellen Konsole zu betreiben.
/dev/tty
ist eine der drei von POSIX angegebenen Standardgerätedateien ( /dev/
ist einer der drei von POSIX angegebenen Verzeichnisnamen). Das Öffnen entspricht dem Öffnen des Bedienterminals des aktuellen Prozesses. Das steuernde Terminal wird festgelegt, wenn ein Prozess zum ersten Mal ein Terminal öffnet, zumindest unter Linux . Zum Beispiel init
würde es sich auf beziehen /dev/console
.
Das Trennen vom steuernden Terminal ist einer der Schritte, die traditionell zum Starten eines Hintergrundprozesses erforderlich sind, z. B. eines Systemprotokollierungsdämons . 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 startet das Init-System, z. B. systemd, den Dienst zunächst ohne steuerndes Terminal.