`ll /proc/self/fd/`(`ll /dev/fd`から)の出力はどういう意味ですか?

`ll /proc/self/fd/`(`ll /dev/fd`から)の出力はどういう意味ですか?

関連していますが、いいえ繰り返す:

  1. /dev/fd が一貫性がない
  2. /dev/fdと/proc/self/fd/の関係は何ですか?
  3. プロセスの置き換えによってパイプである/dev/fd/63というファイルが生成されるのはなぜですか?

Ubuntu 18.04および20.04(Ubuntuは以下alias ll='ls -alF'で定義されています)で、~/.bashrc次の出力が表示されます。「フロッピードライブ」/dev/fd機器:

のためls

$ ls /dev/fd
0  1  2  3

のためll

$ ll /dev/fd
lrwxrwxrwx 1 root root 13 Nov  5 11:46 /dev/fd -> /proc/self/fd/

/dev/fdシンボリックリンクがあることが/proc/self/fd/わかりますll

$ ll /proc/self/fd/
total 0
dr-x------ 2 username username  0 Nov  8 19:01 ./
dr-xr-xr-x 9 username username  0 Nov  8 19:01 ../
lrwx------ 1 username username 64 Nov  8 19:01 0 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 1 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 2 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 3 -> 'socket:[8239772]'
lr-x------ 1 username username 64 Nov  8 19:01 4 -> /proc/29512/fd/
  1. これらすべてがどういう意味ですか?
  2. ここでフロッピーディスクはどのように機能しますか?
  3. は何であり/dev/pts/6、なぜ0、、1そして2すべてがそれを指すか。
  4. 何ですか'socket:[8239772]'
  5. 何ですか/proc/29512/fd/
  6. の歴史的用途と説明は何ですか/dev/fd

関連:

  1. 以前の質問からインスピレーションを受けて、このような質問をするようになりました。'-sh:構文エラー:組み込みLinuxデバイスでプロセスの置き換えに 'bash'を使用しようとしたときに予期しない '(''

答え1

これらすべてがどういう意味ですか?

/procカーネルが報告するファイルシステムです。様々な情報プロセスに。主にプロセスに関する情報に使用されるため、「プロセス」という名前が付けられました。実行中の各プロセスには、プロセスIDを含む/proc/<PID>サブディレクトリがあります。<PID>

/proc/self「魔法の」シンボリックリンクです常にアクセス中のプロセスを指します。/proc

/proc/self/fdプロセスで開かれたレポートファイル。各エントリは、次のような「魔法の」シンボルリンクです。ファイル記述子ターゲットはオープンファイルです。ここで驚くべきことは、リンクが実際にファイル自体を指していることです。これは、呼び出しによって取得されたファイル名がreadlink有効なファイル名でない場合にも発生する可能性があります。たとえば、名前のないファイル(匿名パイプなど)やソケットなどのファイルを削除します。

lrwx------ 1 username username 64 Nov  8 19:01 0 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 1 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 2 -> /dev/pts/6
lrwx------ 1 username username 64 Nov  8 19:01 3 -> 'socket:[8239772]'
lr-x------ 1 username username 64 Nov  8 19:01 4 -> /proc/29512/fd/

ここでフロッピーディスクはどのように機能しますか?

フロッピーディスクは必要ありません。略語「fd」は、次のことを意味します。ファイル記述子

は何であり/dev/pts/6、なぜ0、、1そして2すべてがそれを指すか。

ファイル記述子0で3つです12標準ストリーム)すべてのプログラムは、標準入力(stdin)、標準出力(stdout)、および標準エラー(stderr)を見つけることを期待しています。これらのストリームは数値として定義されます。 stdin は定義上ファイル記述子 0 で、一般的な役割はユーザー入力または入力データを受け取ることです。 stdout(1、ユーザー出力または出力データ)、stderr(2、エラーメッセージ)も同様です。 )。

/dev/pts/6端末です。特定の端末から入力を読み込み、出力を書き込むプロセスで使用されるファイルです。端末でプログラムを「正常に」実行すると、stdin、stdout、stderrがすべて端末に接続されます。

何ですか'socket:[8239772]'

それソケット。ファイル記述子3には標準の役割がないため、使用しているソフトウェアの中には適用されません(端末エミュレータなど)。あなたはできますソケットの反対側に何があるかを確認してください。気になるなら。

何ですか/proc/29512/fd/

これを実行すると、ls /proc/self/fd/プログラムlsが開き、/proc/self/fd内容を読み込みます。ファイルディスクリプタ0から3まではls起動時にすでに開かれているため、最初にopen利用可能なファイルディスクリプタを使用すると、/proc/self/fdファイルディスクリプタ4で開きます。カーネルは内部トレースを介してPIDにアクセスしないため、PIDに付属しています/proc/self。カーネルはそれをプロセス固有のディレクトリとして記憶し、/proc正しいPIDで印刷します。 (そしてPID名前空間、PID、およびパスは、探しているプロセスによって異なります。 )

の歴史的用途と説明は何ですか/dev/fd

プログラムにファイル名が必要で、すでに開いているファイルを参照したい場合に便利です。これは/dev/stdin/dev/stdoutおよびの一般化であり、それぞれ、および/dev/stderrと同じです(より一般的なものより先に存在しました)。/dev/fd/0/dev/fd/1/dev/fd/2/dev/fd多くのUnixバリアントで利用可能です。

関連情報