本文已收录于:https://github.com/danmuking/all-in-one(持续更新)
前言
哈喽,大家好,我是 DanMu。鲁迅说过:一个程序员成熟的标志是一次优雅是删库。(鲁迅:这bi话我可没说过!) 作为程序员,在饱受各种奇葩需求的摧残之后,应该所有人都暗搓搓的在心里冒出过删库跑路的念头。但是你真的知道该如何才能优雅的删库跑路吗?
青铜级删库跑路
大家都知道,在 linux 中,如果我们想要删除一个文件,可以通过:rm /文件路径
来实现删除一个文件的功能。当然,这样一个一个删除文件未免效率太过于低下。我们来简单计算一下,首先用sudo ls /* | wc -c
来统计一下 linux 一共有多少个文件: 咱们算 2w 个文件,输入一个 rm 命令需要 5 秒钟。那么总共需要 5*20000=100000s = 100000s/60/60/8(每天工作8小时)=3.47 个工作日就可以删除掉整个系统中的所有文件。当然,我们还可以更高效一点,利用rm -r /
递归删除根目录下所有文件,不过这样每删除一个文件都需要你进行确认,一直敲回车也挺累人的。于是可以在加上-r
实现强行删除不提示的功能。所以,我们的终极命令就是:
sudo rm -rf /
大师级删库跑路
虽然采用sudo rm -rf /
可以实现删库跑路的功能,但是因为 rm 命令的功能仅仅是删除系统创建的文件根节点和对应的数据块。在磁盘中依然留有痕迹,到当前为止,还是可以通过硬件方式直接从磁盘上恢复出原有的信息,我们当然不能满足于此,要做就要做的彻底。所以我向各位人才隆重推荐以下两个方法:
dd 命令
dd 命令可以从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。其后可以跟两个参数 if 和 of,分别表示输入文件和输出文件。而在类 UNIX 操作系统中, 有一个特殊的文件/dev/zero
,当你读它的时候,它会提供无限个的空字符(NULL, ASCII NUL, 0x00)。这不巧了吗,如果将磁盘的每一 bit 的空间全部变成 0。不就也可以实现删库的效果。简单的将它们组合一下:
sudo dd if =/dev/zreo of=/
这个命令表示将磁盘根目录下的所有空间全部用 0x00 覆盖。这个命令不仅能够删除系统中的所有数据,并且由于还重写了磁盘根目录下的所有信息,因此能够较好避免从硬件层面上恢复数据的可能。
shred 命令
可能还有些阎王爷觉得 dd 命令仅仅是用 0x00 覆盖所有文件实在是太过与温柔,不够解恨。没关系,还有一位重量级选手 shred,和它的名字一样 shred(粉碎)可以更加残暴的摧毁磁盘中的数据。和 dd 命令一样,shred 也是通过覆盖文件的方式来实现数据的删除,不过与 dd 用空字符覆盖的温柔方式不同,shred 将采用随机生成的字符覆盖文件,并且默认将重复覆盖三次后将文件删除(顶级团队提供顶级服务)。这一套组合拳打完,即使是昂贵的硬件探测仪器也难以将数据复原。
结尾
当然,这篇文章大家可以当个笑话看看,删库跑路不仅违反职业道德,更可能触犯法律。 在日常工作中,通常公司也会有着严格的权限隔离制度,尽可能防止某个人误操作倒是重要数据被删除,但是还是不建议大家以身试法,一不小心真的就只能跑路了哈。
点关注,不迷路
好了,以上就是这篇文章的全部内容了,如果你能看到这里,非常感谢你的支持! 如果你觉得这篇文章写的还不错, 求点赞👍 求关注❤️ 求分享👥 对暖男我来说真的 非常有用!!! 白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见! 如果本篇博客有任何错误,请批评指教,不胜感激 !
最后推荐我的IM项目DiTing(https://github.com/danmuking/DiTing-Go),致力于成为一个初学者友好、易于上手的 IM 解决方案,希望能给你的学习、面试带来一点帮助,如果人才你喜欢,给个Star⭐叭!