为什么 sshd 删除了我的 /dev/zero?

为什么 sshd 删除了我的 /dev/zero?

当我这样做时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/fileand 的命令(比如):

$ some-command &
$ rm /some/file
$ touch /some/file

那么lsoffor/some/file看起来像:

some-command    ...    ...  DEL    ...    ...    ...    /some/file

已删除文件的内容将继续保留在磁盘上,直到进程释放或被终止,但无法直接访问。

/some/file我创建的版本touch不是some-command正在使用的版本。

相关内容