" lsof的"命令无法返回由kwrite打开的文件

时间:2018-02-02 17:50:32

标签: linux shell

linux命令" lsof"返回正在访问的文件, 我在我的shell中尝试了这个,用vi打开了一个文件,用kwrite打开了另一个文件然后它返回并获得了vi的过程,但没有kwrite的过程,如下所示

Image of commands on my shell

[linux@localhost shell_ex]$ lsof +d .
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    3458 linux  cwd    DIR  253,2       50 953101 .
bash    3747 linux  cwd    DIR  253,2       50 953101 .
vim     3793 linux  cwd    DIR  253,2       50 953101 .
vim     3793 linux    4u   REG  253,2    12288 953102 ./.1.txt.swp
kwrite  3912 linux  cwd    DIR  253,2       50 953101 .
lsof    3914 linux  cwd    DIR  253,2       50 953101 .
lsof    3915 linux  cwd    DIR  253,2       50 953101 .

这里我打开了PID 3793打开1.txt,没有访问2.txt的PID

1 个答案:

答案 0 :(得分:1)

lsof显示当前存在的文件描述符(也称为文件句柄,或缩写为fd)。 当您使用编辑器(此处为vim或kwrite)打开文件时,它们会创建文件描述符以打开文件,读取内容并再次关闭文件描述符。 正如您在lsof的输出中所看到的,两个编辑器都没有打开句柄。 保存文件后,再次打开文件(创建新的文件描述符),写入内容并关闭文件描述符。

您始终可以在/proc/<pid>/fd

中列出流程的当前现有文件描述符

您为vim看到的一个文件描述符不是1.txt,而是.1.txt.swp,而是vim swap file,其中每个更改都是直接写入的,因此您可以恢复您的更改,如果vim在保存文件之前崩溃(或终端关闭)。