À partir de la documentation du noyau Linux sur Kernel.org :
/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 TTY é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 cela, 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
. Tapez sleep 5; echo tty0 > /dev/tty0
. Appuyez sur Entrée et passez à la 3ème console en appuyant sur Alt +F3 .Maintenant, revenez à la 2ème console en appuyant sur Alt +F2 . Tapez sleep 5; echo tty > /dev/tty
, appuyez sur Entrée et passez à la 3ème console.
Vous pouvez voir que tty
est la console où le processus démarre, et tty0
est une console toujours à jour.
-
/dev/console
est un ensemble virtuel de périphériques pouvant être définis en tant que paramètre au 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=
les options sont passées au noyau, la sortie de la console ira à plus d'un périphérique ; -
/dev/tty[0-N]
(N
est le numéro TTY attribué le plus élevé, par ex. 63) est l'une des consoles virtuelles vers lesquelles vous basculez avec control -alt -F1 et ainsi de suite ; -
/dev/tty0
est également par défaut la console virtuelle ; -
/dev/tty
est une sorte d'alias de la console (dispositif physique, virtuel ou pseudo, le cas échéant) associée au processus qui l'ouvre. Contrairement aux autres appareils, vous n'avez pas besoin des privilèges root pour y écrire. Notez également que des processus comme ceux lancés parcron
et les traitements par lots similaires n'ont pas de/dev/tty
utilisable , car ils ne sont associés à aucun. Ces processus ont un?
dans leTTY
colonne deps -ef
sortie.
/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 du console=
option de démarrage. Code du noyau qui appelle printk()
peut y écrire des messages, par ex. 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 sur chacune d'elles. Apparemment, vous ne pouvez sélectionner qu'une seule console de chaque "type":vous ne pouvez pas utiliser les deux console=ttyS0
et console=ttyS1
.
La documentation du noyau spécifie /dev/console
en tant que périphérique de caractères numéroté (5,1)
. L'ouverture de ce périphérique de caractères ouvre la console "principale", qui est le dernier tty dans la liste des consoles. Le premier processus non noyau, appelé init
ou "PID 1", commence par /dev/console
connecté à la sortie standard, à l'erreur standard et à l'entrée standard.
Si aucune des consoles n'est un tty, alors ouvrir /dev/console
renvoie l'erreur ENODEV
("Aucun appareil de ce type"). Le noyau va imprimer enregistrer un message et démarrer init
quel que soit. Pour un exemple de console du noyau qui n'est pas un périphérique tty, voir netconsole
, ou ma console préférée l'imprimante ligne.
Vous pouvez également voir une liste des consoles tty en lisant /sys/class/tty/console/active
. La documentation systemd indique que le premier l'appareil illustré est la console principale. La liste est en fait 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'interroger ce fichier pour les modifications (au cas où les périphériques de la console seraient supprimés ?).
Dans un systemd-nspawn
conteneur, le /dev/console
standard fichier est remplacé par un périphérique pseudo-terminal (PTY). Ceux-ci seraient mieux décrits comme des terminaux virtuels. Ils sont créés dynamiquement et sont également utilisés pour implémenter des émulateurs de terminaux graphiques comme GNOME Terminal, et pour l'accès à distance comme ssh
.
/dev/tty0
Les nœuds de périphérique Linux TTY tty1
via 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. La borne active peut être commutée, par ex. en utilisant chvt
, ou Ctrl+Alt+F1 via le nombre de touches de fonction dont vous disposez.
Vous pouvez également lire et écrire sur le VT actuel en utilisant /dev/tty0
. tty0
est la console habituelle du noyau, par ex. si vous n'en avez pas sélectionné un explicitement. "Le système recherche d'abord une carte VGA [sur laquelle les VT fonctionnent], puis un port série". Vous pouvez également régler la console sur un VT spécifique, par ex. 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" comme 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
/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 équivaut à ouvrir le terminal de contrôle du processus en cours. Le terminal de contrôle est défini lorsqu'un processus ouvre un terminal pour la première fois, au moins sous Linux. Par exemple, dans init
, il ferait référence à /dev/console
.
Se détacher du terminal de contrôle est l'une des étapes traditionnellement requises pour démarrer un processus d'arrière-plan, par exemple un démon de journalisation système. Les étapes pour devenir un processus d'arrière-plan sont horriblement complexes, mais pour être précis, l'étape qui se détache du terminal de contrôle est l'appel système setsid. Dans les systèmes plus modernes, le système init, par ex. systemd démarre le service sans aucun terminal de contrôle en premier lieu.