当我这样做时lsof +c 0 | grep /dev/zero
,我看到以下两行:
sshd 19064 root DEL REG 0,4 497862 /dev/zero
sshd 19064 root DEL REG 0,4 498725 /dev/zero
这德尔关键字是让我感兴趣的 - 从手册页来看,它的意思是:
德尔对于已删除的 Linux 映射文件
然而,上次我检查我的/dev/zero
仍然在那里,即使我重新启动......那么为什么会sshd尝试删除此字符设备,为什么它会成功,因为:
- 它是一个字符设备,而不是一个文件
- 它由 root 拥有
操作系统信息: Linux localhost 3.4.103 #1 SMP PREEMPT Thu Dec 18 13:07:12 CST 2014 armv7l GNU/Linux
(架构Linux)
答案1
DEL
并不表明那个过程已删除/dev/zero
,但该进程正在使用/dev/zero
,并且正在使用的实例/dev/zero
已被删除。例如,如果我有一个some-command
使用/some/file
and 的命令(比如):
$ some-command &
$ rm /some/file
$ touch /some/file
那么lsof
for/some/file
看起来像:
some-command ... ... DEL ... ... ... /some/file
已删除文件的内容将继续保留在磁盘上,直到进程释放或被终止,但无法直接访问。
/some/file
我创建的版本touch
不是some-command
正在使用的版本。