该符号链接是准普遍在Linux上,但它们不存在其他任何地方(除了在Cygwin看齐它们)。在AIX和Solaris上也存在,但是它们不是符号链接。可移植地,要获取有关打开文件的信息,请安装。/proc/PID/fd/NUM
/proc/PID/fd/NUM
lsof
Unices与 /proc/PID/fd
在Linux下,是一个指向文件的魔术链接,该文件具有ID PID的进程已在文件描述符NUM上打开。此链接很神奇,例如,即使删除了文件,它也可用于访问文件。该链接也将通过重命名来跟踪文件。是指向一个魔法符号链接,其中PID是访问链接的过程。/proc/PID/fd/NUM
/proc/self
/proc/PID
几乎所有Linux系统都具有此功能。它是由proc文件系统的驱动程序提供的,该文件在技术上是可选的,但用于许多事物(包括进行ps
工作(从中读取)),即使在嵌入式系统上也几乎从未遗漏。/proc/PID
西格温
Cygwin模拟Linux (用于Cygwin进程)和。/proc/PID/fd/NUM
/proc/self
每个文件描述符都有一些条目,但是它们的显示形式与打开的文件相同,因此它们不提供有关文件路径的信息。但是,它们确实报告的信息与向打开文件的进程报告的信息相同,因此可以确定文件位于哪个文件系统上以及其索引节点号。目录显示为符号链接,但是它们是魔术符号链接,只能跟随它们,并返回空字符串。/proc/PID/fd
stat
fstat
readlink
在AIX下,该procfiles
命令显示有关进程的打开文件的一些信息。在Solaris下,该pfiles
命令显示有关进程的打开文件的一些信息。这不包括文件的路径(在Solaris上,从Solaris 10开始,包括以下内容)。
此外,现代Solaris版本还包含类似于Linux中符号链接的符号链接。该命令显示有关进程的打开文件的信息,包括路径。/proc/PID/fd/NUM
/proc/PID/path/NUM
/proc/PID/fd/NUM
pfiles
/proc/PID/fd
是一个文本文件,每个文件描述符包含一个由该进程打开的记录(行)。此处未跟踪文件名。
/proc/PID/
是一个目录,但不包含有关文件描述符的任何信息。
可/proc
直接访问文件描述符的Unices
(注意:有时可以通过浏览进程的内存映像来获取有关进程打开文件的信息,该映像可以在下访问/proc
。我不认为这是“直接访问”。)
Unices 文件在哪里/proc/PID
proc文件系统本身始于 UNIX 8版,但结构不同,经过了Plan 9并回到了一些unices。我认为所有带有的/proc
PID的每个操作系统都有一个条目,但是在许多系统上,这是一个常规文件,而不是目录。以下系统具有,需要与一起阅读:/proc/PID
ioctl
- Solaris最高2.5
- OSF / 1现在称为Tru64
- IRIX(?)
- 上合组织(?)
MINIX 3有一个procfs服务器,它提供了几个类似Linux的组件,包括目录。但是,这不存在。/proc/PID/
/proc/PID/fd
FreeBSD有目录,但是它们不提供有关打开文件描述符的信息。(但是,有一个类似于Linux的,它可以通过符号链接访问可执行文件。)/proc/PID/
/proc/PID/file
/proc/PID/exe
FreeBSD的procfs已弃用。
没有的Unices /proc
- HP-UX
- OpenBSD的
- NetBSD
- Mac OS X
通过其他渠道的文件描述符信息
该fuser
命令列出了打开了指定文件或在指定安装点上打开了文件的进程。此命令是标准命令(在所有符合XSI的系统上可用,即具有X / Open System Interface Extension的POSIX)。
您无法使用此实用程序将进程从文件名转到文件名。
Lsof代表“列出打开的文件”。它是大多数unix变体可用的第三方工具(但通常不是默认安装的一部分)。获取有关打开文件的信息非常依赖于系统,因为上面的分析可能使您感到怀疑。lsof维护者已经完成了在单个界面下将所有内容组合在一起的工作。
您可以阅读FAQ来了解lsof必须解决哪些困难。在大多数Unice上,获取有关打开文件名的信息需要解析内核数据结构。引用于常见问题3.3:“ lsof为什么不报告完整路径名?”:
Lsof无法从以下方言的内核名称缓存中获取路径名称组件:
只有Linux内核在它维护的有关打开文件的结构中记录完整的路径名。取而代之的是,大多数内核在打开文件后将路径名转换为设备和节点号的双精度位,并将其用于后续文件引用。
如果您需要从lsof
的输出中解析信息,请确保使用-F
模式(每行一个字段),最好使用-F0
模式(以空分隔的字段)。要获取有关特定进程的特定文件描述符的信息,请使用-a
带有和的选项,例如。-p PID
-d NUM
lsof -a -p 123 -d 0 -F0n
/dev/fd/NUM
用于当前进程的文件描述符
许多unix变体为进程提供了一种通过文件名访问其打开文件的方法:open 相当于调用。当程序需要文件名但要传递已经打开的文件(例如管道或套接字)时,这些名称很有用;例如,实现进程替换的外壳将在可用的地方使用它们(使用不可用的临时命名管道)。/dev/fd/NUM
dup(NUM)
/dev/fd
在/dev/fd
存在的地方,通常也(总是?)是同义词(有时是符号链接,有时是硬链接,有时是具有等效属性的魔术文件)/dev/stdin
= /dev/fd/0
,/dev/stdout
= /dev/fd/1
,/dev/stderr
= /dev/fd/2
。
- 在Linux下,
/dev/fd
是的符号链接/proc/self/fd
。
- 在大多数unices(IRIX,OpenBSD,NetBSD,SCO,Solaris等)下,输入
/dev/fd
都是字符设备。无论文件描述符是否打开,它们通常都会出现,并且条目对于一定数量以上的文件描述符可能不可用。
- 在FreeBSD和OSX下,fdescfs文件系统提供了一个动态
/dev/fd
目录,该目录遵循调用过程的打开描述符。没有安装静态/dev/fd
可用/dev/fd
。
- 在OSF / 1(Tru64)下,
/dev/fd
通过fdfs提供。
- 有没有
/dev/fd
在AIX或HP-UX。
pfiles
命令显示文件描述符路径。它从/proc/<pid>/path
您可能还会提到的目录中检索此信息。请参阅docs.oracle.com/cd/E19253-01/817-0547/esxiq/index.html