GNU/Linux >> Znalost Linux >  >> Linux

Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0

Z dokumentace jádra Linuxu na Kernel.org:

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

Za starých dobrých časů /dev/console byla konzole správce systému. A TTY byla sériová zařízení uživatelů připojená k serveru.

Nyní /dev/console a /dev/tty0 představují aktuální zobrazení a obvykle jsou stejné. Můžete jej přepsat například přidáním console=ttyS0grub.conf . Poté vaše /dev/tty0 je monitor a /dev/console je /dev/ttyS0 .

Cvičení, které ukáže rozdíl mezi /dev/tty a /dev/tty0 :

Přepněte na 2. konzoli stisknutím Ctrl +Alt +F2 . Přihlaste se jako root . Zadejte sleep 5; echo tty0 > /dev/tty0 . Stiskněte Enter a přepněte na 3. konzoli stisknutím Alt +F3 .Nyní se přepněte zpět na 2. konzoli stisknutím Alt +F2 . Zadejte sleep 5; echo tty > /dev/tty , stiskněte Enter a přepněte na 3. konzoli.

Můžete vidět, že tty je konzola, kde proces začíná, a tty0 je vždy aktuální konzole.


  • /dev/console je virtuální sada zařízení, která lze nastavit jako parametr při bootování. Může být přesměrován na sériové zařízení nebo virtuální konzoli a ve výchozím nastavení ukazuje na /dev/tty0 . Při více console= volby jsou předány jádru, výstup z konzole půjde na více než jedno zařízení;

  • /dev/tty[0-N] (N je nejvyšší přiřazené číslo TTY, např. 63) je jedna z virtuálních konzolí, na kterou se přepnete pomocí ovládání -alt -F1 a tak dále;

  • /dev/tty0 je také ve výchozím nastavení virtuální konzole;

  • /dev/tty je druh alias konzole (fyzické, virtuální nebo pseudo zařízení, pokud existuje) přidružený k procesu, který ji otevírá. Na rozdíl od ostatních zařízení nepotřebujete k zápisu práva root. Všimněte si také, že procesy podobné těm, které spouští cron a podobné dávkové procesy nemají použitelné /dev/tty , protože nejsou s žádnými spojeny. Tyto procesy mají ? v TTY sloupec ps -ef výstup.


/dev/console

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

V Linuxu lze konzolu jádra nakonfigurovat pomocí console= možnost spouštění. Kód jádra, který volá printk() může do něj psát zprávy, např. při načtení zařízení nebo při výskytu chyby. Tyto zprávy jsou také ukládány jádrem. (Viz také dmesg ). Když je konzolové zařízení nalezeno a spuštěno, obdrží všechny dříve uložené zprávy.

Můžete předat console= vícekrát pro konfiguraci více konzol a zprávy se budou zapisovat do všech z nich. Zjevně můžete vybrat pouze jednu konzoli každého "typu":nemůžete použít obě console=ttyS0 a console=ttyS1 .

Dokumentace jádra specifikuje /dev/console jako znakové zařízení očíslované (5,1) . Otevřením tohoto znakového zařízení se otevře "hlavní" konzole, která je poslední tty v seznamu konzolí. První proces mimo jádro, nazvaný init nebo "PID 1", začíná /dev/console připojeno ke standardnímu výstupu, standardní chybě a standardnímu vstupu.

Pokud žádná z konzol není tty, otevřete /dev/console vrátí chybu ENODEV ("Žádné takové zařízení"). Jádro se vytiskne zapište zprávu a spusťte init bez ohledu na. Příklad konzole jádra, která není zařízením tty, naleznete v části netconsole , nebo moje oblíbená konzole řádková tiskárna.

Seznam tty konzol můžete také zobrazit přečtením /sys/class/tty/console/active . dokumentace systemd poukazuje na to, že první zobrazené zařízení je hlavní konzole. Seznam je ve skutečnosti v obráceném pořadí příkazového řádku jádra. Aktuální dokumentace jádra nesprávně uvádí, že poslední zobrazené zařízení je hlavní nebo "aktivní" konzole. Z nějakého důvodu je možné tento soubor dotazovat na změny (v případě, že budou konzolová zařízení odstraněna?).

Uvnitř systemd-nspawn kontejner, standardní /dev/console soubor je nahrazen pseudoterminálním zařízením (PTY). Ty by se daly nejlépe popsat jako virtuální koncová zařízení. Jsou vytvářeny dynamicky a používají se také k implementaci grafických emulátorů terminálu, jako je GNOME Terminal, a pro vzdálený přístup jako ssh .

/dev/tty0

Uzly zařízení Linux TTY tty1tty63 jsou virtuální terminály. Jsou také označovány jako VT nebo jako virtuální konzoly. Simulují více konzol nad fyzickým ovladačem zařízení konzoly. Najednou je zobrazena a ovládána pouze jedna virtuální konzole. Aktivní terminál lze přepnout nap. pomocí chvt , nebo Ctrl+Alt+F1 pomocí libovolného počtu funkčních kláves.

Můžete také číst a zapisovat do aktuálního VT pomocí /dev/tty0 . tty0 je obvyklá kernel konzole, např. pokud jste žádnou explicitně nevybrali. "Systém nejprve hledá VGA kartu [na které běží VT] a poté sériový port." Můžete také nastavit konzoli na konkrétní VT, např. console=tty1 .

"Pokud v systému nemáte VGA kartu, první sériový port se automaticky stane konzolí." "Sériová konzole", jako je ttyS0 je pravděpodobně nejběžnější alternativou k tty0 . Není možné používat systém VT nad sériovou konzolí.

/dev/tty

/dev/tty je jedním ze tří standardních souborů zařízení specifikovaných POSIX (/dev/ je jedním ze tří jmen adresářů určených POSIX). Jeho otevření je ekvivalentní otevření ovládacího terminálu aktuálního procesu. Řídicí terminál je nastaven, když proces poprvé otevře terminál, alespoň na Linuxu. Například v init , odkazovalo by se na /dev/console .

Odpojení od řídicího terminálu je jedním z kroků tradičně požadovaných pro spuštění procesu na pozadí, například systémového logovacího démona. Kroky, jak se stát procesem na pozadí, jsou strašně složité, ale abych byl konkrétní, krok, který se odpojí od řídicího terminálu, je systémové volání setsid. V modernějších systémech je init systém např. systemd na prvním místě spustí službu bez jakéhokoli řídícího terminálu.


Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Kdy použít /dev/random vs /dev/urandom?

  1. Jak namapovat zařízení /dev/sdX a /dev/mapper/mpathY ze zařízení /dev/dm-Z

  2. Jak kódovat base64 /dev/random nebo /dev/urandom?

  3. jádro:deaktivace /dev/kmem a /dev/mem

  1. Jak Linux používá /dev/tty a /dev/tty0

  2. echo nebo print /dev/stdin /dev/stdout /dev/stderr

  3. Proč jsou < nebo > vyžadovány pro použití /dev/tcp