Je cours dans une session bash interactive. J'ai créé des descripteurs de fichiers, en utilisant exec, et je voudrais lister quel est l'état actuel de ma session bash.
Existe-t-il un moyen de répertorier les descripteurs de fichiers actuellement ouverts?
Oui, cela répertoriera tous les descripteurs de fichiers ouverts:
$ 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
Bien sûr, comme d'habitude: 0 est stdin, 1 est stdout et 2 est stderr.
Le 4ème est un fichier ouvert (à écrire) dans ce cas.
En supposant que vous souhaitez répertorier les descripteurs de fichiers attachés à n'importe quel terminal, vous pouvez utiliser lsof
/fuser
ou similaire comme:
$ 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
Ces outils analysent essentiellement /proc
, vous pouvez donc simplement accéder à /proc/$$/fd/
aussi par exemple:
ls /proc/$$/fd/*
lsof -a -p $$
Réseau fd uniquement:
lsof -i -a -p $$