web-dev-qa-db-fra.com

Pourquoi y a-t-il tant de / dev / tty dans Linux?

Dans Ubuntu 10.04, si je vérifie sous/dev, il y a plus de 50 ttys. tty0, tty1, tty2 ....

Je comprends que tty est un périphérique de caractères pour les entrées/sorties de console.

  1. mais pourquoi est-il si nombreux? est-ce quelque chose comme piscine?

  2. et quelle est la différence entre/dev/pts/0, 1, 2 ...,/dev/tty?

  3. Si j'ouvre un terminal, un nouveau numéro est créé sous/dev/pts. mais je ne sais pas quand/dev/tty? est utilisé.

    même si je crée une connexion SSH, le nombre de/dev/tty s est identique.

    et si je le fais

    cat /dev/tty0
    

    et tapez quelque chose au clavier, je reçois les sorties correspondantes. Pourquoi cela arrive-t-il?

26
daehee

Les ttys ne sont pas simplement des périphériques d’entrée/sortie. Ils agissent également comme un terminal spécial pour le contrôle d’une session, comme l’envoi de signaux (Ctrl + C)./dev/ttyNN sont des consoles virtuelles qui s'affichent en plein écran sur le moniteur.

Les terminaux commencent à partir de/dev/tty1. Vous pouvez passer à ces consoles, généralement en appuyant sur les touches Ctrl + Alt + Fn.

par exemple, Ctrl + Alt + F1 vous amène au premier terminal virtuel. De nos jours, la plupart des distributions Linux exécutent le serveur X à partir du tty1. Donc, appuyer sur Ctrl + Alt + F1 peut ne pas avoir d'effet.

$ ps ax | grep Xorg | grep -v grep
 1504 tty1     Ss+   44:57 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-rfsWyA/database -nolisten tcp vt1

Ctrl + Alt + F2 vous mènera au deuxième terminal. Habituellement, les distributions exécutent un programme de connexion (agetty) sur le terminal virtuel.

$ ps ax | grep tty2 | grep -v grep
31865 tty2     Ss+    0:00 /sbin/agetty tty2 38400

Les programmes de connexion vous fournissent une invite de connexion et vous permettent de vous connecter avec un nom d'utilisateur/mot de passe. Le script init décide où tout le programme de connexion sera exécuté. Donc, en fonction de cela, vous pouvez ou non voir une invite de connexion, par exemple tty9. Pour revenir à votre interface graphique, appuyez sur Ctrl + Alt + F1 (comme dans l'exemple ci-dessus).

/ dev/tty0 est un périphérique spécial qui pointe vers le terminal actuel. Ainsi, quel que soit le lieu où vous l'exécutez (toute console virtuelle), tout ce qui est lu/écrit sur tty0 va sur votre terminal actuel.

La deuxième colonne dans 'ps ax' donne également le terminal de contrôle du programme. Pour certains programmes, comme les démons, vous pouvez voir que la colonne est '?', Ce qui signifie qu'ils ne sont pas liés à un terminal.

/ dev/pts/0 etc. sont des périphériques psuedo-terminaux, qui ne sont pas connectés à l’affichage du système. Par exemple, vous obtenez un terminal lorsque vous ouvrez un terminal gnome ou tout autre terminal à interface graphique. Ce sont une approche client-serveur où le côté client sera exporté vers des programmes, comme bash. Les données envoyées par le programme au pseudo-terminal sont envoyées du côté "serveur" (qui est généralement surveillé par un autre programme, comme gnome-terminal). Le processus de contrôle (côté serveur) détermine ce qui doit être envoyé au terminal, lequel est éventuellement vu par le client. Ces périphériques vous aident à ouvrir plusieurs 'terminaux GUI' sans aucune limite sur votre système, tout en fournissant le même ancien terminal que celui des commandes (ioctl (), réglage de la couleur, Envoi de signaux [Ctrl + C], etc.).

25
Suzuki Poulose

Je veux juste clarifier les relations de ce genre de choses.

Tout d'abord, /dev/tty est au niveau du processus, il peut être ttyn (tty1, tty2, ...), ttySn (ttyS0, ttyS1), pty (pts/0, pts/1) et autre chose.

/dev/tty0 est un alias de la console virtuelle actuelle (au premier plan), il peut donc s'agir de tty1, tty2, etc. Notez que ttyS0 n'est pas un alias; C'est le premier port série.

/dev/console est la console système, il pointe vers/dev/tty0 par défaut. Cela peut être ttyn, ttySn, ttyUSBn, lpn, etc.

En gros,/dev/tty>/dev/cosole>/dev/tty0

1
firo