インタラクティブなbashセッションで実行しています。 execを使用していくつかのファイル記述子を作成しましたが、bashセッションの現在のステータスを一覧表示したいと思います。
現在開いているファイル記述子を一覧表示する方法はありますか?
はい、これは開いているすべてのファイル記述子をリストします:
$ 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番目は開いている(書き込む)ファイルです。
端末に接続されているファイル記述子を一覧表示する場合は、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/*
lsof -a -p $$
ネットワークfdのみ:
lsof -i -a -p $$