GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

Dalla documentazione del kernel Linux su Kernel.org:

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

Ai bei vecchi tempi /dev/console era la console dell'amministratore di sistema. E i TTY erano i dispositivi seriali degli utenti collegati a un server.

Ora /dev/console e /dev/tty0 rappresentano la visualizzazione corrente e di solito sono uguali. Puoi sovrascriverlo ad esempio aggiungendo console=ttyS0 a grub.conf . Dopodiché il tuo /dev/tty0 è un monitor e /dev/console è /dev/ttyS0 .

Un esercizio per mostrare la differenza tra /dev/tty e /dev/tty0 :

Passa alla seconda console premendo Ctrl +Alt +F2 . Accedi come root . Digita sleep 5; echo tty0 > /dev/tty0 . Premi Invio e passa alla terza console premendo Alt +F3 .Ora torna alla seconda console premendo Alt +F2 . Digita sleep 5; echo tty > /dev/tty , premi Invio e passa alla terza console.

Puoi vedere quel tty è la console dove inizia il processo, e tty0 è una console sempre attuale.


  • /dev/console è un set virtuale di dispositivi che può essere impostato come parametro al momento dell'avvio. Potrebbe essere reindirizzato a un dispositivo seriale oa una console virtuale e per impostazione predefinita punta a /dev/tty0 . Quando più console= le opzioni vengono passate al kernel, l'output della console andrà a più di un dispositivo;

  • /dev/tty[0-N] (N è il numero TTY più alto attribuito, ad es. 63) è una delle console virtuali a cui passi con control -alt -F1 e così via;

  • /dev/tty0 è anche per impostazione predefinita console virtuale;

  • /dev/tty è una specie di alias della console (fisica, virtuale o pseudo device, se presente) associata al processo che la apre. A differenza degli altri dispositivi, non hai bisogno dei privilegi di root per scrivere su di esso. Nota anche che processi come quelli lanciati da cron e processi batch simili non hanno /dev/tty utilizzabili , in quanto non sono associati a nessuno. Questi processi hanno un ? nel TTY colonna di ps -ef uscita.


/dev/console

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

Su Linux, la console del kernel può essere configurata usando console= opzione di avvio. Codice del kernel che chiama printk() può scrivere messaggi ad esso, ad es. quando un dispositivo viene caricato o si verifica un errore. Questi messaggi sono anche bufferizzati dal kernel. (Vedi anche dmesg ). Quando un dispositivo console viene trovato e avviato, riceve tutti i messaggi precedentemente bufferizzati.

Puoi passare console= più volte per configurare più console e i messaggi verranno scritti su tutte. Apparentemente puoi selezionare solo una console per ogni "tipo":non puoi usare entrambe le console=ttyS0 e console=ttyS1 .

La documentazione del kernel specifica /dev/console come dispositivo di carattere numerato (5,1) . L'apertura di questo dispositivo di caratteri apre la console "principale", che è l'ultima tty nell'elenco delle console. Il primo processo non-kernel, chiamato init o "PID 1", inizia con /dev/console connesso a standard output, standard error e standard input.

Se nessuna delle console è tty, aprire /dev/console restituisce l'errore ENODEV ("Nessun apparecchio di questo tipo"). Il kernel stampa registra un messaggio e avvia init indipendentemente. Per un esempio di una console del kernel che non è un dispositivo tty, vedi netconsole , o la mia console preferita la stampante di linea.

Puoi anche vedere un elenco di console tty leggendo /sys/class/tty/console/active . La documentazione di systemd sottolinea che il primo dispositivo mostrato è la console principale. L'elenco è in realtà in ordine inverso rispetto alla riga di comando del kernel. L'attuale documentazione del kernel afferma erroneamente che l'ultimo dispositivo mostrato è la console principale o "attiva". Per qualche motivo è possibile eseguire il polling di questo file per le modifiche (nel caso in cui i dispositivi della console vengano rimossi?).

All'interno di un systemd-nspawn contenitore, lo standard /dev/console file viene sostituito con un dispositivo pseudo-terminale (PTY). Questi sarebbero meglio descritti come dispositivi terminali virtuali. Vengono creati dinamicamente e vengono utilizzati anche per implementare emulatori di terminale grafico come GNOME Terminal e per l'accesso remoto come ssh .

/dev/tty0

I nodi del dispositivo Linux TTY tty1 attraverso tty63 sono terminali virtuali. Sono anche chiamate VT o console virtuali. Simulano più console sopra il driver del dispositivo della console fisica. Viene mostrata e controllata una sola console virtuale alla volta. Il terminale attivo può essere commutato, ad es. utilizzando chvt o Ctrl+Alt+F1 attraverso il numero di tasti funzione disponibili.

Puoi anche leggere e scrivere sul VT corrente usando /dev/tty0 . tty0 è la solita console del kernel, ad es. se non ne hai selezionato uno esplicitamente. "Il sistema cerca prima una scheda VGA [che è quella su cui girano i VT] e poi una porta seriale". È inoltre possibile impostare la console su un VT specifico, ad es. console=tty1 .

"Se non hai una scheda VGA nel tuo sistema, la prima porta seriale diventerà automaticamente la console." Una "console seriale" come ttyS0 è probabilmente l'alternativa più comune a tty0 . Non è possibile utilizzare il sistema VT su una console seriale.

/dev/tty

/dev/tty è uno dei tre file di dispositivo standard specificati da POSIX (/dev/ è uno dei tre nomi di directory specificati da POSIX). Aprirlo equivale ad aprire il terminale di controllo del processo in corso. Il terminale di controllo viene impostato quando un processo apre per la prima volta un terminale, almeno su Linux. Ad esempio, in init , farebbe riferimento a /dev/console .

La disconnessione dal terminale di controllo è uno dei passaggi tradizionalmente richiesti per avviare un processo in background, ad esempio un demone di registrazione del sistema. I passaggi per diventare un processo in background sono orribilmente intricati, ma per essere precisi, il passaggio che si stacca dal terminale di controllo è la chiamata di sistema setsid. Nei sistemi più moderni, il sistema init, ad es. systemd avvia il servizio senza alcun terminale di controllo in primo luogo.


Linux
  1. Quando usare /dev/random vs /dev/urandom?

  2. Cosa sono i file /dev/zero e /dev/null in Linux

  3. È sbagliato collegare /dev/random a /dev/urandom su Linux?

  4. Perché su alcuni sistemi Linux, il filesystem di root appare come /dev/root invece di /dev/<real device node>in mtab?

  5. Perché sono necessari < o > per usare /dev/tcp

tty (/dev/tty ) vs pts (/dev/pts) in Linux

kernel:disabilitare /dev/kmem e /dev/mem

Come Linux usa /dev/tty e /dev/tty0

echo o print /dev/stdin /dev/stdout /dev/stderr

Crea un dispositivo a blocchi virtuale che scrive su /dev/null

Differenze tra /dev/sda e /dev/sda1