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


8

Riesco a vedere la differenza tra / dev / tty e / dev / tty0 testando il metodo fornito da questa domanda . Ma mi chiedo davvero l'uso pratico di quei dispositivi (come le situazioni in cui verranno utilizzati).


@ 0xC0000022L In qualche modo, non riesco a mettere in relazione tty con sda perché a differenza di sda, tty ha 3 diverse categorie (tty, tty0, tty [1, .., N]).
Ron Vince,

Penso che l'analogia fornita da @ 0xC0000022L sia abbastanza fuorviante. Entrambi /dev/sdae /dev/sda1designano specifici dispositivi a blocchi (uno sembra essere una porzione dell'altro). /dev/ttyd'altra parte, è un dispositivo virtuale correlato a nessun altro tty specifico.
Celada,

Risposte:


16

/dev/ttyè la tty di controllo del processo corrente , per qualsiasi processo che apre effettivamente questo file speciale. Non è necessariamente un dispositivo console virtuale ( /dev/ttyn ) e può essere un, una porta seriale, ecc. Se il tty di controllo non è una console virtuale, il processo non deve interagire con i dispositivi della console anche se la sua pseudotty è effettivamente implementata sulla console di sistema. Per esempio. per una shell in un emulatore di terminale sotto X server locale, detti programmi formano una catena di interazioni come:

   Shell Unix
     ⇕ /dev/pts/2(≡ /dev/ttyper i suoi processi)
 kernel pty driver
     ⇕ /dev/ptmx
 emulatore di terminale
     ⇕ protocollo
   X Window X server
     ⇕ /dev/tty7(≡ /dev/ttyper il server)
 console di sistema
zxc↿⇂ [_̈░░]
    utente

L'utilizzo /dev/ttyda parte dei programmi per utenti comprende:

  • Scrivi qualcosa sul terminale di controllo, ignorando tutti i reindirizzamenti e i tubi;
  • Crea un ioctl () - vedi tty_ioctl (4);
  • Ad esempio, staccare dal terminale (TIOCNOTTY).

/dev/tty0è la console virtuale attualmente attiva (cioè visibile sul monitor) del sistema operativo . È improbabile che questo file speciale sia utilizzato in modo significativo dal software di sistema, ma /dev/consoleè praticamente un "alias" pertty0 e /dev/consoleha un grande uso da parte dei demoni syslog e, talvolta, dal kernel stesso.

Sperimenta per mostrare la differenza: esegui una rootshell su tty3( Ctrl+ Alt+ F3) o in un emulatore di terminale. Adesso

# sleep 2; echo test >/dev/tty

quindi rapidamente Ctrl+ Alt+ F2, attendi due secondi e Ctrl+ Alt+ qualunque cosa accada. Dove vedi l'output?
E ora lo stesso test per /dev/tty0.


La tua risposta non ha alcuna differenza con la risposta fornita dalla domanda che ho collegato alla mia domanda. Ciò di cui mi preoccupo è il processo con cui il kernel li usa insieme.
Ron Vince,

@ Ron Vince: aggiornato.
Incnis Mrsi,

È obbligatorio per un processo scrivere su / dev / tty invece del loro specifico / dev / tty [1, .., N]?
Ron Vince,

@Ron Vince: Ancora una volta, un processo eseguito all'interno di una sessione SSH (tecnicamente, un figlio di sshd) o in una xtermfinestra, non ha il suo specifico / dev / tty  n . Non interagisce con i dispositivi della console di sistema , poiché è collegato a un dispositivo pseudo-terminale. Questo non gli impedisce di aprire / dev / tty  n se si tratta di un processo di root o dello stesso utente che ha effettuato l'accesso a tty  n . In procinto di aggiungere alcuni punti su "tty specifico" alla risposta.
Incnis Mrsi,

Diciamo che uso xterm che è un emulatore di terminale. È questa la catena (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Per / dev / tty0, penso di esserne chiaro. L'output da qualsiasi processo e kernel verrà inviato a / dev / tty [1, .., N] che il driver di dispositivo tty gestisce ora. Questa è la catena (kernel / processo -> / dev / tty0 -> current / dev / tty [1, .., N])
Ron Vince

2

/ dev / tty è il tty di controllo per qualsiasi processo. Questa potrebbe essere la tua shell.

Se il tuo processo non ha un controllo tty, / dev / tty non è disponibile, questo vale per i demoni.

Se il tuo processo ha un tty di controllo, allora / dev / tty è un alias del driver per il vero driver tty che il tuo processo sta usando per stdin, stdout o stderr.

Vedi man -s7d ttyper maggiori informazioni. Si noti che la sezione in cui si trova questo manuale può differire tra i diversi sistemi operativi e non deve essere confusa con la pagina man nella sezione 1. Quindi controllare ad es man -k tty.


"alias per il vero driver tty utilizzato dal processo". Il testo citato fa riferimento a tty [1, .., N]?
Ron Vince,

L'alias del driver è qualcosa di diverso rispetto al semplice alias. È un driver diverso ma dirige il lavoro a qualunque cosa il tuo processo sia realmente connesso.
schily

Se ho capito bene (fare riferimento anche a tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty è l'interfaccia per il processo corrente (attualmente elaborato dalla CPU) su / dev / tty [1, .., N]. Nel frattempo, / dev / tty0 è quello di produrre dati che non appartengono a / dev / tty [1, .., N] specifici, quindi output a / dev / tty [1, .., N] che appartiene al processo corrente . Se quelli sono corretti, mi chiedo quando sarà effettivamente utilizzato / dev / tty0.
Ron Vince,

Se non hai una casa propria, un'eventuale entrata alternativa in quella casa non ti darebbe una casa.
schily

Quindi, / dev / tty0 è l'output dei dati alla sessione shell corrente del superutente (associata a / dev / tty [1, .., N]).
Ron Vince,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.