Como listar os descritores de arquivos abertos (e os arquivos aos quais eles se referem) na minha sessão bash atual

12

Eu estou correndo em uma sessão bash interativa. Eu criei alguns descritores de arquivos, usando exec, e gostaria de listar qual é o status atual da minha sessão bash.

Existe uma maneira de listar os descritores de arquivos abertos atualmente?

    
por dangonfast 28.12.2016 / 05:50

3 respostas

16

Sim, isso listará todos os descritores de arquivos abertos:

$ ls -la /proc/$$/fd
total 0
dr-x------ 2 sorontar sorontar  0 Dec 28 00:56 .
dr-xr-xr-x 9 sorontar sorontar  0 Dec 28 00:56 ..
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 sorontar sorontar 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 sorontar sorontar 64 Dec 28 00:56 4 -> /home/sorontar/testfile.txt

Claro, como de costume: 0 é stdin, 1 é stdout e 2 é stderr.
O quarto é um arquivo aberto (para escrever) neste caso.

    
por 28.12.2016 / 05:59
3

Supondo que você deseja listar os descritores de arquivos que estão anexados a qualquer terminal, use lsof / fuser ou algo parecido:

$ lsof -p $$ 2>/dev/null | awk '$NF ~ /\/pts\//'
bash    32406 foobar    0u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    1u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    2u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar    3u   CHR 136,31      0t0      34 /dev/pts/31
bash    32406 foobar  255u   CHR 136,31      0t0      34 /dev/pts/31

Essas ferramentas basicamente analisam /proc , então você pode acessar /proc/$$/fd/ também, por exemplo:

ls /proc/$$/fd/*
    
por 28.12.2016 / 05:59
0
lsof -a -p $$

Apenas rede fd:

lsof -i -a -p $$
    
por 14.08.2018 / 09:15