Linux基础:什么是文件描述符和工具lsof
什么是文件描述符
在 Unix/Linux 系统中,文件描述符(
File Descriptor
) ,简称 FD 是一个非负整数,它用于唯一标识一个打开的文件、设备或者网络连接等。文件描述符是操作系统用于管理文件和 I/O 的重要概念,它提供了一种标准的、抽象的接口,使得应用程序可以使用统一的方式来访问文件和 I/O 设备,而不用关心具体的实现细节。
在 Unix/Linux 系统中,每个进程都有一个文件描述符表,用于记录进程打开的文件、设备或者网络连接等的信息。这个表中的每个文件描述符都对应着一个文件或 I/O 设备,通过操作文件描述符,可以实现对文件或 I/O 设备的读、写、关闭等操作。
文件描述符通常用整数来表示,其中 0、1、2 是预留的标准文件描述符,分别代表标准输入、标准输出和标准错误输出。其他的文件描述符则由系统动态分配,每个文件描述符都有自己的状态信息,包括文件类型、文件状态、读写位置等。在应用程序中,通过系统调用(如 open、read、write、close 等)来操作文件描述符,从而实现对文件和 I/O 设备的访问和控制。
怎么查看文件描述符
提示
Linux下所有文件、文件夹、设备、网络连接等一切皆文件。所以说,每个打开的文件、网络连接套接字都一个文件描述符。
在 Unix/Linux 系统中,可以使用 lsof(list open files)命令来查看当前进程打开的文件和网络连接等信息,其中包括每个文件和网络连接对应的文件描述符。lsof 命令是一款强大的工具,可以列出系统中所有打开的文件和网络连接等信息,包括进程 ID、用户 ID、文件描述符、文件类型、文件状态、读写位置等详细信息。
使用 lsof
命令,可以方便地查看进程所打开的文件和网络连接等信息,帮助我们分析系统资源的使用情况,排查系统性能问题等。下面是一些常用的 lsof 命令示例:
- 列出某个进程所打开的文件和网络连接等信息:
$ lsof -p <pid>
- 列出某个用户所打开的文件和网络连接等信息:
$ lsof -u <username>
- 列出某个文件所被哪些进程打开:
$ lsof <filename>
- 列出所有打开的网络连接信息:
$ lsof -i
- 列出某个端口被哪些进程占用:
$ lsof -i:<port>
需要注意的是,lsof 命令需要以超级用户权限运行才能获取所有进程和文件的信息。
参考
ChatGPT