shell_58.Linux列出打开的文件描述符

列出打开的文件描述符
1.能用的文件描述符只有 9 个,你可能会觉得这没什么复杂的。但有时要记住哪个文件描述符被重定向到了哪里就没那么容易了。
lsof 命令会列出整个 Linux 系统打开的所有文件描述符,这包括所有后台进程以及登录用户打开的文件。

$ /usr/sbin/lsof -a -p $$ -d 0,1,2 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
bash 3344 rich 0u CHR 136,0 2 /dev/pts/0 
bash 3344 rich 1u CHR 136,0 2 /dev/pts/0 
bash 3344 rich 2u CHR 136,0 2 /dev/pts/0 
$

2.lsof 的默认输出

COMMAND     进程对应的命令名的前 9 个字符
PID         进程的 PID 
USER        进程属主的登录名
FD          文件描述符编号以及访问类型(r 代表读,w 代表写,u 代表读/写)
TYPE        文件的类型(CHR 代表字符型,BLK 代表块型,DIR 代表目录,REG 代表常规文件)
DEVICE      设备号(主设备号和从设备号)
SIZE        如果有的话,表示文件的大小
NODE        本地文件的节点号
NAME        文件名
$ cat test18 
#!/bin/bash 
# testing lsof with file descriptors 
exec 3> test18file1 
exec 6> test18file2 
exec 7< testfile 
/usr/sbin/lsof -a -p $$ -d0,1,2,3,6,7 
$ ./test18 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME 
test18 3594 rich 0u CHR 136,0 2 /dev/pts/0 
test18 3594 rich 1u CHR 136,0 2 /dev/pts/0 
test18 3594 rich 2u CHR 136,0 2 /dev/pts/0 
18 3594 rich 3w REG 253,0 0 360712 /home/rich/test18file1 
18 3594 rich 6w REG 253,0 0 360715 /home/rich/test18file2 
18 3594 rich 7r REG 253,0 73 360717 /home/rich/testfile 
$


个脚本创建了 3 个替代性文件描述符,两个用作输出(3 和 6),一个用作输入(7)。
在脚本运行 lsof 命令时,你会在输出中看到新的文件描述符。我们去掉了输出中的第一部分,这样就能看到最终的文件名了。
文件名显示了文件描述符所使用文件的完整路径。每个文件都显示为 REG 类型,说明这些是文件系统中的常规文件。

你可能感兴趣的:(linux,运维,服务器)