我正在交互式 bash 会话中运行。我已经使用 exec 创建了一些文件描述符,我想列出 bash 会话的当前状态。
有没有办法列出当前打开的文件描述符?
答案1
是的,这将列出所有打开的文件描述符:
$ ls -l /proc/$$/fd
total 0
lrwx------ 1 isaac isaac 64 Dec 28 00:56 0 -> /dev/pts/6
lrwx------ 1 isaac isaac 64 Dec 28 00:56 1 -> /dev/pts/6
lrwx------ 1 isaac isaac 64 Dec 28 00:56 2 -> /dev/pts/6
lrwx------ 1 isaac isaac 64 Dec 28 00:56 255 -> /dev/pts/6
l-wx------ 1 isaac isaac 64 Dec 28 00:56 4 -> /home/isaac/testfile.txt
当然,像往常一样:0是stdin,1是stdout,2是stderr。
在本例中,第四个是打开的文件(要写入)。
答案2
lsof -a -p $$
仅网络FD:
lsof -i -a -p $$
答案3
假设您想列出附加到任何终端的文件描述符,您可以使用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
这些工具基本上是 parse /proc
,所以你也可以访问/proc/$$/fd/
,例如:
ls /proc/$$/fd/*