通过命令行在 Mac 上恢复已删除的文件

通过命令行在 Mac 上恢复已删除的文件

我通过运行以下命令意外删除了文件:

rm -rf ./Desktop/myScript.sh

我认为可以恢复该文件,因为该rm命令会暂时删除。如何在 Mac OSX 上恢复已删除的文件?

答案1

MacOS 是 Unix 操作系统,rm意思是“再见”。 GUI 界面允许您将文件移至垃圾箱(然后您可以恢复该文件),但这不是您所做的。如果您有备份(例如,您有时间机器正在运行),那么您就得救了。

澄清

严格来说(正如 @ire_and_curses 指出的那样) arm只是删除文件的目录条目,而离开磁盘块已使用,未受影响。如果您可以静默该文件所在的文件系统,则可以使用高级方法尝试重新发现这些块内容。还有一些恢复工具可以购买来挽回损失。核心问题是没有其他任何东西可以重复使用文件所代表的任何磁盘块。

MacOS 还有一个安全删除命令 ( srm),该命令会在编辑文件之前覆盖文件,unlink使其无法恢复。我使用这个unlink术语是因为这是与 shellrm命令相关的底层系统调用。这为下面讨论的下一部分奠定了基础。

边注

[我应该赶紧补充一点,即使你多次覆盖磁盘,也有办法读取之前写入十几次或更多次的内容。要对磁盘进行正确的消毒处理,确实需要酸浴、大锤子和粉碎机。 ]

unlink删除文件会减少文件的 inode 链接计数。如果该值达到零,则该文件将从文件系统目录中删除,并释放其磁盘块以供重新使用。这仅发生在进程打开了文件。管理员经常会感到困惑,因为他们发现文件系统占用了大量空间,而这些空间无法通过简单地将磁盘块相加(例如du)来解释。最常见的原因是打开的文件已被删除,因此它不再出现在其目录中。原因是磁盘块一直处于使用状态,直到最后一个使用该文件的进程终止。

打开文件并立即unlink读取它实际上是创建安全临时文件的常见做法。lsof如果您查找链接计数 (NLINK) 为零的文件,此类工具可能会暴露这些原本不可见的文件。

在 Unix 和 Linux(其中 MacOS 是一个品牌 Unix)中,rm遵循 Unix 哲学“do-it”,如果可以的话,不张扬。也就是说,如果您有权删除文件(即您的目录允许写入),则rm按照您的要求进行操作。您可能希望创建一个 shell 别名rm='rm -i',在执行操作之前提示您进行确认。如有必要,使用-f带有覆盖功能的开关。当您rm删除类似.也就是说,您可以选择跳过列表中的文件。rmglobrm *.log

答案2

根据您的内容,但您可以使用不同的第三方软件来执行此操作,例如:

还有很多。

您可以通过在 App Store 中输入“数据恢复”来找到更多应用程序。


更高级的方法是在恢复模式下启动 OSX(或者如果可以的话卸载分区)并手动查找它(如果您记得脚本中的某些特定文本)。

一些例子:

diskutil list
sudo cat /dev/disk0s2 | strings | grep -C20 "my_stuff"

相关内容