簡単に混同される概念:ptmxとtty

簡単に混同される概念:ptmxとtty

次のコマンドはすべて Debian 端末で実行されます。

ls /dev |grep ptmx
/dev/ptmx

ls  /dev/pts
0  1  ptmx 

/dev/ptmx これらとそしての違いは何ですか/dev/pts/ptmx

ls  /dev/tty* |sort
/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10

/dev/ttyと/dev/tty0(/dev/tty1....)の間に関係がありますか?
/dev/ttyは他のすべての/dev/tty[番号]を制御しますか?

ベストアンサー1

/dev/ptmx標準であり、/dev/pts/ptmxソフトウェアコンテナ(Dockerなど)やファイルシステムの複数のインスタンスが必要なその他の場合にdevpts追加されました。

デバイスノードの特性

デバイスノードの「魔法」は名前ではなく、それ自体にあることに気づくはずです。主要および補助装置番号示すために作られました。

たとえば、適切な権限がある場合は、すべてのmknodUnixスタイルのファイルシステムでランダムに名前が付けられたプライマリデバイス1とセカンダリデバイス3を使用してキャラクタデバイスノードを作成できます。ファイルシステムにnodevマウントオプションがない場合は、次のように動作します。とまったく同じです/dev/null。すべての意図と目的のためにするのもう一つの実装です/dev/null

同様に、/dev/pts/ptmxおよび/dev/ptmxはすべて文字デバイスで、プライマリデバイス番号は5、マイナーデバイス番号は2です。したがって、カーネルからまったく同じ機能へのアクセスを提供します。

$ ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 Jun 12 20:14 /dev/ptmx
c--------- 1 root root 5, 2 Jun 12 12:26 /dev/pts/ptmx

デバイスノードタイプ(文字またはブロック)は、プライマリ番号とマイナー番号を持つデバイスノードがインタフェースするカーネルデバイスドライバを定義します。カーネルは名前を気にしません。デフォルトの名前を提供しますudevが、必要に応じてデバイスの命名スキームを完全に再設計できます。/dev必要に応じて外部からデバイスノードを作成できます。

Debian 9 ではデフォルトの/dev/pts/ptmx権限が 000 に設定されているため、使用されないことが予想されます。これはRHEL 7.5でも同様です。

4.17 カーネルソースコードのコメント説明する:

/*
 * ptmx is a new node in /dev/pts and will be unused in legacy (single-
 * instance) mode. To prevent surprises in user space, set permissions of
 * ptmx to 0. Use 'chmod' or remount with '-o ptmxmode' to set meaningful
 * permissions.
 */

「シングルインスタンスモード」とは、UNIX98およびSingle Unix仕様v1規格に準拠したシステムとして使用することを意味します。したがって、以前のバージョンとの互換性が非常に重要です。

マルチインスタンス機能は、devptsコンテナをサポートするために開発されました。これを読むと確認できます。<Linux kernel source>/Documentation/filesystems/devpts.txt2009年頃の以前のバージョン:

コンテナをサポートするために、あるインスタンスに割り当てられたptyインデックスが別のdevptsインスタンスに割り当てられているインデックスから独立しているように、devptsファイルシステムの複数のインスタンスを許可できるようになりました。

以前のバージョンとの互換性を維持するために、複数のインスタンスのサポートは次の状況でのみ有効になります。

  • CONFIG_DEVPTS_MULTIPLE_INSTANCES = yと
  • devptsをマウントするときに「-o newinstance」マウントオプションが指定されました。

IOW、devpts は、単一インスタンスとマルチインスタンスセマンティクスをサポートするようになりました。

コンテナが使用されている場合は、通常、擬似TTYの全く新しい名前空間を初期化し、devptsコンテナ内のファイルシステムの他のインスタンスをマウントできます(コンテナ内の擬似TTYサポートが必要ない場合は省略できます)。ファイルシステムptmxにエントリがある場合は、devptsコンテナ内の環境を初期化するために必要な作業を最小限に抑えるのに役立ちます。

おすすめ記事