Come elencare i descrittori di file aperti (e i file a cui fanno riferimento) nella mia sessione bash corrente


23

Sto correndo in una sessione bash interattiva. Ho creato alcuni descrittori di file, usando exec, e vorrei elencare qual è lo stato corrente della mia sessione bash.

C'è un modo per elencare i descrittori di file attualmente aperti?


1
controlla questo link
— Kamaraj,

@Kamaraj grazie. Quindi bash non ha un built-in per farlo? Devo usare funzionalità specifiche di Linux?
— dangonfast,

bashnon fa parte del kernel, quindi non può sapere cosa stanno facendo gli altri processi, anche quelli che ha avviato.
— Julie Pelletier,

@JuliePelletier: ma i processi figlio non cambiano i descrittori di file del processo genitore, vero?
— dangonfast,

Risposte:


27

Sì, questo elencherà tutti i descrittori di file aperti:

$ 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

Naturalmente, come al solito: 0 è stdin, 1 è stdout e 2 è stderr.
Il quarto è un file aperto (da scrivere) in questo caso.


Questo elenca solo il processo corrente, non i suoi figli o genitori.
— Julie Pelletier,

@JuliePelletier Il titolo della domanda dice "la mia sessione bash corrente". Lo capisco male?
— sorontar,

@JuliePelletier: perché dovrei essere interessato ai descrittori di file usati dai bambini o dal genitore della mia sessione bash corrente? Sono interessato solo ai descrittori di file utilizzati dalla mia sessione bash corrente.
— dangonfast,

@delavnog: Bene allora. Se questo risponde alla tua domanda, dovresti contrassegnarlo come tale.
— Julie Pelletier,

4

Supponendo di voler elencare i descrittori di file collegati a qualsiasi terminale, è possibile utilizzare lsof/ fusero simili come:

$ 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

Questi strumenti analizzano sostanzialmente /proc, quindi puoi /proc/$$/fd/anche accedere ad esempio:

ls /proc/$$/fd/*

2
La selezione di \/pts\/scarti di file aperti comeexec 4>testfile.txt
— sorontar,

@sorontar Sì, come ho detto questo è solo per elencare quelli collegati a qualsiasi terminale.
— heemayl,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.