Fedora に 2 つの `ptmx` ファイルがあるのはなぜですか?

Fedora に 2 つの `ptmx` ファイルがあるのはなぜですか?

このファイルは擬似端末のマスター ファイルを生成するために使用されることは知っています。しかし、Fedora には別のファイル ( )/dev/ptmxがあることが分かりました。ptmx/dev/pts/ptmx

ここに画像の説明を入力してください

この2番目のファイルの目的は何ですか?

答え1

その理由は、コンピューティングの世界の多くのことと同様に、歴史と下位互換性にあります。

2.4.* カーネルでは、 Linux にudev( の現在の仮想ファイルシステム ソリューション) が存在する前に、ルート ファイルシステム上の実際のディレクトリにデバイスを配置する「従来の Unix 方式」と、 の最初の仮想ファイルシステム ソリューション/devである という 2 つの競合するソリューションがありました。devfs/dev

問題は、 の作者がdevfsさまざまなデバイスに対してまったく新しい命名スキームを構築したことで、人々はそれに対してかなり強い不満を抱いていました。新しいスキームに移行して古いスキームを廃止したい人もいれば、移行の必要性を感じない人もいました。一部のディストリビューションは古い静的デバイスを使用し、他のディストリビューションは を選択しましたdevfs

その時点では、インストール時に作成された疑似 TTY デバイスの数が固定されていました。(ちなみに、CONFIG_LEGACY_PTYSカーネルのコンパイル時にオプションが設定されている場合は、これはまだ可能です。)

その後、Unix98 スタイルの動的に割り当てられた PTY デバイスが導入されました。静的/devディレクトリにそれらを実装するには、 の仮想ファイルシステムが必要となり/dev/pts、これが ファイルシステムとして知られるようになりましたdevpts。また、これを別のファイルシステムとして持つことで、コードを重複させることなく、動的にも適用することができたでしょうdevfs

動的に割り当てられた PTY デバイスは、すぐに好まれる選択肢になりました。なぜなら、/devシステムの存続期間中にほとんど使用されることのない、静的に割り当てられた PTY デバイスを何百も雑然と配置するのは明らかに無意味だったからです。

その後、Linux 2.6 が登場しましたudev。これにより、静的ソリューション/devdevfsソリューションの両方がすぐに時代遅れになりました。下位互換性の理由から、ファイルシステムは引き続き存在していましたが、完全に RAM ベースになったため、devpts同じ機能をメイン ファイルシステムに戻すことができました。/dev

たとえば、現在、Debian 9 はレガシー互換性のためにdevptsファイルシステムをマウントしています/dev/ptsが、デフォルトでは 0 の権限を割り当てています。これは、ファイルシステムがおそらく非推奨になり、将来のある時点で削除されることを/dev/pts/ptmx示しています。devpts

# ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 Nov 22 11:47 /dev/ptmx
c--------- 1 root root 5, 2 Nov 12 14:59 /dev/pts/ptmx

一部のプログラムでまだ が必要な場合は/dev/pts/ptmx、デフォルトの権限を調整することで許可できますが、これにより、どのプログラムが古い非推奨のデバイス名をまだ使用しているかがわかります。

答え2

プロセスが/dev/ptmxを開くと(posix_openpt()) を実行すると、擬似端末マスター (PTM) のファイル記述子が取得され、/dev/pts ディレクトリに擬似端末スレーブ (PTS) デバイスが作成されます。

マスターが開かれると、スレーブはロックされます。スレーブの名前を取得し、その権限などを設定してから、スレーブのロックを解除できます。これにより、スレーブがアクセス可能になる前にスレーブを制御できるようになります。

スレーブは実際のテキスト端末デバイスをエミュレートし、マスターは端末エミュレーター プロセスがスレーブを制御する手段を提供します。

スレーブは物理端末の仮想実装であり、マスターはその端末での人間の入力の仮想実装です。コンピューターはスレーブに送信された文字を、人間が実際の端末で入力した場合と同じように扱います (マスターの作成時に設定された権限によって制限されます)。

関連情報