GNU/Linux >> Tutoriels Linux >  >> Linux

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

À 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 plusieurs console= 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 par cron 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 le TTY colonne de ps -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.


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

  3. Quand utiliser /dev/random contre /dev/urandom ?

  4. Comment mapper les périphériques /dev/sdX et /dev/mapper/mpathY à partir du périphérique /dev/dm-Z

  5. Comment encoder en base64 /dev/random ou /dev/urandom ?

tty (/dev/tty ) vs pts (/dev/pts) sous Linux

Quand dois-je utiliser /dev/shm/ et quand dois-je utiliser /tmp/?

noyau :désactiver /dev/kmem et /dev/mem

Pourquoi sur certains systèmes Linux, le système de fichiers racine apparaît-il comme /dev/root au lieu de /dev/<real device node> dans mtab ?

Pourquoi < ou > sont-ils nécessaires pour utiliser /dev/tcp

Différences entre /dev/sda et /dev/sda1