/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
W dawnych dobrych czasach /dev/consolebyła konsola administratora systemu. A urządzenia TTY były urządzeniami szeregowymi użytkowników podłączonymi do serwera. Teraz /dev/consolei /dev/tty0reprezentują bieżący wyświetlacz i zwykle są takie same. Możesz to zmienić na przykład, dodając console=ttyS0do grub.conf. Potem twój /dev/tty0jest monitorem i /dev/consolejest /dev/ttyS0.
Ćwiczenie, aby pokazać różnicę między /dev/ttyi /dev/tty0:
Przejdź do drugiej konsoli, naciskając Ctrl+ Alt+ F2. Zaloguj się jako root. Typ sleep 5; echo tty0 > /dev/tty0. Naciśnij Enteri przejdź do 3. konsoli, naciskając Alt+ F3. Teraz wróć do drugiej konsoli, naciskając Alt+ F2. Wpisz sleep 5; echo tty > /dev/tty, naciśnij Enteri przełącz na 3. konsolę.
Widać, że ttyjest to konsola, od której rozpoczyna się proces, i tty0jest to zawsze bieżąca konsola.
@ SFun28: jeśli sudo anycommanddziała, to również sudo -ido rootowania działa. Nie ma czegoś takiego jak Linux / BSD / Unix, w którym nie można rootować. (Wtedy nie byłby to już Linux / BSD / Unix.)
Evi1M4chine
60
/dev/consoleto wirtualny zestaw urządzeń, które można ustawić jako parametr podczas uruchamiania. Może zostać przekierowany na urządzenie szeregowe lub wirtualną konsolę i domyślnie wskazuje na /dev/tty0. Gdy console=do jądra zostanie przekazanych wiele opcji, dane wyjściowe konsoli trafią do więcej niż jednego urządzenia.
/dev/tty0 jest bieżącą konsolą wirtualną
/dev/tty[1-x]jest jedną z wirtualnych konsol, na które przełączasz się za pomocą control- alt- F1i tak dalej.
/dev/ttyjest rodzajem aliasu do konsoli (fizycznej, wirtualnej lub pseudo urządzenia, jeśli istnieje) powiązanej z procesem, który ją otwiera. W przeciwieństwie do innych urządzeń, nie potrzebujesz uprawnień roota, aby do niego pisać. Zauważ również, że procesy takie jak te uruchomione przez croni podobne procesy wsadowe nie mają zastosowania /dev/tty, ponieważ nie są z nimi powiązane. Te procesy mają ?w TTYkolumnie ps -efwyników.
Co masz na myśli, pytając go z tej instrukcji „/ dev / tty jest konsolą używaną przez proces, który go odpytuje”?
Ron Vince
1
@RonVince Mam na myśli, że /dev/ttymoże to być inne urządzenie, jeśli takie istnieje, w zależności od procesu, który je otwiera. Odpowiedź zaktualizowana.
jlliagre,
Dzięki. Czy mogę wiedzieć, czy procesy faktycznie zapisują / odczytują do / z / dev / tty zamiast bezpośrednio do / z powiązanego z nimi pliku urządzenia?
Ron Vince
@ RonVince Obawiam się, że nie jestem pewien, o co pytasz. Czy mógłbyś to zmienić?
jlliagre,
1
@RonVince Otwarcie / dev / tty (nie /dev/tty[1,..,n]) jest standardem Uniksa (i Linuksa) dla procesu zapisu czegoś do terminala użytkownika. Bezpośrednie pisanie na dowolne inne urządzenie nie jest przenośne, bardziej złożone i mniej niezawodne. Proces nie musi wiedzieć, z jakim faktycznym urządzeniem jest połączony terminal procesowy, jądro już to wie.
W systemie Linux konsolę jądra można skonfigurować za pomocą console=opcji rozruchu . Kod jądra, który wywołuje, printk()może zapisywać do niego komunikaty, np. Gdy urządzenie jest załadowane lub wystąpi błąd. Te komunikaty są również buforowane przez jądro. (Zobacz także dmesg). Gdy urządzenie konsoli zostanie znalezione i uruchomione, odbiera wszystkie uprzednio buforowane wiadomości.
Możesz przejść console=wiele razy, aby skonfigurować wiele konsol, a wiadomości zostaną zapisane na wszystkich z nich. Najwyraźniej możesz wybrać tylko jedną konsolę każdego „typu”: nie możesz używać obu console=ttyS0i console=ttyS1.
Dokumentacja jądra określa /dev/consoleurządzenie znakowe ponumerowane (5,1). Otwarcie tego znaku powoduje otwarcie „głównej” konsoli, która jest ostatnim tty na liście konsol. Pierwszy proces inny niż jądro, zwany initlub „PID 1”, rozpoczyna się od /dev/consolepodłączenia do standardowego wyjścia, standardowego błędu i standardowego wejścia.
Jeśli żadna konsola nie jest tty, otwarcie /dev/consolezwraca błąd ENODEV(„Brak takiego urządzenia”). Jądro to zrobiwydrukowaćzaloguj wiadomość i rozpocznij initniezależnie. Aby zobaczyć przykład konsoli jądra, która nie jest urządzeniem tty, zobacz netconsole, lub moja ulubiona konsola, drukarkę liniową .
Możesz także zobaczyć listę konsoli tty, czytając /sys/class/tty/console/active. Dokumentacja systemd wskazuje, że pierwszym pokazanym urządzeniem jest konsola główna. Lista jest w rzeczywistości w odwrotnej kolejności od wiersza poleceń jądra. Aktualną dokumentację jądro niepoprawnie stwierdza, że ostatnie urządzenie pokazane jest głównym lub „aktywne” konsoli. Z jakiegoś powodu można sondować ten plik pod kątem zmian (w przypadku usunięcia urządzeń konsoli?).
Wewnątrz systemd-nspawnkontenera standardowy /dev/consoleplik jest zastępowany urządzeniem pseudoterminalowym (PTY). Można je najlepiej opisać jako wirtualne urządzenia końcowe. Są tworzone dynamicznie i służą również do implementacji emulatorów terminali graficznych, takich jak GNOME Terminal, i do zdalnego dostępu, takich jak ssh.
/ dev / tty0
Węzły urządzeń Linux TTY tty1przez tty63to wirtualne terminale. Są również nazywane VT lub konsolami wirtualnymi. Symulują wiele konsol na fizycznym sterowniku konsoli. Jednocześnie wyświetlana i kontrolowana jest tylko jedna konsola wirtualna. Aktywny terminal można przełączać, np. Za pomocą chvtlub Ctrl + Alt + F1 za pomocą dowolnej liczby klawiszy funkcyjnych.
Możesz także czytać i zapisywać na bieżącym VT za pomocą /dev/tty0. tty0jest zwykłą konsolą jądra, np. jeśli nie wybrałeś jej jednoznacznie. „System najpierw szuka karty VGA [na której działają VT], a następnie portu szeregowego”. Możesz także ustawić konsolę na określony VT, np console=tty1.
„Jeśli nie masz karty VGA w systemie, pierwszy port szeregowy automatycznie stanie się konsolą”. Taka „konsola szeregowa” ttyS0jest prawdopodobnie najczęstszą alternatywą dla tty0. Nie można użyć systemu VT na konsoli szeregowej.
Odłączanie od terminala sterującego jest jednym z kroków tradycyjnie wymaganych do uruchomienia procesu w tle, na przykład demona rejestrującego system . Kroki, aby stać się procesem w tle, są strasznie skomplikowane, ale mówiąc konkretnie, krokiem, który odłącza się od terminala sterującego, jest wywołanie systemowe setid . W bardziej nowoczesnych systemach system inicjujący, np. Systemd, w pierwszej kolejności uruchamia usługę bez terminala sterującego.
Odpowiedzi:
Z dokumentacji :
W dawnych dobrych czasach
/dev/console
była konsola administratora systemu. A urządzenia TTY były urządzeniami szeregowymi użytkowników podłączonymi do serwera. Teraz/dev/console
i/dev/tty0
reprezentują bieżący wyświetlacz i zwykle są takie same. Możesz to zmienić na przykład, dodającconsole=ttyS0
dogrub.conf
. Potem twój/dev/tty0
jest monitorem i/dev/console
jest/dev/ttyS0
.Ćwiczenie, aby pokazać różnicę między
/dev/tty
i/dev/tty0
:Przejdź do drugiej konsoli, naciskając Ctrl+ Alt+ F2. Zaloguj się jako
root
. Typsleep 5; echo tty0 > /dev/tty0
. Naciśnij Enteri przejdź do 3. konsoli, naciskając Alt+ F3. Teraz wróć do drugiej konsoli, naciskając Alt+ F2. Wpiszsleep 5; echo tty > /dev/tty
, naciśnij Enteri przełącz na 3. konsolę.Widać, że
tty
jest to konsola, od której rozpoczyna się proces, itty0
jest to zawsze bieżąca konsola.źródło
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, a voila - powłoka root.sudo anycommand
działa, to równieżsudo -i
do rootowania działa. Nie ma czegoś takiego jak Linux / BSD / Unix, w którym nie można rootować. (Wtedy nie byłby to już Linux / BSD / Unix.)/dev/console
to wirtualny zestaw urządzeń, które można ustawić jako parametr podczas uruchamiania. Może zostać przekierowany na urządzenie szeregowe lub wirtualną konsolę i domyślnie wskazuje na/dev/tty0
. Gdyconsole=
do jądra zostanie przekazanych wiele opcji, dane wyjściowe konsoli trafią do więcej niż jednego urządzenia./dev/tty0
jest bieżącą konsolą wirtualną/dev/tty[1-x]
jest jedną z wirtualnych konsol, na które przełączasz się za pomocą control- alt- F1i tak dalej./dev/tty
jest rodzajem aliasu do konsoli (fizycznej, wirtualnej lub pseudo urządzenia, jeśli istnieje) powiązanej z procesem, który ją otwiera. W przeciwieństwie do innych urządzeń, nie potrzebujesz uprawnień roota, aby do niego pisać. Zauważ również, że procesy takie jak te uruchomione przezcron
i podobne procesy wsadowe nie mają zastosowania/dev/tty
, ponieważ nie są z nimi powiązane. Te procesy mają?
wTTY
kolumnieps -ef
wyników.źródło
/dev/tty
może to być inne urządzenie, jeśli takie istnieje, w zależności od procesu, który je otwiera. Odpowiedź zaktualizowana./ dev / console
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
W systemie Linux konsolę jądra można skonfigurować za pomocą
console=
opcji rozruchu . Kod jądra, który wywołuje,printk()
może zapisywać do niego komunikaty, np. Gdy urządzenie jest załadowane lub wystąpi błąd. Te komunikaty są również buforowane przez jądro. (Zobacz takżedmesg
). Gdy urządzenie konsoli zostanie znalezione i uruchomione, odbiera wszystkie uprzednio buforowane wiadomości.Możesz przejść
console=
wiele razy, aby skonfigurować wiele konsol, a wiadomości zostaną zapisane na wszystkich z nich. Najwyraźniej możesz wybrać tylko jedną konsolę każdego „typu”: nie możesz używać obuconsole=ttyS0
iconsole=ttyS1
.Dokumentacja jądra określa
/dev/console
urządzenie znakowe ponumerowane(5,1)
. Otwarcie tego znaku powoduje otwarcie „głównej” konsoli, która jest ostatnim tty na liście konsol. Pierwszy proces inny niż jądro, zwanyinit
lub „PID 1”, rozpoczyna się od/dev/console
podłączenia do standardowego wyjścia, standardowego błędu i standardowego wejścia.Jeśli żadna konsola nie jest tty, otwarcie
/dev/console
zwraca błądENODEV
(„Brak takiego urządzenia”). Jądro to zrobiwydrukowaćzaloguj wiadomość i rozpocznijinit
niezależnie. Aby zobaczyć przykład konsoli jądra, która nie jest urządzeniem tty, zobacznetconsole
, lub moja ulubiona konsola, drukarkę liniową .Możesz także zobaczyć listę konsoli tty, czytając
/sys/class/tty/console/active
. Dokumentacja systemd wskazuje, że pierwszym pokazanym urządzeniem jest konsola główna. Lista jest w rzeczywistości w odwrotnej kolejności od wiersza poleceń jądra. Aktualną dokumentację jądro niepoprawnie stwierdza, że ostatnie urządzenie pokazane jest głównym lub „aktywne” konsoli. Z jakiegoś powodu można sondować ten plik pod kątem zmian (w przypadku usunięcia urządzeń konsoli?).Wewnątrz
systemd-nspawn
kontenera standardowy/dev/console
plik jest zastępowany urządzeniem pseudoterminalowym (PTY). Można je najlepiej opisać jako wirtualne urządzenia końcowe. Są tworzone dynamicznie i służą również do implementacji emulatorów terminali graficznych, takich jak GNOME Terminal, i do zdalnego dostępu, takich jakssh
./ dev / tty0
Węzły urządzeń Linux TTY
tty1
przeztty63
to wirtualne terminale. Są również nazywane VT lub konsolami wirtualnymi. Symulują wiele konsol na fizycznym sterowniku konsoli. Jednocześnie wyświetlana i kontrolowana jest tylko jedna konsola wirtualna. Aktywny terminal można przełączać, np. Za pomocąchvt
lub Ctrl + Alt + F1 za pomocą dowolnej liczby klawiszy funkcyjnych.Możesz także czytać i zapisywać na bieżącym VT za pomocą
/dev/tty0
.tty0
jest zwykłą konsolą jądra, np. jeśli nie wybrałeś jej jednoznacznie. „System najpierw szuka karty VGA [na której działają VT], a następnie portu szeregowego”. Możesz także ustawić konsolę na określony VT, npconsole=tty1
.„Jeśli nie masz karty VGA w systemie, pierwszy port szeregowy automatycznie stanie się konsolą”. Taka „konsola szeregowa”
ttyS0
jest prawdopodobnie najczęstszą alternatywą dlatty0
. Nie można użyć systemu VT na konsoli szeregowej./ dev / tty
/dev/tty
jest jednym z trzech standardowych plików urządzeń określonych przez POSIX (/dev/
jest jedną z trzech nazw katalogów określonych przez POSIX). Otwarcie jest równoznaczne z otwarciem terminala sterującego bieżącego procesu. Terminal sterujący jest ustawiany, gdy proces po raz pierwszy otwiera terminal, przynajmniej w systemie Linux . Na przykład winit
odwołaniu byłoby to/dev/console
.Odłączanie od terminala sterującego jest jednym z kroków tradycyjnie wymaganych do uruchomienia procesu w tle, na przykład demona rejestrującego system . Kroki, aby stać się procesem w tle, są strasznie skomplikowane, ale mówiąc konkretnie, krokiem, który odłącza się od terminala sterującego, jest wywołanie systemowe setid . W bardziej nowoczesnych systemach system inicjujący, np. Systemd, w pierwszej kolejności uruchamia usługę bez terminala sterującego.
źródło