tty は単なる入出力デバイスではありません。また、シグナルの送信 (Ctrl+C) など、セッションの制御端末として機能する特別な役割も果たします。 /dev/ttyNN は仮想コンソールで、モニター上に全画面表示されます。
端末は /dev/tty1 から始まります。通常、Ctrl+Alt+Fn キーを押すことで、これらのコンソールに切り替えることができます。
たとえば、Ctrl+Alt+F1 で最初の仮想端末に移動します。現在、ほとんどの Linux ディストリビューションは tty1 から X サーバーを実行しています。そのため、Ctrl+Alt+F1 を押しても効果がない場合があります。
$ 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 で 2 番目のターミナルに移動します。通常、ディストリビューションは仮想端末でログイン プログラム (agetty) を実行します。
$ ps ax | grep tty2 | grep -v grep
31865 tty2 Ss+ 0:00 /sbin/agetty tty2 38400
ログイン プログラムは、ログイン プロンプトを提供し、ユーザー名/パスワードでログインできるようにします。 init スクリプトは、すべてのログイン プログラムが実行される場所を決定します。そのため、tty9 などのログイン プロンプトが表示される場合と表示されない場合があります。 GUI インターフェースに戻るには、Ctrl+Alt+F1 を押します (上記の出力例のように)。
/dev/tty0 は、現在の端末を指す特別なデバイスです。そのため、実行する場所 (任意の仮想コンソール) に関係なく、tty0 からの読み取り/書き込みはすべて現在の端末に送られます。
'ps ax' の 2 列目も、プログラムの制御端末を示します。デーモンなどの一部のプログラムでは、列が「?」になっている場合があります。これは、それらが端末にバインドされていないことを意味します。
/dev/pts/0 などは疑似端末デバイスであり、システム ディスプレイには接続されていません。たとえば、gnome-terminal またはその他の GUI 端末を開いたときに取得する端末です。これらは、クライアント側が bash などのプログラムにエクスポートされるクライアント サーバー ベースのアプローチです。プログラムによって疑似端末に送信されたデータは、「サーバー」側に送信されます (通常、gnome-terminal などの別のプログラムによって監視されます)。制御プロセス (サーバー側) は、端末に何を送信する必要があるかを決定し、最終的にクライアントに表示されます。これらのデバイスを使用すると、システムに制限なく複数の「GUI ターミナル」を開くことができ、コントロール (ioctl()、色設定、シグナルの送信 [Ctrl+C] など) などの同じ古いターミナルを引き続き提供します。