Linux: Unterschied zwischen / dev / console, / dev / tty und / dev / tty0


133

Auf einem Linux - System, was ist der Unterschied zwischen /dev/console, /dev/ttyund /dev/tty0?

Was ist ihre jeweilige Verwendung und wie vergleichen sie?


3
Sie könnten auch interessiert sein diese
Kevin

Antworten:


93

Aus der Dokumentation :

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

In der guten alten Zeit /dev/consolewar die Systemadministratorkonsole. Und TTYs waren die seriellen Geräte der Benutzer, die an einen Server angeschlossen waren. Jetzt /dev/consoleund /dev/tty0repräsentieren aktuelle Anzeige und sind in der Regel gleich. Sie können es beispielsweise durch Hinzufügen console=ttyS0zu überschreiben grub.conf. Danach ist Ihr /dev/tty0Monitor und /dev/consoleist /dev/ttyS0.

Eine Übung, um den Unterschied zwischen /dev/ttyund 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 ttydie Konsole ist, an der der Prozess beginnt, und dass tty0es sich um eine immer aktuelle Konsole handelt.


6
schöne Übung! Ubuntu sperrt root. Eine Möglichkeit, dies auf Ubuntu zu reproduzieren, ist:$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
SFun28

10
@ Sfun28 habe ich immer benutzt sudo -iund voila - eine root shell.
André Laszlo

4
Eine Redewendung für das Schreiben in Dateien, für die Root-Rechte erforderlich sind, ist echo stuff | sudo tee / dev / tty0> / dev / null;
Peter Cordes

Teufel noch mal. Als Ī̲ unix.stackexchange.com/a/229598/80483 schrieb, wusste Ī̲ nichts von dieser Antwort!
Incnis Mrsi

@ SFun28: Wenn es sudo anycommandfunktioniert, dann funktioniert es auch, sudo -iroot zu werden. Es gibt kein Linux / BSD / Unix, bei dem man nicht root werden kann. (Dann wäre es nicht mehr Linux / BSD / Unix.)
Evi1M4chine

60
  • /dev/consoleist 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/ttyist 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 cronund ähnliche Batch-Prozesse nicht verwendbar sind /dev/tty, da sie mit keinem assoziiert sind. Diese Prozesse haben eine ?in der TTYSpalte der ps -efAusgabe.


Was meinen Sie mit der Abfrage von dieser Anweisung "/ dev / tty ist die Konsole, die von dem Prozess verwendet wird, der sie abfragt"?
Ron Vince

1
@ RonVince Ich meine, es /dev/ttykann sich um ein anderes Gerät handeln, je nachdem, welcher Prozess es öffnet. Antwort aktualisiert.
Juli

Vielen Dank. Darf ich wissen, dass Prozesse tatsächlich in / aus / dev / tty schreiben / lesen, anstatt direkt in / aus der mit ihnen verknüpften Gerätedatei?
Ron Vince

@ RonVince Ich fürchte, ich bin nicht sicher, was Sie fragen. Könnten Sie es umformulieren?
Juli

1
@ RonVince Opening / dev / tty (nicht /dev/tty[1 ,..,n]) ist der Unix- (und Linux-) Standard für einen Prozess zum Schreiben von Daten auf das Terminal des Benutzers. Direktes Schreiben auf ein anderes Gerät ist nicht portabel, komplexer und weniger zuverlässig. Ein Prozess muss nicht wissen, mit welchem ​​Gerät das Prozess-Terminal verbunden ist, der Kernel weiß es bereits.
Juli

20

/ dev / console

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=ttyS0und verwenden console=ttyS1.

In der Kerneldokumentation ist /dev/consoleals 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/consoleder Standardausgabe, dem Standardfehler und der Standardeingabe verbunden.

Wenn keine der Konsolen ein tty ist, /dev/consolegibt das Öffnen den Fehler zurück ENODEV("No such device"). Der Kernel wirddruckeneine Nachricht aufzeichnen und inittrotzdem 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-nspawnContainer wird die Standarddatei /dev/consoledurch 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.

/ dev / tty0

Das Linux TTY - Gerät Knoten tty1 durch tty63sind 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 chvtoder Strg + Alt + F1 über beliebig viele Funktionstasten umgeschaltet werden.

Sie können das aktuelle VT auch mit lesen und schreiben /dev/tty0. tty0ist 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" ttyS0ist wahrscheinlich die häufigste Alternative zu tty0. Es ist nicht möglich, das VT-System über einer seriellen Konsole zu betreiben.

/ dev / tty

/dev/ttyist 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 initwü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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.