GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

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 mehreren console= 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 von cron gestarteten und ähnliche Batch-Prozesse haben kein verwendbares /dev/tty , da sie mit keinem verknüpft sind. Diese Prozesse haben einen ? im TTY Spalte von ps -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.


Linux
  1. So ersetzen Sie eine ausgefallene Festplatte in einem Linux-Software-RAID

  2. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  3. So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

  4. Was sind /dev/zero- und /dev/null-Dateien in Linux

  5. Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

tty (/dev/tty ) vs. pts (/dev/pts) unter Linux

Kernel:/dev/kmem und /dev/mem deaktivieren

Wie Linux /dev/tty und /dev/tty0 verwendet

Ist es falsch, /dev/random unter Linux mit /dev/urandom zu verknüpfen?

Erstellen Sie ein virtuelles Blockgerät, das in /dev/null schreibt

Unterschiede zwischen /dev/sda und /dev/sda1