/dev/fd ディレクトリの内容には diff ファイルがあります。

/dev/fd ディレクトリの内容には diff ファイルがあります。

私にはこのような命令があります。

#echo -e "ls\npwd" >test
#bash
#exec <test

このコードの後に

#ls /dev/fd

0 1 2 3

#cd /dev/fd;ls

0 1 2 255

興味深いのは、ディレクトリの/dev/fd内容が異なることです。どうしたの?

答え1

/dev/fd固定ディレクトリではなく、各プロセスディレクトリへのシンボリックリンクです。 2回の呼び出しでは、2つのls異なる「ディレクトリ」の内容が一覧表示されます。

最初の出力は、関連するlsファイル記述子を提供します。 2番目の出力は、関連するファイル記述子を提供しますbashecho前述のディレクトリのリストはexecこれを変更しません。

考慮する:

foo:~$ ls -ln /dev/fd/
total 0
lrwx------ 1 1000 1000 64 Jul 10 12:13 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 2 -> /dev/pts/19
lr-x------ 1 1000 1000 64 Jul 10 12:13 3 -> /proc/20115/fd
foo:~$ cat /dev/fd/../cmdline && echo
cat/dev/fd/../cmdline

foo:~$ cd /dev/fd ; ls -ln
total 0
lrwx------ 1 1000 1000 64 Jul  8 05:01 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 2 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 255 -> /dev/pts/19
foo:/dev/fd$ cat ../cmdline && echo
bash
foo:/dev/fd$ pwd -P
/proc/2689/fd

関連情報