/dev/fd
não é um diretório fixo, mas um symlink que aponta para um diretório por processo. Em suas duas invocações de ls
, você está listando o conteúdo de dois "diretórios" diferentes.
Sua primeira saída fornece os descritores de arquivo associados a ls
. A segunda saída fornece os descritores de arquivos associados a bash
. O echo
e exec
que precede as listagens de diretório não alteram isso.
Considere:
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