可执行文件在linux上删除自己

时间:2013-08-10 17:49:32

标签: linux command

作为超级用户,我在linux上执行了以下命令

rm rm
自行删除。因为当进程正在执行时,它的引用计数 不是零。因此无法删除。所以我很困惑, 如何以及为什么会发生?

我也尝试使用chown 0000 chown

cp -r Dir1/ Dir2/

在上面的命令中,当我只在复制过程中删除源目录时会发生什么?

3 个答案:

答案 0 :(得分:2)

与临时文件相同。

回想一下创建一些临时文件的常用方法是open(2)一个文件(保留其文件描述符),然后是unlink(2)(同时仍然有一个打开的文件描述符)。然后,只要进程正在运行并且没有close(2) - d该文件描述符,文件的数据就会保留在文件系统中。

这是因为文件确实是inodes - 目录中的文件名。 (目录包含将名称与inode相关联的条目)。

内核管理“二手”(或“打开”)inode集合,该集合包含由进程执行的inode(实际上,某些地址映射中涉及的inode如th mmap(2)或{{3 }})

因此,在/bin/rm /bin/rm启动之后,内核对rm二进制文件有一个引用作为进程的可执行文件。

当它处理unlink系统调用时,它暂时有两个引用(一个是执行中的进程,另一个是传递给/bin/rm内核实现的路径unlink)并将其减少为之一。

当然你应该避免输入/bin/rm /bin/rm,但是你通常会有一些像sash这样的独立shell来修复你的系统。

答案 1 :(得分:1)

在Windows上,由于您提到的引用计数,“rm rm”可能无法实现。然而,在大多数* nix系统上,它是。 “rm”和“chmod”被加载到内存中,然后只执行指定的命令行。另一个例子:在一个窗口中编辑文件,在编辑该文件时,在另一个窗口中删除它。无论参考计数如何,大多数* nix系统都应该可以实现这一点。

答案 2 :(得分:0)

您无法使用rm删除目录,直到其为空..