如果我创建一个名为/home/martin/测试文件.txt,使用以下方式打开此文件较少的实用程序,删除/home/martin/测试文件.txt文件并从文件描述符目录下恢复/proc/31148,其中 31148 是较少的实用程序,然后lsof | grep testfile.txt
仍然显示测试文件.txt已删除:
martin@potato:~$ echo test > testfile.txt
martin@potato:~$ ls -li ~/testfile.txt
247 -rw-r--r-- 1 martin martin 5 24. veebr 05:02 /home/martin/testfile.txt
martin@potato:~$ xterm -hold -e "less /home/martin/testfile.txt" &
[1] 31145
martin@potato:~$ lsof | grep testfile.txt
less 31148 martin 4r REG 8,9 5 247 /home/martin/testfile.txt
martin@potato:~$ rm -v /home/martin/testfile.txt
removed `/home/martin/testfile.txt'
martin@potato:~$ lsof | grep testfile.txt
less 31148 martin 4r REG 8,9 5 247 /home/martin/testfile.txt (deleted)
martin@potato:~$ cp -v /proc/31148/fd/4 /home/martin/testfile.txt
`/proc/31148/fd/4' -> `/home/martin/testfile.txt'
martin@potato:~$ ls -li ~/testfile.txt
263 -rw-r--r-- 1 martin martin 5 24. veebr 05:04 /home/martin/testfile.txt
martin@potato:~$ cat ~/testfile.txt
test
martin@potato:~$ lsof | grep testfile.txt
less 31148 martin 4r REG 8,9 5 247 /home/martin/testfile.txt (deleted)
martin@potato:~$
这是因为测试文件.txt有新的 inode 编号吗?或者有其他原因lsof显示恢复的文件已被删除?
答案1
是的,它们是两个不同的文件。通过从 /proc 复制 ( cp
) 文件,您只是创建了一个具有新 inode 的新文件。您可以使用以下命令对其进行测试stat
-
[root@server2 tmp]#stat testfile.txt
文件:test.txt 大小:9 块:8 IO块:4096 常规文件 设备:803h/2051d Inode: 3684616
链接:1 访问:(0644/-rw-r--r--) Uid:(0/root) Gid:(0/root) 访问:2013-02-23 19:01:14.000679872 -0800 修改:2013-02-23 19:01:14.000679872 -0800 更改:2013-02-23 19:01:14.000679872 -0800
[root@server2 tmp]#stat testfile.txt
文件:test.txt 大小:9 块:8 IO块:4096 常规文件 设备:803h/2051d Inode: 3684617
链接:1 访问:(0644/-rw-r--r--) Uid:(0/root) Gid:(0/root) 访问:2013-02-23 19:02:46.422854012 -0800 修改:2013-02-23 19:02:44.507799688 -0800 更改:2013-02-23 19:02:44.507799688 -0800