Jak wyświetlić listę otwartych deskryptorów plików (i plików, do których się odnoszą) w mojej bieżącej sesji bash


23

Korzystam z interaktywnej sesji bash. Utworzyłem niektóre deskryptory plików przy użyciu exec i chciałbym wymienić aktualny stan mojej sesji bash.

Czy istnieje sposób na wyświetlenie listy obecnie otwartych deskryptorów plików?


1
sprawdź ten link
— Kamaraj,

@Kamaraj dzięki. Więc bash nie ma wbudowanego do tego celu? Potrzebuję użyć funkcji specyficznych dla systemu Linux?
— dangonfast

bashnie jest częścią jądra, więc nie może wiedzieć, co robią inne procesy, nawet te, które uruchomił.
— Julie Pelletier,

@JuliePelletier: ale procesy potomne nie zmieniają deskryptorów plików procesu macierzystego, prawda?
— dangonfast

Odpowiedzi:


27

Tak, wyświetli się lista wszystkich otwartych deskryptorów plików:

$ 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

Oczywiście, jak zwykle: 0 to stdin, 1 to stdout, a 2 to stderr.
Czwarty to otwarty plik (do zapisu) w tym przypadku.


To tylko wyświetla bieżący proces, a nie jego dzieci lub rodziców.
— Julie Pelletier,

@JuliePelletier Tytuł pytania brzmi „moja obecna sesja bash”. Czy rozumiem to źle?
— sorontar

@JuliePelletier: dlaczego miałbym być zainteresowany deskryptorami plików używanymi przez dzieci lub rodzica mojej bieżącej sesji bash? Interesuje mnie tylko deskryptory plików używane w mojej bieżącej sesji bash.
— dangonfast

@delavnog: Dobrze więc. Jeśli to odpowiada na twoje pytanie, powinieneś je oznaczyć jako takie.
— Julie Pelletier,

4

Zakładając, że chcesz wyświetlić listę deskryptorów plików podłączonych do dowolnego terminala, możesz użyć lsof/ fuserlub podobnych, takich jak:

$ 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

Te narzędzia są w zasadzie parsowane /proc, więc możesz uzyskać do nich dostęp /proc/$$/fd/np .:

ls /proc/$$/fd/*

2
Wybór \/pts\/odrzuca otwarte pliki, takie jakexec 4>testfile.txt
— sorontar

@sorontar Tak, tak jak powiedziałem, ten służy wyłącznie do wyświetlania list dołączonych do dowolnego terminala.
— heemayl

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.