一般来说我们在linux服务器上面删除文件看起来是很快的,一个rm就把数据删除了
但是实际上,这个并没有真正的删除。
我们可以通过
lsof |grep deleted
我们可以看到文件其实还没完全删完的。
实际上还是可以读取的。
只有当一个文件的引用计数为0(包括硬链接数)的时候,才可能调用unlink删除,只要它不是0,那么就不会被删除。所谓的删除,也不过是文件名到 inode 的链接删除,只要不被重新写入新的数据,磁盘上的block数据块不会被删除,因此,你会看到,即便删库跑路了,某些数据还是可以恢复的。换句话说,当一个程序打开一个文件的时候(获取到文件描述符),它的引用计数会被+1,rm虽然看似删除了文件,实际上只是会将引用计数减1,但由于引用计数不为0,因此文件不会被删除。
参考:
https://mp.weixin.qq.com/s?__biz=MzI0MDQ4MTM5NQ==&mid=2247495456&idx=2&sn=e2907183c41ee6bd793fd01482c2309e&chksm=e9188a3cde6f032a3ab0782292376864c3777adf4fcaf74badaea5c21be0cabb9843f9916d45&token=35894323&lang=zh_CN#rd