次のコマンドはすべて 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
追加されました。
デバイスノードの特性
デバイスノードの「魔法」は名前ではなく、それ自体にあることに気づくはずです。主要および補助装置番号示すために作られました。
たとえば、適切な権限がある場合は、すべてのmknod
Unixスタイルのファイルシステムでランダムに名前が付けられたプライマリデバイス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.txt
2009年頃の以前のバージョン:
コンテナをサポートするために、あるインスタンスに割り当てられたptyインデックスが別のdevptsインスタンスに割り当てられているインデックスから独立しているように、devptsファイルシステムの複数のインスタンスを許可できるようになりました。
以前のバージョンとの互換性を維持するために、複数のインスタンスのサポートは次の状況でのみ有効になります。
- CONFIG_DEVPTS_MULTIPLE_INSTANCES = yと
- devptsをマウントするときに「-o newinstance」マウントオプションが指定されました。
IOW、devpts は、単一インスタンスとマルチインスタンスセマンティクスをサポートするようになりました。
コンテナが使用されている場合は、通常、擬似TTYの全く新しい名前空間を初期化し、devpts
コンテナ内のファイルシステムの他のインスタンスをマウントできます(コンテナ内の擬似TTYサポートが必要ない場合は省略できます)。ファイルシステムptmx
にエントリがある場合は、devpts
コンテナ内の環境を初期化するために必要な作業を最小限に抑えるのに役立ちます。