/dev/tty Current TTY device
/dev/console System console
/dev/tty0 Current virtual console
Au bon vieux temps /dev/consoleétait la console de l'administrateur système. Et les téléscripteurs étaient les périphériques série des utilisateurs connectés à un serveur. Maintenant /dev/consoleet /dev/tty0représentent l'affichage actuel et sont généralement les mêmes. Vous pouvez le remplacer par exemple en ajoutant console=ttyS0à grub.conf. Après que votre /dev/tty0est un moniteur et /dev/consoleest /dev/ttyS0.
Un exercice pour montrer la différence entre /dev/ttyet /dev/tty0:
Passez à la 2ème console en appuyant sur Ctrl+ Alt+ F2. Connectez-vous en tant que root. Type sleep 5; echo tty0 > /dev/tty0. Appuyez sur Enteret passez à la 3ème console en appuyant sur Alt+ F3. Revenez maintenant à la 2e console en appuyant sur Alt+ F2. Tapez sleep 5; echo tty > /dev/tty, appuyez sur Enteret passez à la 3ème console.
Vous pouvez voir que ttyc'est la console où le processus démarre et qu'il tty0s'agit d'une console toujours actuelle.
@ SFun28: si ça sudo anycommandmarche, sudo -ialler en racine marche aussi. Il n’existe pas de Linux / BSD / Unix où vous ne pouvez pas accéder à la racine. (Alors ce ne serait plus Linux / BSD / Unix.)
Evi1M4chine
59
/dev/consoleest un ensemble virtuel de périphériques pouvant être définis en tant que paramètre au moment du démarrage. Il peut être redirigé vers un périphérique série ou une console virtuelle et pointe par défaut sur /dev/tty0. Lorsque plusieurs console=options sont passées au noyau, la sortie de la console ira sur plusieurs périphériques.
/dev/tty0 est la console virtuelle actuelle
/dev/tty[1-x]est l’une des consoles virtuelles vers lesquelles vous passez avec control- alt- F1et ainsi de suite.
/dev/ttyest une sorte d'alias pour la console (physique, virtuelle ou pseudo-périphérique, le cas échéant) associé au processus qui l'ouvre. Contrairement aux autres périphériques, vous n'avez pas besoin des privilèges root pour y écrire. Notez également que les processus tels que ceux lancés par cronet les processus de traitement par lots similaires ne sont pas utilisables /dev/tty, car ils ne sont associés à aucun. Ces processus ont un ?dans la TTYcolonne de ps -efsortie.
Qu'entendez-vous par interrogation à partir de cette instruction "/ dev / tty est la console utilisée par le processus qui l'interroge"?
Ron Vince
1
@RonVince Je veux dire /dev/ttypeut être un périphérique différent, le cas échéant, en fonction du processus qui l'ouvre. Réponse mise à jour.
Jlliagre
Merci. Puis-je savoir si les processus écrivent / lisent dans / depuis / dev / tty au lieu de directement dans / depuis le fichier de périphérique qui leur est associé?
Ron Vince le
@RonVince J'ai bien peur de ne pas savoir ce que vous demandez. Pourriez-vous reformuler?
Jlliagre
1
@RonVince Opening / dev / tty (pas /dev/tty[1 ,..,n]) est le standard Unix (et Linux) pour un processus permettant d'écrire quelque chose sur le terminal de l'utilisateur. L’écriture directe sur tout autre appareil est non portable, plus complexe et moins fiable. Un processus n'a pas besoin de savoir quel est le périphérique auquel le processus est connecté, le noyau le sait déjà.
Sous Linux, la console du noyau peut être configurée à l'aide de l' console=option de démarrage . Le code du noyau qui appelle printk()peut y écrire des messages, par exemple lorsqu'un périphérique est chargé ou qu'une erreur se produit. Ces messages sont également mis en mémoire tampon par le noyau. (Voir aussi dmesg). Lorsqu'un périphérique de console est trouvé et démarré, il reçoit tous les messages précédemment mis en mémoire tampon.
Vous pouvez passer console=plusieurs fois pour configurer plusieurs consoles et des messages seront écrits pour chacune d'entre elles. Apparemment, vous ne pouvez sélectionner qu'une console de chaque "type": vous ne pouvez pas utiliser les deux console=ttyS0et console=ttyS1.
La documentation du noyau spécifie /dev/consolecomme un périphérique de caractère numéroté (5,1). L'ouverture de ce périphérique de caractères ouvre la console "principale", qui est le dernier terminal de la liste des consoles. Le premier processus non noyau, appelé init"PID 1", est démarré avec une /dev/consoleconnexion à la sortie standard, une erreur standard et une entrée standard.
Si aucune des consoles n'est un terminal, l'ouverture /dev/consolerenvoie l'erreur ENODEV("No such device"). Le noyau vaimpressionenregistrer un message et commencer initquand même. Pour un exemple d'une console du noyau qui n'est pas un périphérique tty, voir netconsolema console préférée, l'imprimante en ligne .
Vous pouvez également voir une liste de consoles tty en lisant /sys/class/tty/console/active. La documentation de systemd indique que le premier périphérique affiché est la console principale. La liste est en réalité dans l’ordre inverse de la ligne de commande du noyau. La documentation actuelle du noyau indique à tort que le dernier périphérique affiché est la console principale ou "active". Pour une raison quelconque, il est possible d’examiner les modifications de ce fichier (dans le cas où des périphériques de la console seraient supprimés?).
Dans un systemd-nspawnconteneur, le /dev/consolefichier standard est remplacé par un périphérique pseudo-terminal (PTY). Celles-ci seraient mieux décrites comme des terminaux virtuels. Ils sont créés de manière dynamique et sont également utilisés pour implémenter des émulateurs de terminaux graphiques tels que Terminal GNOME, et pour un accès distant comme ssh.
/ dev / tty0
Le TTY Linux dispositif noeudstty1 à travers tty63sont des terminaux virtuels. Ils sont également appelés VT ou consoles virtuelles. Ils simulent plusieurs consoles au-dessus du pilote de périphérique de la console physique. Une seule console virtuelle est affichée et contrôlée à la fois. Le terminal actif peut être commuté, par exemple, en utilisant chvt, ou Ctrl + Alt + F1 à travers le nombre de touches de fonction que vous avez.
Vous pouvez également lire et écrire sur le VT actuel en utilisant /dev/tty0. tty0est la console habituelle du noyau, par exemple si vous n’en avez pas choisi explicitement. "Le système recherche d'abord une carte VGA [sur laquelle les VT s'exécutent] puis un port série". Vous pouvez également définir la console sur un VT spécifique, par exemple console=tty1.
"Si vous n'avez pas de carte VGA dans votre système, le premier port série deviendra automatiquement la console." Une "console série" ttyS0est probablement l’alternative la plus courante tty0. Il n'est pas possible d'utiliser le système VT sur une console série.
La séparation du terminal de contrôle est l’une des étapes traditionnellement requises pour démarrer un processus en arrière-plan, par exemple un démon de journalisation système . Les étapes pour devenir un processus en arrière-plan sont terriblement complexes, mais pour être spécifique, l’étape qui se détache du terminal de contrôle est l’ appel système setsid . Dans des systèmes plus modernes, le système init, par exemple systemd, démarre le service sans aucun terminal de contrôle.
Réponses:
De la documentation :
Au bon vieux temps
/dev/console
était la console de l'administrateur système. Et les téléscripteurs étaient les périphériques série des utilisateurs connectés à un serveur. Maintenant/dev/console
et/dev/tty0
représentent l'affichage actuel et sont généralement les mêmes. Vous pouvez le remplacer par exemple en ajoutantconsole=ttyS0
àgrub.conf
. Après que votre/dev/tty0
est un moniteur et/dev/console
est/dev/ttyS0
.Un exercice pour montrer la différence entre
/dev/tty
et/dev/tty0
:Passez à la 2ème console en appuyant sur Ctrl+ Alt+ F2. Connectez-vous en tant que
root
. Typesleep 5; echo tty0 > /dev/tty0
. Appuyez sur Enteret passez à la 3ème console en appuyant sur Alt+ F3. Revenez maintenant à la 2e console en appuyant sur Alt+ F2. Tapezsleep 5; echo tty > /dev/tty
, appuyez sur Enteret passez à la 3ème console.Vous pouvez voir que
tty
c'est la console où le processus démarre et qu'iltty0
s'agit d'une console toujours actuelle.la source
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
, et le tour est joué - un shell racine.sudo anycommand
marche,sudo -i
aller en racine marche aussi. Il n’existe pas de Linux / BSD / Unix où vous ne pouvez pas accéder à la racine. (Alors ce ne serait plus Linux / BSD / Unix.)/dev/console
est un ensemble virtuel de périphériques pouvant être définis en tant que paramètre au moment du démarrage. Il peut être redirigé vers un périphérique série ou une console virtuelle et pointe par défaut sur/dev/tty0
. Lorsque plusieursconsole=
options sont passées au noyau, la sortie de la console ira sur plusieurs périphériques./dev/tty0
est la console virtuelle actuelle/dev/tty[1-x]
est l’une des consoles virtuelles vers lesquelles vous passez avec control- alt- F1et ainsi de suite./dev/tty
est une sorte d'alias pour la console (physique, virtuelle ou pseudo-périphérique, le cas échéant) associé au processus qui l'ouvre. Contrairement aux autres périphériques, vous n'avez pas besoin des privilèges root pour y écrire. Notez également que les processus tels que ceux lancés parcron
et les processus de traitement par lots similaires ne sont pas utilisables/dev/tty
, car ils ne sont associés à aucun. Ces processus ont un?
dans laTTY
colonne deps -ef
sortie.la source
/dev/tty
peut être un périphérique différent, le cas échéant, en fonction du processus qui l'ouvre. Réponse mise à jour./ dev / console
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
Sous Linux, la console du noyau peut être configurée à l'aide de l'
console=
option de démarrage . Le code du noyau qui appelleprintk()
peut y écrire des messages, par exemple lorsqu'un périphérique est chargé ou qu'une erreur se produit. Ces messages sont également mis en mémoire tampon par le noyau. (Voir aussidmesg
). Lorsqu'un périphérique de console est trouvé et démarré, il reçoit tous les messages précédemment mis en mémoire tampon.Vous pouvez passer
console=
plusieurs fois pour configurer plusieurs consoles et des messages seront écrits pour chacune d'entre elles. Apparemment, vous ne pouvez sélectionner qu'une console de chaque "type": vous ne pouvez pas utiliser les deuxconsole=ttyS0
etconsole=ttyS1
.La documentation du noyau spécifie
/dev/console
comme un périphérique de caractère numéroté(5,1)
. L'ouverture de ce périphérique de caractères ouvre la console "principale", qui est le dernier terminal de la liste des consoles. Le premier processus non noyau, appeléinit
"PID 1", est démarré avec une/dev/console
connexion à la sortie standard, une erreur standard et une entrée standard.Si aucune des consoles n'est un terminal, l'ouverture
/dev/console
renvoie l'erreurENODEV
("No such device"). Le noyau vaimpressionenregistrer un message et commencerinit
quand même. Pour un exemple d'une console du noyau qui n'est pas un périphérique tty, voirnetconsole
ma console préférée, l'imprimante en ligne .Vous pouvez également voir une liste de consoles tty en lisant
/sys/class/tty/console/active
. La documentation de systemd indique que le premier périphérique affiché est la console principale. La liste est en réalité dans l’ordre inverse de la ligne de commande du noyau. La documentation actuelle du noyau indique à tort que le dernier périphérique affiché est la console principale ou "active". Pour une raison quelconque, il est possible d’examiner les modifications de ce fichier (dans le cas où des périphériques de la console seraient supprimés?).Dans un
systemd-nspawn
conteneur, le/dev/console
fichier standard est remplacé par un périphérique pseudo-terminal (PTY). Celles-ci seraient mieux décrites comme des terminaux virtuels. Ils sont créés de manière dynamique et sont également utilisés pour implémenter des émulateurs de terminaux graphiques tels que Terminal GNOME, et pour un accès distant commessh
./ dev / tty0
Le TTY Linux dispositif noeuds
tty1
à traverstty63
sont des terminaux virtuels. Ils sont également appelés VT ou consoles virtuelles. Ils simulent plusieurs consoles au-dessus du pilote de périphérique de la console physique. Une seule console virtuelle est affichée et contrôlée à la fois. Le terminal actif peut être commuté, par exemple, en utilisantchvt
, ou Ctrl + Alt + F1 à travers le nombre de touches de fonction que vous avez.Vous pouvez également lire et écrire sur le VT actuel en utilisant
/dev/tty0
.tty0
est la console habituelle du noyau, par exemple si vous n’en avez pas choisi explicitement. "Le système recherche d'abord une carte VGA [sur laquelle les VT s'exécutent] puis un port série". Vous pouvez également définir la console sur un VT spécifique, par exempleconsole=tty1
."Si vous n'avez pas de carte VGA dans votre système, le premier port série deviendra automatiquement la console." Une "console série"
ttyS0
est probablement l’alternative la plus courantetty0
. Il n'est pas possible d'utiliser le système VT sur une console série./ dev / tty
/dev/tty
est l'un des trois fichiers de périphérique standard spécifiés par POSIX (/dev/
est l'un des trois noms de répertoire spécifiés par POSIX). L’ouvrir revient à ouvrir le terminal de contrôle du processus en cours. Le terminal de contrôle est défini lorsqu'un processus ouvre un terminal, du moins sous Linux . Par exemple, dansinit
, il ferait référence à/dev/console
.La séparation du terminal de contrôle est l’une des étapes traditionnellement requises pour démarrer un processus en arrière-plan, par exemple un démon de journalisation système . Les étapes pour devenir un processus en arrière-plan sont terriblement complexes, mais pour être spécifique, l’étape qui se détache du terminal de contrôle est l’ appel système setsid . Dans des systèmes plus modernes, le système init, par exemple systemd, démarre le service sans aucun terminal de contrôle.
la source