Comment Linux utilise / dev / tty et / dev / tty0

8

Je peux voir la différence entre / dev / tty et / dev / tty0 en testant la méthode fournie à partir de cette question . Mais je m'interroge vraiment sur l'utilisation pratique de ces appareils (comme les situations où ils seront utilisés).

Ron Vince
la source
@ 0xC0000022L D'une manière ou d'une autre, je ne peux pas associer tty à sda car contrairement à sda, tty a 3 catégories différentes (tty, tty0, tty [1, .., N]).
Ron Vince
Je pense que l'analogie fournie par @ 0xC0000022L est assez trompeuse. Tant /dev/sdaet /dev/sda1désignent des dispositifs de bloc spécifique (on se trouve une partie de l'autre). /dev/tty, d'autre part, est un périphérique virtuel lié à aucun autre terminal spécifique.
Celada

Réponses:

16

/dev/ttyest le tty de contrôle du processus en cours , pour tout processus qui ouvre réellement ce fichier spécial. Ce n'est pas nécessairement un périphérique de console virtuelle ( /dev/ttyn ), et peut être un, un port série etc. Par exemple. pour un shell dans un émulateur de terminal sous un serveur X exécuté localement, lesdits programmes forment une chaîne d'interactions telle que:

   Shell Unix
     ⇕ /dev/pts/2(≡ /dev/ttypour ses processus)
 pilote pty noyau
     ⇕ /dev/ptmx
 émulateur de terminal
     ⇕ X Window protocole
   serveur X
     ⇕ /dev/tty7(≡ /dev/ttypour le serveur)
 console système
zxc↿⇂ [_̈░░]
    de l' utilisateur

L' /dev/ttyutilisation des programmes par les pays utilisateurs comprend:

  • Écrivez quelque chose au terminal de contrôle, en ignorant toutes les redirections et les tuyaux;
  • Faire un ioctl () - voir tty_ioctl (4);
  • Par exemple, détachez-vous du terminal (TIOCNOTTY).

/dev/tty0est la console virtuelle actuellement active (c'est-à-dire visible sur le moniteur) du système d'exploitation . Ce fichier spécial, peu probable, est utilisé de manière significative par les logiciels système, mais /dev/consoleest pratiquement un «alias» pourtty0 et /dev/consolea une grande utilité pour les démons syslog et, parfois, par le noyau lui-même.

Expérimentez pour montrer la différence: exécutez un rootshell sur tty3( Ctrl+ Alt+ F3) ou dans un émulateur de terminal. Maintenant

# sleep 2; echo test >/dev/tty

puis rapidement Ctrl+ Alt+ F2, attendez deux secondes, et Ctrl+ Alt+ quoi que ce soit de retour. Où voyez-vous la sortie?
Et maintenant, le même test pour /dev/tty0.

Incnis Mrsi
la source
Votre réponse n'a aucune différence avec la réponse fournie par la question que j'ai liée dans ma question. Ce qui m'inquiète, c'est le processus de la façon dont le noyau les utilise ensemble.
Ron Vince
@ Ron Vince: mis à jour.
Incnis Mrsi
Est-il obligatoire pour un processus d'écrire dans / dev / tty au lieu de leur / dev / tty [1, .., N] spécifique?
Ron Vince du
@ Ron Vince: Encore une fois, un processus exécuté dans une session SSH (techniquement, un enfant de sshd), ou dans une xtermfenêtre, n'a pas son / dev / tty n spécifique  . Il n'interagit pas avec les périphériques de la console système , car il est connecté à un périphérique pseudo-terminal. Cela ne l'empêche pas d'ouvrir / dev / tty  n s'il s'agit d'un processus racine ou du même utilisateur connecté à tty  n . Sur le point d'ajouter quelques points sur «tty spécifique» à la réponse.
Incnis Mrsi
Disons que j'utilise xterm qui est un émulateur de terminal. Est-ce la chaîne (xterm -> / dev / tty -> / dev / pty -> / dev / tty [1, .., N] -> shell)? Pour / dev / tty0, je pense que je suis clair à ce sujet. La sortie de tout processus et noyau sera envoyée au / dev / tty [1, .., N] que le pilote de périphérique tty gère maintenant. Ceci est la chaîne (noyau / processus -> / dev / tty0 -> courant / dev / tty [1, .., N])
Ron Vince
2

/ dev / tty est le tty de contrôle pour tout processus. Cela peut être votre coquille.

Si votre processus n'a pas de tty de contrôle, / dev / tty n'est pas disponible, c'est par exemple le cas pour les démons.

Si votre processus a un tty de contrôle, alors / dev / tty est un alias de pilote pour le pilote tty réel que votre processus utilise pour stdin, stdout ou stderr.

Voir man -s7d ttypour plus d'informations. Notez que la section où se trouve ce manuel peut différer d'un OS à l'autre et ne doit pas être confondue avec la page de manuel de la section 1. Vérifiez donc par exemple man -k tty.

schily
la source
msgstr "alias du pilote tty réel que votre processus utilise". Le texte cité fait-il référence à tty [1, .., N]?
Ron Vince
L'alias du pilote est quelque chose de différent que l'alias. Il s'agit d'un pilote différent, mais il dirige le travail vers tout ce à quoi votre processus est vraiment connecté.
schily
Si je comprends bien (reportez-vous également à tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3 ), / dev / tty est l'interface du processus en cours (actuellement traité par le processeur) vers / dev / tty [1, .., N]. Pendant ce temps, / dev / tty0 est de sortir des données qui n'appartiennent pas à / dev / tty [1, .., N] spécifiques, donc de sortir vers / dev / tty [1, .., N] qui appartient au processus en cours . Si ceux-ci sont corrects, je me demande quand le / dev / tty0 sera-t-il réellement utilisé.
Ron Vince
Si vous n'avez pas votre propre maison, une autre entrée possible dans cette maison ne vous donnerait pas de maison.
schily
Ainsi, / dev / tty0 consiste à sortir des données vers la session shell actuelle du superutilisateur (associée à / dev / tty [1, .., N]).
Ron Vince