/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.
@ 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.
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 Knotentty1 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.
Antworten:
Aus der Dokumentation :
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ügenconsole=ttyS0
zu überschreibengrub.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
. Typsleep 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. Tippensleep 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 dasstty0
es sich um eine immer aktuelle Konsole handelt.quelle
$ 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 mehrereconsole=
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 voncron
und ähnliche Batch-Prozesse nicht verwendbar sind/dev/tty
, da sie mit keinem assoziiert sind. Diese Prozesse haben eine?
in derTTY
Spalte derps -ef
Ausgabe.quelle
/dev/tty
kann sich um ein anderes Gerät handeln, je nachdem, welcher Prozess es öffnet. Antwort aktualisiert./ 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 auchdmesg
). 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 beideconsole=ttyS0
und verwendenconsole=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, wirdinit
"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ückENODEV
("No such device"). Der Kernel wirddruckeneine Nachricht aufzeichnen undinit
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 implementierenssh
./ dev / tty0
Das Linux TTY - Gerät Knoten
tty1
durchtty63
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. mitchvt
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, zconsole=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 zutty0
. Es ist nicht möglich, das VT-System über einer seriellen Konsole zu betreiben./ dev / tty
/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 Beispielinit
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.
quelle