So listen Sie die geöffneten Dateideskriptoren (und die Dateien, auf die sie verweisen) in meiner aktuellen Bash-Sitzung auf


22

Ich nehme an einer interaktiven Bash-Sitzung teil. Ich habe mit exec einige Dateideskriptoren erstellt und möchte den aktuellen Status meiner Bash-Sitzung auflisten.

Gibt es eine Möglichkeit, die aktuell geöffneten Dateideskriptoren aufzulisten?


1
Überprüfen Sie diesen Link
— Kamaraj

@Kamaraj danke. Bash hat also keinen eingebauten, um das zu tun? Muss ich linuxspezifische Funktionen verwenden?
— Dangonfast

bashist nicht Teil des Kernels, daher kann er nicht wissen, was andere Prozesse tun, selbst die, die er gestartet hat.
— Julie Pelletier

@ JuliePelletier: Aber untergeordnete Prozesse ändern nicht die Dateideskriptoren des übergeordneten Prozesses, oder?
— Dangonfast

Antworten:


27

Ja, dies listet alle offenen Dateideskriptoren auf:

$ 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

Natürlich, wie immer: 0 ist stdin, 1 ist stdout und 2 ist stderr.
Die vierte ist in diesem Fall eine offene Datei (zum Schreiben).


Das listet nur den aktuellen Prozess auf, nicht seine Kinder oder Eltern.
— Julie Pelletier

@ JuliePelletier Der Fragentitel sagt "meine aktuelle Bash-Sitzung". Verstehe ich das falsch?
— Sorontar

@ JuliePelletier: Warum interessiere ich mich für die Dateideskriptoren, die von den Kindern oder den Eltern meiner aktuellen Bash-Sitzung verwendet werden? Ich interessiere mich nur für die Dateideskriptoren, die von meiner aktuellen Bash-Sitzung verwendet werden.
— Dangonfast

@ delavnog: Gut dann. Wenn dies Ihre Frage beantwortet, sollten Sie sie als solche markieren.
— Julie Pelletier

4

Vorausgesetzt , dass Sie die Datei - Deskriptoren auflisten möchten, die an jedem Terminal angeschlossen sind, können Sie lsof/ fuseroder ähnlich wie:

$ 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

Diese Tools werden grundsätzlich analysiert /proc, sodass Sie auch auf Folgendes zugreifen können /proc/$$/fd/:

ls /proc/$$/fd/*

2
Die Auswahl von \/pts\/Ablehnungen offenen Dateien wieexec 4>testfile.txt
— Sorontar

@sorontar Yep, wie ich schon sagte, dient nur dazu, diejenigen aufzulisten, die an ein Terminal angeschlossen sind.
— Heemayl

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.