linux命令" lsof"返回正在访问的文件, 我在我的shell中尝试了这个,用vi打开了一个文件,用kwrite打开了另一个文件然后它返回并获得了vi的过程,但没有kwrite的过程,如下所示
[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
答案 0 :(得分:1)
lsof
显示当前存在的文件描述符(也称为文件句柄,或缩写为fd)。
当您使用编辑器(此处为vim或kwrite)打开文件时,它们会创建文件描述符以打开文件,读取内容并再次关闭文件描述符。
正如您在lsof的输出中所看到的,两个编辑器都没有打开句柄。
保存文件后,再次打开文件(创建新的文件描述符),写入内容并关闭文件描述符。
您始终可以在/proc/<pid>/fd
。
您为vim看到的一个文件描述符不是1.txt
,而是.1.txt.swp
,而是vim swap file,其中每个更改都是直接写入的,因此您可以恢复您的更改,如果vim在保存文件之前崩溃(或终端关闭)。