web-dev-qa-db-ja.com

Linuxにはなぜ多くの/ dev / ttyがあるのですか?

Ubuntu 10.04では、/ devの下で確認すると、50を超えるttyがあります。 tty0、tty1、tty2 ...

Ttyがコンソール入出力用のキャラクターデバイスであることを理解しています。

  1. しかし、なぜそんなにたくさんあるのですか?それはプールのようなものですか?

  2. / dev/pts/0、1、2 ...、/ dev/ttyの違いは何ですか?

  3. 端末を開くと、/ dev/ptsの下に新しい番号が作成されます。しかし、いつ/ dev/ttyがわからないのですか?使用されている。

    sSH接続を作成しても、/ dev/ttyの数は同じです。

    そして私がするなら

    cat /dev/tty0
    

    キーボードで何かを入力すると、対応する出力が得られます。なぜこうなった?

29
daehee

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]など)のような同じ古い端末が提供されます。

26
Suzuki Poulose

このようなことの関係性を明らかにしたいだけです。

まず、/ dev/ttyはプロセスレベルであり、ttyn(tty1、tty2、...)、ttySn(ttyS0、 ttyS1)、pty(pts/0、pts/1)、その他。

/ dev/ttyはcurrent(foreground)仮想コンソールのエイリアスなので、tty1、tty2などになる可能性があります。 ttyS0はエイリアスではないことに注意してください。これは最初のシリアルポートです。

/ dev/consoleはシステムコンソールであり、デフォルトとして/ dev/tty0を指します。 ttyn、ttySn、ttyUSBn、lpnなどにすることができます。

大まかに、/ dev/tty>/dev/cosole>/dev/tty0

1
firo