ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

rm -rf 误删根目录后的数据恢复实战指南

rm -rf 误删根目录后的数据恢复实战指南 你有没有在终端里敲错过命令我干过。那一瞬间屏幕上开始疯狂滚动cannot remove ...或者什么也不提示只是安静地返回提示符但你知道有些东西再也回不来了。这篇文章就是写给所有在服务器、开发机或者 Mac 上经历过rm -rf /*或rm -rf /事故的人当你把根目录给删了除了格式化重装、除了“跑路”之外还有哪些真正有用、能大概率把系统和数据捞回来的操作。我会按照“先止损、再恢复、后预防”的顺序把 Linux 和 macOS 下的恢复思路、底层原理和工具实操完整过一遍尽量让每一个步骤都能直接照着做。1. rm -rf /* 到底做了什么先搞清楚你在对抗什么1.1 命令拆解一个空格和多一个星号的区别先说命令本身。rm是删除文件或目录的命令-r表示递归处理目录-f表示强制忽略不存在的文件、不提示确认。你以为你执行的是rm -rf /但很多人实际踩中的是rm -rf /*。这两个看起来只差一个星号在 shell 里的含义却完全不一样。rm -rf /是删除根目录本身。在 GNU 的 coreutils 实现里rm默认带有--preserve-root保护直接执行会拒绝操作并提示rm: it is dangerous to operate recursively on /。但是rm -rf /*不同shell 会把/*展开成根目录下的所有目录和文件比如/bin、/etc、/usr、/var、/home然后把这些路径分别传给rm。这时候根目录保护检查不再触发因为命令行的参数里没有/本身而是一长串实际路径。于是系统目录一个接一个被删除。这里还有一个容易忽略的细节*在 shell 中默认不匹配以点开头的隐藏文件。所以rm -rf /*不会直接删掉/.bashrc、/.ssh这类隐藏文件但/bin、/sbin、/etc、/usr、/var这些系统目录会被扫荡。macOS 上的rm来自 BSD 用户态它没有 GNU 版的--preserve-root保护一旦你用 root 权限执行rm -rf /它会真的开始删只是 SIPSystem Integrity Protection会拦下部分系统关键文件让你不至于整机立刻变砖但大量普通文件已经没救了。1.2 删除的真正原理数据其实还躺在磁盘上很多人以为rm会把数据“擦掉”这是误解。rm对普通文件执行的是unlink()系统调用它做的事情是从目录项中移除这个文件名并把对应 inode 的链接计数减一。当链接计数变为 0且没有进程再打开这个文件时文件系统才会把该 inode 标记为未分配把对应的数据块标记为空闲。这里的“空闲”意味着这些数据块可以用于后续写入但在被写入覆盖之前磁盘上真实的字节仍然原封不动地躺着。所以误删之后的第一原则就是不要再往这块分区里写任何东西。你每创建一个临时文件、每运行一次apt或dnf、每次系统自动写日志都可能把原本还能恢复的数据块覆盖掉。恢复工具之所以有效靠的就是抓住“数据块还空闲”这个窗口期。理解了这一点你就会明白后面我们会反复强调“只读挂载”和“立即停止写入”的原因。1.3 为什么系统没有当场死透占用、只读与SIP你可能会纳闷为什么执行完rm -rf /*之后终端居然还活着系统甚至还能执行一些命令原因有几个。第一很多关键文件已经被进程加载进内存。内核、init 进程、shell、动态库在删除前已经映射到进程的地址空间即使磁盘上的文件链接消失了进程在内存里的映射仍然有效所以这些进程还能继续跑。但如果你尝试启动一个新程序可能就找不到/bin/ls或动态库了。第二正在使用的文件会出现“Device or resource busy”。如果一个文件或目录正被某个进程当作工作目录、或者正被挂载点占用删除会失败。比如/proc、/sys、/dev等虚拟文件系统本身就不在真实磁盘上rm拿它们没办法。第三macOS 的 SIP 会保护/System、/bin、/usr等路径的一部分文件即使 root 也无法删除。Linux 下类似的机制较少但 systemd 的ProtectSystem或挂载只读也可以保护部分目录。所以实际损失通常不是 100% 的磁盘内容而是相当一部分系统目录和用户数据被删掉了。2. 灾难发生后的黄金十分钟先止损再想着怎么救2.1 第一反应按CtrlC还是拔电源我发现很多人遇到这种事第一反应是重启甚至直接拔电源理由是“系统已经坏了重启一下也许就好了”。这是最危险的做法。重启会导致所有进程退出那些还占着文件句柄的进程一旦消失原本可以通过/proc恢复的数据就彻底断了同时重启过程会触发大量文件系统写入操作很可能覆盖掉刚被标记为空闲的数据块。另外如果日志文件系统存在未刷盘的元数据强制断电后 fsck 会在下次启动时介入这也会加剧数据损坏。正确的止损顺序应该是这样的第一立刻按CtrlC尝试中断当前正在运行的rm命令。如果终端已经卡死尝试打开一个新的终端窗口执行pkill -9 rm如果图形界面还在这通常能立刻终止删除进程。如果连新终端都打不开说明/bin下的命令可能已经没有了但你可以使用 shell 内建命令kill因为内建命令不依赖外部程序来杀掉进程。比如先用jobs或ps如果ps能跑找到 PID然后kill -9 PID。第二如果系统还能响应立即把所有真实磁盘分区重新挂载为只读。根分区的命令是mount -o remount,ro /这一步很关键。只读挂载之后系统日志、cron、各种服务都无法再写入磁盘为后面的恢复争取了极大的空间。第三如果这台机器是云服务器别犹豫先去云控制台给磁盘创建一份快照。快照本身是对当前磁盘状态的副本它不会覆盖数据同时能多一层保险。如果后续恢复操作不小心弄坏了磁盘你还能从快照重新开始。最后不要急着拔电源。除非系统已经完全死机、rm进程依然在刷屏否则保持通电、保持只读状态是性价比最高的处理方式。2.2 冷静评估哪些目录没了、哪些进程还活着止损之后你需要快速判断损失范围。我会按下面的顺序来摸情况先看根目录还剩什么ls /如果ls还能用说明/bin/ls或 shell 的 PATH 里的程序还活着如果提示No such file or directory说明/bin或/usr/bin已经没了这时可以尝试用绝对路径或者 shell 内建命令。再看挂载情况mount cat /proc/mounts这样可以确认哪些分区还挂着、哪些已经是只读。然后看磁盘空间df -h空间显示正常不代表没事它主要让你判断是否有分区已经被卸载或异常。接着用lsof L1列出所有“已删除但仍被进程打开”的文件。这个命令的输出是后续从/proc恢复数据的关键线索lsof L1如果lsof没安装可以直接查看进程的文件描述符ls -l /proc/*/fd/* 2/dev/null | grep deleted看到大量带有(deleted)标记的文件说明它们的内容还在进程的打开描述符中有抢救价值。这个知识点我会在第 4 节专门展开。最后是记录当前系统时间和时区。恢复工具往往支持按时间过滤比如只恢复某个时间点之前的文件避免把更早的删除操作也卷进来。2.3 关键知识点恢复数据为什么要“冷处理”“冷处理”这个词在数据恢复里有两层含义一是让文件系统停止写入必要时卸载分区二是尽量减少任何可能改变文件系统元数据的操作。前面我们讲只读挂载就是最直接的冷处理。有些人会想我是不是应该立刻跑一遍fsck检查文件系统极不建议。fsck在发现异常时会“修复”文件系统它的修复动作可能包括重新分配 inode、清理孤立数据这在日常是好事但在误删恢复场景下它可能把原本还能识别出来的已删除 inode 结构标记为无效导致恢复工具失去目标。除非你判断文件系统本身的元数据已经严重损坏否则不要主动跑fsck。还有一个很多人会踩的坑在误删分区上新建目录、创建文件甚至把恢复工具安装到同一个分区。我们后面用extundelete恢复时要求把恢复出的文件写到另一个分区或U盘原因就是避免覆盖。总之在完成初步评估之前你的原则应该是能不写就不写能只读就只读能不重启就不重启。3. 按场景自救有备份、有快照、还是裸奔3.1 有备份LVM、云快照与Time Machine如果你平时有备份习惯这一步应该是最轻松的。所谓恢复其实就是把备份重新放回去。但要区分几种情况。如果你的系统是用 LVM 管理磁盘并且在做删除前打了 LVM 快照恢复流程通常是从 Live CD 或救援系统启动激活卷组挂载快照然后把快照中的内容复制回原逻辑卷或者直接把原逻辑卷恢复为快照状态。命令大致是lvconvert --merge /dev/vg/root-snapshot如果是云服务器在控制台基于之前的快照做“回滚磁盘”或“从快照创建新盘挂载”之后启动实例。这一步最安全、最不容易出错因为云平台层级的快照通常是整块磁盘的复制。如果你用的是 macOS 且开启了 Time Machine恢复路径也很直接重启并按住CommandR进入恢复模式选择“从时间机器备份进行恢复”选一个删除前的时间点系统会自动完成整盘恢复。Time Machine 每小时都会做增量备份误删之后最多丢失一小时内的数据。有备份的情况下最难的不是恢复而是确认备份是否完整、是否可用。我见过太多人以为自己在做备份实际上备份脚本早在一个月前就静默失败了。所以我会在最后一个章节重复强调备份要定期做“恢复演练”。3.2 没有备份但系统还在用包管理器重建核心文件有些相对幸运的场景是rm -rf /*执行后因为某些目录被占用或因为文件系统忙碌系统并没有彻底崩盘package manager 的数据库比如/var/lib/dpkg或/var/lib/rpm可能还留存着记录。这时候你可以用包管理器去检测哪些文件丢失然后批量重装。在 Debian/Ubuntu 上先运行dpkg --verify -a它会列出所有与包数据库不一致或缺失的文件。然后你可以写一个循环把所有损坏的包重新安装dpkg --verify -a | awk {print $2} | sed s/^.// | while read f; do dpkg -S $f 2/dev/null | cut -d: -f1 done | sort -u | xargs apt-get install --reinstall -y在 RHEL/CentOS 上对应命令是rpm -Va yum reinstall $(rpm -Va 21 | grep -E ^missing | awk {print $NF})注意这种方式只能恢复由包管理器安装的文件对/home下的用户文件、/opt下手动安装的程序、数据库数据文件无能为力。但它能帮你快速把/bin、/usr、/etc等系统核心目录重建起来让我能重新拥有一台可启动的系统再继续处理数据恢复。如果没有包管理器也可以找一台同发行版、同架构、同版本的新机器把关键目录用tar打包后拷贝过来。这个办法比较笨但有时候比包管理器更快尤其是系统目录损坏严重、包管理器已经无法正常运行的情况。需要特别注意版本差异不同 kernel、不同 glibc 版本直接复制/lib和/usr可能引发新的崩溃。3.3 macOS和APFS用户本地快照也许能救你macOS 上如果开了 Time Machine系统会默认启用 APFS 本地快照Local Snapshots。这些快照存储在本机磁盘上用于支持“从时间机器备份恢复”的窗口。你可以在终端里运行tmutil listlocalsnapshots /这会列出所有本地快照。如果有合适的快照即使没有外接备份盘你也可以重启进入恢复模式Apple Silicon 是长按电源键Intel 是CommandR然后用“时间机器备份”恢复选择对应的本地快照。这个方案可以救回整个系统的状态。如果你只想恢复某个被误删的目录或文件可以用tmutil不直接支持挂载快照但可以用mount_apfs挂载快照对应的 APFS 快照卷。找到快照名称后mkdir /mnt/snap mount_apfs -o ro -s com.apple.TimeMachine.2025-01-01-123456.local / /mnt/snap一旦挂载成功你就能从快照里拷贝文件到当前系统。注意操作目标不要往原始卷写任何内容否则会覆盖快照之后剩下的自由空间。在 macOS 上还要记住一点SIP 会保护/System、/usr、/bin、/sbin等目录的一部分文件即使你以 root 身份执行rm -rf /系统关键文件可能还在。所以恢复重心通常放在/Users下的数据和/Library、/opt里的应用文件上。4. 文件系统底层救援ext4/xfs 的神器与实操4.1 ext4 误删恢复extundelete 与 debugfs 实战这是全文最核心的实操部分。如果你的根分区是 ext4且没有快照、没有备份那么 extundelete 是我试过成功率相对高的工具。它的原理是扫描文件系统的 inode 和数据块位图找出那些“已被删除但尚未被覆盖”的 inode再尝试把数据块拼回来。先说操作前的准备准备一台能用的电脑和一个 USB 启动盘或 Live CD把受害者机器的硬盘拆下来挂到这台电脑上。如果没法拆盘就从 U 盘启动一个完整的内存版 Linux 系统保证原分区不被挂载。最理想的情况是原分区完全处于 umount 状态。第一步确认文件系统类型blkid /dev/sdb2假设结果里的分区是/dev/sdb2且为 ext4。第二步绝对不要挂载它直接安装 extundeleteapt install extundelete第三步查看该分区上的的已删除 inode 信息只读操作不修改文件系统extundelete /dev/sdb2 --inode 2这样能看到根目录下所有现存和已删除的目录项。真正执行恢复时我建议先按目录或时间过滤避免在海量文件上跑太久extundelete /dev/sdb2 --restore-directory /home/user/important或者恢复某个文件extundelete /dev/sdb2 --restore-file /etc/passwd如果确定要全盘恢复extundelete /dev/sdb2 --restore-all --after $(date -d 2025-01-01 00:00 %s)--after参数非常有用它可以避免恢复大量很久以前残留的已删除文件把范围缩小到误删时间点之后。恢复完成后文件会输出到当前目录的RECOVERED_FILES下。注意这个目录必须位于另一个分区或U盘上不要在/dev/sdb2本身创建任何文件。如果 extundelete 扫描结构不够理想debugfs是更底层的备选方案。进入调试模式debugfs -w /dev/sdb2先查看已删除的 inodelsdellsdel会返回一堆已删除 inode 编号和大小。你可以用dump inode /恢复路径/filename把某个 inode 对应的数据块导出dump 12345 /mnt/recovery/passwd.recovereddebugfs的难点在于lsdel列出的 inode 不一定对应你想要的完整文件特别是对于大文件可能分成了多个不连续的 extent需要手工拼非常考验耐心。所以普通场景先用 extundelete它已经做了很多自动化处理。4.2 XFS、Btrfs、ZFS、APFS不同文件系统的不同命运我们用一个表格来总结不同文件系统的恢复手段方便你快速对应文件系统原生快照误删恢复工具成功率评估注意事项ext3/ext4不支持原生快照extundelete、debugfs、testdisk、photorec中高删除后写入量越小成功率越高恢复前必须只读或 unmountXFS支持 xfsdump 但需预先配置官方不提供 undelete 工具低核心策略靠备份或镜像重建Btrfs支持原生快照btrfs restore可从快照提取文件高有快照时快照会占用空间注意保留策略ZFS支持原生快照zfs rollback或从快照 clone很高快照是唯一靠谱方式APFS支持本地快照/Time Machinetmutil、mount_apfs高有快照时SIP 会保护部分系统路径NTFS卷影副本/系统还原testdisk、photorec中不在本文重点方法类似但要小心 Windows 缓存xfs 是个特例很多生产服务器用 xfs但它几乎没有好用的误删恢复工具。原因在于 xfs 使用动态 inode、复杂的 Btree 和 allocation group删除文件后很难通过扫描找到完整元数据。所以如果你管理 xfs 文件系统一定不要抱侥幸心理备份要做得比 ext4 更勤快。4.3 从 /proc 抢救正在被进程占用的文件这是所有恢复手段里最“神”的一个因为它在很多场景下能拿到完整、干净的文件内容而且不依赖文件系统扫描。前提只有一个文件对应的进程还没有退出。比如你的数据库服务在误删发生时仍然运行数据文件虽然被rm删掉了但进程依然持有该文件的文件描述符。此时内核会保留这个文件的全部内容直到最后一个文件描述符关闭。所以你可以直接通过/proc路径把内容拷出来。先用lsof L1找到可疑文件lsof L1假设输出里有mysqld 1234 mysql 18u REG 253,2 104857600 123456 /var/lib/mysql/data.ibd (deleted)那么文件描述符是 18进程 PID 是 1234恢复命令是cp /proc/1234/fd/18 /mnt/recovery/data.ibd或者用cat重定向cat /proc/1234/fd/18 /mnt/recovery/data.ibd这个办法对日志文件、数据库文件、正在写入的临时文件都极其有效。我曾经用它救回过一个被误删的 PostgreSQL 数据目录——虽然文件系统层面已经没有文件了但数据库进程一直开着cat /proc/PID/fd/...完整导出了所有数据文件最终数据库启动时几乎没丢数据。要注意的是恢复出来的文件可能处于不一致状态因为它可能是删除后还在继续写入的文件导出时文件内容还在变化。这需要你先把对应进程暂停例如kill -STOP PID或者干脆停掉进程但要先复制完再停。对于数据库我建议先flush tables with read lock或pg_dump但这前提是系统还能执行 SQL。如果没有机会就只能在导出后使用数据库的恢复工具处理一致性了。5. 常见误区、典型事故与避坑技巧5.1 最不能做的三件事我见过太多人在误删后因为“着急”而把局面搞到不可挽回这里集中列一下最典型的坑。第一不要立刻重启或强制断电。前面已经讲过重启会关闭所有进程导致/proc文件描述符恢复方案直接失效而且重启过程中系统会写入大量日志覆盖空闲数据块。你可能会觉得“系统卡死了只能重启”但实际上如果只是删除文件导致命令不可用很多 shell 内建命令还能工作可以先尝试冷处理。第二不要在原分区上重新安装系统或mkfs。重新格式化会把文件系统结构彻底重建原有数据块几乎全部变成空白任何恢复工具都会失效。有些人看到系统起不来直接重装等装完才想起里面还有重要数据那时候已经晚了。第三不要无脑跑fsck。我前面也提到过fsck 会自动修复文件系统修复动作可能掩埋掉删除后的残留元数据。只有在你能确认文件系统已经损坏到无法挂载、且不再依赖恢复工具时才考虑用它。5.2 一个真实的 MySQL 误删抢救过程我举一个真实事故的复合案例。某次维护中同事写了一个清理脚本用变量保存数据盘路径但变量没初始化成功导致实际执行了rm -rf $DATA_DIR/*变量为空命令变成了rm -rf /*。幸运的是MySQL 服务仍在运行。我接到报警后没有重启系统而是先查看了 MySQL 进程状态systemctl status mysql此时 MySQL 虽然还在运行但已经开始报错因为表结构文件被删除部分查询失败。我立刻检查了被删除但仍打开的文件描述符ls -l /proc/$(pgrep mysqld)/fd | grep deleted结果发现.ibd文件全部显示为 deleted文件句柄还在。当天晚上业务低峰期我先用kill -STOP $(pgrep mysqld)暂停 MySQL 进程避免后续写入然后把所有标记为 deleted 的文件描述符逐一复制到新目录for fd in $(ls /proc/$(pgrep mysqld)/fd | grep ^[0-9]); do target$(readlink /proc/$(pgrep mysqld)/fd/$fd) case $target in *deleted*) cp /proc/$(pgrep mysqld)/fd/$fd /data/recovery/ ;; esac done虽然恢复出来的文件名不是原来的但通过对照 MySQL 的show variables like datadir以及原始表名我重建了目录结构。随后把 MySQL 数据目录替换为新拷贝启动并innodb_force_recovery6强制启动用mysqldump导出数据再重建新实例。最终绝大多数表都救回来了只有一小部分日志写到一半的数据丢了但已经是损失最小的方案。这个案例教会我一件事发生事故时先别急着崩溃看看还有哪些进程活着。活着就还有机会。5.3 恢复文件完整性验证无论是用extundelete还是/proc方案恢复出来的文件都必须做验证否则直接使用可能二次翻车。对于文本配置文件先检查文件头和文件尾head -20 /mnt/recovery/etc/nginx.conf tail -20 /mnt/recovery/etc/nginx.conf如果能读出内容说明至少结构完整。对于二进制程序用file看类型用ldd检查依赖file /mnt/recovery/bin/ls ldd /mnt/recovery/bin/ls如果输出里出现大量not found说明这个二进制可能不完整或配套 lib 缺失。对于数据库文件最直接的办法是放到一个新的数据库实例里尝试启动或用官方工具做校验。如果是tar备份恢复出来的文件可以用tar -tvf列出内容确认没有因恢复导致的截断。如果有原文件的校验值比如sha256sum强烈建议对比一下。恢复工具扫出来的数据即使大小一样也可能某些扇区已经被覆盖校验是最有说服力的证据。6. 从根上预防让 rm -rf 再也没有机会6.1 终端层面的几道防线恢复数据终究是被动挨打真正聪明的做法是不给事故发生的机会。我自己的服务器上会做下面几道防护。第一道在交互式 shell 里把rm替换成回收站命令。比较省事的是安装trash-cli然后给rm起个别名alias rmtrash-put这样交互终端里的rm只是把文件移动到回收站不会直接删除。但这个 alias 对脚本无效因为脚本默认不会加载交互式 shell 的 alias而且 root 账户为了避免误解一般也不建议直接用回收站。更保险的做法是使用safe-rm它会维护一个不可删除路径列表把/、/bin、/etc等目录加入黑名单后即使是 root 执行rm -rf /也会被拒绝。第二道在脚本里谨慎使用变量。rm -rf $VAR/*这类写法最危险如果$VAR没有引号、为空就会变成rm -rf /*。建议脚本开头加set -u让未定义变量直接报错不要继续执行所有路径变量都加双引号rm -rf -- $VAR_DIR/*这至少能避免最经典的 shell 通配符翻车。另外使用 GNUrm时建议显式加--preserve-rootrm -rf --preserve-root /如果系统支持这个参数会让rm遇到根目录时直接报错多一层保障。第三道重要目录加只读属性。Linux 的 ext4 支持给文件或目录设置 immutable 属性chattr i /etc加了i之后即使是 root 也不能修改、删除或重命名这个目录除非先取消属性。这个操作对防止手滑很有效但也会影响正常的配置修改所以更适合给/boot、关键二进制目录或某些安全敏感目录加上。使用前想清楚使用时要记得后续维护前先chattr -i。6.2 系统与权限层面的兜底另一个更实际的预防手段是权限收敛。绝大多数rm -rf事故都发生在 root 下。生产环境里尽量不用 root 做日常操作而是用普通用户加sudo并在sudoers里限制用户能执行的命令。比如如果普通用户根本不需要rm的 root 权限就不要给这样即使他手滑也只会删掉自己权限范围内的东西波及范围小得多。systemd 也提供了很好的防护机制。在 service 单元里设置ProtectSystemstrict ProtectHomeread-onlyProtectSystemstrict会让整个文件系统以只读方式挂载只有显式声明的ReadWritePaths目录可写。如果服务程序本身不负责清理目录这样的配置能保证误操作不会有任何实际杀伤力。在容器里跑服务也是好办法容器内的rm -rf /最多毁掉容器层宿主机数据完全不受影响而且有镜像层和卷做兜底几分钟就能重建一个干净环境。最后是备份策略。快照和备份不能只做一份要遵循“至少 3 份、2 种介质、1 份异地”的原则。云服务器一定要开自动化快照至少保留 7 天本地重要目录用 restic、borg 或 rsync 做定时增量备份。关键是每隔一段时间做一次全量恢复演练确认备份不是一份“没法恢复的慰藉”。6.3 制作一个应急救援包经历过一次误删事故后我养成了一个习惯准备一个应急救援 U 盘。这个 U 盘既是启动盘也内置所有恢复工具和一份“急救手册”。它能派上大用场因为你不知道哪一天系统会卡到网都连不上。制作很简单准备一个至少 16GB 的 U 盘用 Ventoy 做一个多系统启动盘里面放 Linux Live ISO比如 SystemRescue然后在 U 盘的数据分区里放入离线安装包extundelete、testdisk、photorec、xfsprogs、btrfs-progs、zfsutils、tmux、htop、rsync。这些工具在 Live 环境里可能自带但离线包里多一份更安心。U 盘里还要放一个说明文档写清楚最常用的命令# 只读挂载 mount -o remount,ro /dev/sdb2 /mnt # 扫描已删除文件 extundelete /dev/sdb2 --restore-all --after 1710000000 # 查看被删除但仍在占用 lsof L1这个 U 盘平时放在安全的地方出了事故它就是你最可靠的“外援”。最后再分享一点个人体会这些恢复手段我都亲自踩过坑。extundelete 不是万能的删除后写入越多成功率越低/proc 方案也不是万能的进程一退出就全没了。所以我每次处理完事故都会做一次复盘到底为什么会执行那条命令脚本里哪个变量没保护权限为什么给得那么大大多数事故其实不是“运气不好”而是系统设计和日常习惯里早就埋了雷。数据恢复最好的结果永远是让这些工具躺在U盘里吃灰而不是在事故现场救火。给你的终端加个确认给关键目录加个只读给系统开个快照半小时的预防能省掉一整晚的“抢救”。希望这篇文章里的知识你永远用不上但万一用上了至少不用跑路。
返回列表