linux中为什么 rm 命令能删除自己 | linux使用rm命令删自己会怎样?
rm 是我们日常用来删除文件和目录的命令。但你有没有想过,如果你用 rm 删除系统中的 rm 命令本身会发生什么?它会报错吗?还是无法执行?
1. rm 本质上是一个程序
在 Linux 系统里,rm
并不是一个神奇的命令,而是一个可执行文件,通常位于:
/bin/rm
当你在终端输入:
rm file.txt
实际上,shell 会去 /bin
目录下找到 rm
可执行文件,并在内存中加载它来执行删除操作。
2. 程序在内存中运行,与磁盘文件分离
Linux 的操作系统会把可执行文件加载到内存中形成一个进程。此时,程序在内存里已经有了自己的副本,运行不再依赖磁盘上的文件。
所以,当你执行:
rm -r /bin/rm
系统会删除 /bin/rm
这个磁盘文件,但 rm 进程仍然在内存中运行,可以继续执行删除任务。
可以类比为:你手里拿着一本操作说明书(内存中的程序副本),即使桌子上的原书(磁盘文件)被撕掉,你依然可以按说明操作。
3. 删除自己后会发生什么
当前执行的
rm
进程依然可以完成任务磁盘上的
/bin/rm
文件被删除之后尝试再打开一个终端使用
rm
,系统就会报错:
bash: rm: command not found
因为新的进程无法找到已经被删除的 /bin/rm
文件。
通过这个原理,可以理解 Linux 中 程序执行与磁盘文件的分离:程序一旦加载到内存,就像拿到了一份拷贝,磁盘上的原文件删除不影响已运行的进程