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


24

我通过运行意外删除了一个文件:

rm -rf ./Desktop/myScript.sh

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


1
假设您正在使用HFS +,则需要查找HFS +取消删除工具。Apple SE网站可能了解更多。
derobert 2012年

1
轶事,但我的岳父无意间在Mac OS X上删除了大目录的照片,并使用他下载的工具成功恢复了大多数照片(我认为这很花钱,但是试用了一个或两个文件,因此您可以测试它是否可以正常工作,在您的情况下就足够了)。discussions.apple.com/thread/...
ire_and_curses

Answers:


28

MacOS是Unix OS,rm表示“再见”。GUI界面允许您将文件移至垃圾箱(然后可以将其恢复),但这不是您要做的。如果您有备份(例如,正在运行Time Machine),则将保存。

澄清度

严格来说(如@ire_and_curses所指出的),rm只需删除文件的目录条目,同时保持其使用的磁盘块不变。如果可以停顿文件所在的文件系统,则可以使用一些高级方法来尝试重新发现这些块的内容。也可以购买一些恢复工具来恢复损失。中心问题是,其他任何东西都不会重用文件所代表的任何磁盘块。

MacOS还具有安全的删除命令(srm),该命令会在文件被覆盖之前将其覆盖,unlink从而使其无法恢复。我使用该unlink术语是因为这是与Shell rm命令关联的基础系统调用。这为下面的讨论的下一个阶段奠定了基础。

边注

[我应该加急,即使您多次重写磁盘,也有一些方法可以读取以前多次写入的内容。要正确清洁磁盘以进行处置,实际上需要使用酸浴,大锤子和切碎机。]

unlink删除文件会减少文件的inode链接计数。如果该值达到零,则从文件系统目录中删除该文件,并释放其磁盘块以供重新使用。仅当没有进程打开文件时才会发生这种情况。经常使管理员感到困惑的是,文件系统正在利用大量的空间,而磁盘块的简单求和(诸如之类的du)无法解决。大多数情况下,原因是打开的文件已被删除,因此不再在其目录中表示该文件。原因是磁盘块将一直处于使用状态,直到使用该文件的最后一个进程终止。

unlink实际上,打开文件并立即打开它是创建安全的临时文件的一种常见做法。lsof如果您寻找链接计数(NLINK)为零的文件,则诸如此类的工具可以公开这些原本不可见的文件。

在Unix和Linux(MacOS是Unix的商标)中,rm如果可以的话,它遵循Unix的“即做”原则而没有大张旗鼓。也就是说,如果您具有删除文件的权限(即您的目录允许写入),则按照rm您的要求进行操作。您可能想要创建一个shell别名rm='rm -i',该别名会在执行操作之前提示您进行确认。如果需要,将-f开关与rm覆盖使用。rm当您glob删除like 时,别名别名最有用rm *.log。也就是说,您可以选择跳过列表中的文件。


在“说明”部分做得很好。
蒂姆(Tim)

Mac OS的“安全擦除垃圾”功能使用一种已研究的模式来实际擦除现代旋转磁盘上的量子阱。在固态存储上,它使用“修剪”功能将与文件关联的存储块放在存储控制器中“要擦除”队列的开头。如果您确实需要磁盘中的内容,请使用它们,但是请注意,它们需要很长时间才能清理旋转的磁盘。
Wexxor '16

4

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

还有很多。

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


更高级的方法是在恢复模式下引导OSX(或如果可能,则卸载分区)并手动查找(如果您还记得脚本中的某些特定文本)。

一些例子:

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

1
使用了Wondershare并获取了一些代码,我“ git clean -f” d
fionbio '16

2
截至2019年,由于APFS加密,现在无法在OSX上执行块设备扫描技巧,或者更加困难。我已经在Linux上以这种方式成功地进行了数据:P
primehunter326
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.