In Unix/Linux, a removed file only disappears when the last file descriptor to it is gone. As long as the file /usr/bin/rm
is still opened by a process (and it is, because it is running) it will not actually be deleted from disk from the perspective of that process.
This also why removing a log file that’s actively being written to doesn’t clear up filesystem space, and why it’s more effective to truncate it instead. ( e.g. Run > /var/log/myhugeactivelogfile.log
instead of rm /var/log/myhugeactivelogfile.log
), or why Linux can upgrade a package that’s currently running and the running process will just keep chugging along as the old version, until restarted.
Sometimes you can even use this to recover an accidentally deleted file, if it’s still held open in a process. You can go to /proc/$PID/fd
, where $PID
is the process ID of the process holding the file open, and find all the file descriptors it has in use, and then copy the lost content from there.
A core memory of mine is getting flung off of one of these things because of the centrifugal force, falling on my back, and being unable to breathe for like 20-30 seconds … until I screamed at the top of my lungs, and things slowly returned to normal, while the teacher just went: oh you’re fine, don’t be a baby. I was 6.