web-dev-qa-db-ja.com

現在のbashセッションで開いているファイル記述子(およびそれらが参照するファイル)を一覧表示する方法

インタラクティブなbashセッションで実行しています。 execを使用していくつかのファイル記述子を作成しましたが、bashセッションの現在のステータスを一覧表示したいと思います。

現在開いているファイル記述子を一覧表示する方法はありますか?

29
dangonfast

はい、これは開いているすべてのファイル記述子をリストします:

$ 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

もちろん、いつものように、0はstdin、1はstdout、2はstderrです。
この場合、4番目は開いている(書き込む)ファイルです。

34
Isaac

端末に接続されているファイル記述子を一覧表示する場合は、lsof/fuserまたは同様のコマンドを使用できます。

$ 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

これらのツールは基本的に/proc、つまり/proc/$$/fd/例:

ls /proc/$$/fd/*
5
heemayl
lsof -a -p $$

ネットワークfdのみ:

lsof -i -a -p $$
3
g10guang