Sur un système Linux, quelle est la différence entre /dev/console
, /dev/tty
et /dev/tty0
?
Quelle est leur utilisation respective et comment se comparent-ils?
Sur un système Linux, quelle est la différence entre /dev/console
, /dev/tty
et /dev/tty0
?
Quelle est leur utilisation respective et comment se comparent-ils?
Réponses:
De la documentation :
/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/console
et /dev/tty0
repré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/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
. 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 tty
c'est la console où le processus démarre et qu'il tty0
s'agit d'une console toujours actuelle.
$ 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 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/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 par cron
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 la TTY
colonne de ps -ef
sortie.
/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.
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 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=ttyS0
et console=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'erreur ENODEV
("No such device"). Le noyau vaimpressionenregistrer un message et commencer init
quand même. Pour un exemple d'une console du noyau qui n'est pas un périphérique tty, voir netconsole
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 comme ssh
.
Le TTY Linux dispositif noeuds tty1
à travers tty63
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 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
. 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 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" ttyS0
est probablement l’alternative la plus courante tty0
. Il n'est pas possible d'utiliser le système VT sur une console série.
/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, dans init
, 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.