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.