在 Linux 系统中,文件描述符(File Descriptor,简称 FD)是操作系统为管理打开的文件、 socket、管道等 I/O 资源而分配的整数标识符,每个进程启动时都会默认打开三个文件描述符:标准输入(0)、标准输出(1)和标准错误(2),查看和管理文件描述符对于系统调试、性能优化和安全排查至关重要,本文将详细介绍 Linux 中查看文件描述符的多种方法及相关实用技巧。

通过 /proc 文件系统查看
/proc 文件系统是 Linux 内核提供的虚拟文件系统,其中存储了当前系统中运行的进程信息,每个进程在 /proc 下都有一个以其进程 ID(PID)命名的目录,通过该目录可以查看进程打开的所有文件描述符。
查看指定进程的文件描述符
使用 ps 或 pgrep 命令找到目标进程的 PID,查看进程名为 nginx 的 PID:
pgrep nginx
假设返回的 PID 为 1234,则该进程的文件描述符信息存储在 /proc/1234/fd 目录下:
ls -l /proc/1234/fd
输出结果可能如下:
0 -> /dev/null
1 -> /var/log/nginx/access.log
2 -> /var/log/nginx/error.log
3 -> socket:[12345]
4 -> /etc/nginx/nginx.conf
数字(0、1、2、3、4)即为文件描述符符号链接,箭头指向对应的文件或 socket。socket:[12345] 表示该文件描述符关联的是一个 socket,中括号内为内核分配的 inode 号。
查看所有进程的文件描述符
若需遍历所有进程的文件描述符,可结合 find 命令:
find /proc -maxdepth 2 -name fd -type l | head -n 10
该命令会列出前 10 个进程的文件描述符目录,适用于全局排查场景。

使用 lsof 命令查看
lsof(list open files)是一个强大的工具,用于列出系统中被打开的文件及其相关信息,相比 /proc 文件系统,lsof 提供了更友好的输出格式和更丰富的过滤选项。
查看指定进程的文件描述符
通过 -p 选项指定 PID,例如查看 PID 为 1234 的进程:
lsof -p 1234
输出包含文件描述符(FD 列)、文件类型(TYPE)、文件名称(NAME)等信息:
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    1234 root    0u  CHR  136,0      0t0    3 /dev/null
nginx    1234 root    1u  REG  253,0    1024  678 /var/log/nginx/access.log
nginx    1234 root    2u  REG  253,0    2048  679 /var/log/nginx/error.log
nginx    1234 root    3u  IPv4  12345      0t0  TCP *:http (LISTEN)
FD 列中的 u 表示读写权限,r 表示只读,w 表示只写。
查看指定文件或 socket 的使用进程
通过 -i 选项可查看网络连接相关的文件描述符,例如查看监听 80 端口的进程:
lsof -i :80
查看用户打开的文件描述符
通过 -u 选项指定用户,例如查看 root 用户打开的文件:
lsof -u root
通过 /dev/fd 查看当前进程的文件描述符
在当前进程的 shell 环境中,可通过 /dev/fd 访问自身的文件描述符,在 shell 脚本中查看当前进程的文件描述符:

ls -l /dev/fd
输出结果:
total 0
lrwx------ 1 root root 64 Jan 1 10:00 0 -> /proc/self/fd/0
lrwx------ 1 root root 64 Jan 1 10:00 1 -> /proc/self/fd/1
lrwx------ 1 root root 64 Jan 1 10:00 2 -> /proc/self/fd/2
lr-x------ 1 root root 64 Jan 1 10:03 3 -> /proc/self/fd/3
/proc/self 是一个符号链接,始终指向当前进程的 /proc 目录,/dev/fd 实际上是当前进程文件描述符的快捷方式。
文件描述符状态与常见问题排查
文件描述符的数量受系统限制,可通过 ulimit -n 查看单个进程的最大文件描述符数(默认通常为 1024),若进程打开的文件描述符超过限制,可能导致 “Too many open files” 错误。
常见排查场景
- 文件描述符泄漏:进程异常退出未关闭文件描述符,可通过 
lsof | grep <进程名>持续监控文件描述符数量是否持续增长。 - 端口占用:通过 
lsof -i :<端口号>查看占用端口的进程及对应的文件描述符。 - 磁盘 I/O 问题:结合 
lsof和iostat定位频繁读写文件的进程及其文件描述符。 
文件描述符管理工具对比
| 工具 | 优点 | 缺点 | 适用场景 | 
|---|---|---|---|
/proc | 
无需额外安装,内核原生支持 | 输出格式简单,需手动解析 | 脚本自动化、内核调试 | 
lsof | 
功能强大,过滤选项丰富 | 部分系统需手动安装 | 日常运维、网络连接排查 | 
/dev/fd | 
直接访问当前进程文件描述符 | 仅限当前进程,信息有限 | shell 脚本内部调试 | 
Linux 提供了多种查看文件描述符的方式,从内核虚拟文件系统 /proc 到用户工具 lsof,可根据实际需求选择合适的方法,掌握这些工具不仅能帮助快速定位系统问题,还能深入理解进程与 I/O 资源的交互机制,在日常运维中,建议结合 ulimit 和监控工具,定期检查进程的文件描述符使用情况,确保系统稳定运行。



















