撤消Linux垃圾桶命令


24

我们可以撤消在终端中完成的操作,例如,通过删除文件rm吗?

获得的解决方案:

  1. 混叠
  2. 取消删除实用程序
  3. 备份工具
  4. 垃圾桶
  5. 版本控制(FUSE)

1
开启rm取消链接到的文件inode。问题:“ rm发出命令时文件会去哪里”-> unix.stackexchange.com/questions/10883/…对您来说也可能是一本好书。
erch 2013年

Answers:


62

终端中的每个操作都没有通用的“撤消”。如果您希望在使用后恢复文件,rm则需要研究恢复软件。

防止您将来犯错误的一种选择是使aliases使用替代命令来删除文件。将它们添加到您的文件中,~/.bashrc并养成使用它们而不是的习惯rm

  1. 别名rmi ='rm -i'

    如果使用rmi,将提示您确认将来的删除。y发出rmi命令后,请避免养成立即按的习惯,因为这样做会破坏目的。

  2. 您还可以将trsh终端中的命令删除的文件移动到回收站(在KDE和Gnome上):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    如果使用trsh,则将具有有限的“删除”功能。当心

    trsh dir1/file1 dir2/file1
    

    可能仍会导致不可恢复的数据丢失。


3
+1比我的答案好得多=)
极客方法

9
第二个别名非常非常聪明。+1。
LiraNuna

3
垃圾(){mv $ @〜/ .Trash; }#bash函数,不是别名。更改rm的预期行为是个坏主意,恕我直言。
理查德·霍斯金斯

20
与混叠的风险rmrm -i是你习惯了安全网,它给你。然后,您转到另一台没有该别名的机器上……
Dentrasi,2009年

3
由于Richard和Dentrasi提到的原因,我更喜欢创建自定义函数或使用别名rmi-> rm -i。只是通过对现有程序进行别名来妨碍它,这确实是一个错误。
Telemachus

6

命令行没有回收站。

您可以尝试各种取消删除的实用程序,但不能保证它们会起作用。


是的,命令行中有一个垃圾箱。在另一个答案中查看垃圾箱cli。
Sparhawk

Trash-cli非常好:)并使用Trashlib,比单纯移动文件要好。
m3nda'1

5

如果在运行gui时使用KDE,则可以使用trash-cli。这是用于使用KDE垃圾箱功能删除/还原的命令行实用程序。


1
trash-cli提供的功能还可以与GNOME垃圾一起使用,并且旨在提供rm选项兼容性(用于别名)。
安德里亚·弗兰西亚

不要忘记,alias rm=trash这样典型的命令行操作都带有撤消按钮。
瑞安·汤普森

我认为这alias rm=trash是潜在的危险,如果有一天您有机会使用别人的系统而忘记(或ssh)。习惯于编写trash而不是编写起来要安全得多rm
Sparhawk

4

您可以rmtrash命令创建别名(您需要先安装trash。)将此添加到您的~/.bashrc

alias rm='trash'

这样做比较好,alias rm='mv --target-directory=$HOME/.Trash'因为〜/ .Trash不是gnome的垃圾箱文件夹。最好恕我直言,让我们trash弄清楚实际的垃圾文件夹在哪里。

顺便说一句,我会在评论中发表这个,但我没有足够的代表。


5
+1表示“因为〜/。垃圾箱不是gnome的垃圾箱文件夹”。但是,rm也不应该别名为垃圾桶。如果那是您想要的,您应该只使用垃圾而不是rm。
nagul

没错,但是对于某些人来说,旧习惯很难改掉。
Alvin Row

“ rmtrash”是另一种选择。
Itachi 2015年

3

尚无两个其他技术解决方案:

  1. libtrash:一个动态库,可以预加载到您的外壳中,该库拦截删除/删除的系统调用,并将文件移至垃圾箱(类似于别名,但预加载后可用于任何应用程序)。
  2. 版本控制文件系统。如果删除(或编辑,复制或...)文件,则可以恢复到旧状态。这可以通过FUSE文件系统及其版本控制文件系统之一来完成。

3

这里还有一个更大的问题值得解决。Shell命令不是闲聊的(它们不会仔细检查您想要的内容),它们希望您知道您在做什么。这是它们如何设计的基础。这是一个功能,而不是错误。

有些人在使用这样的命令时会感到猛烈,我认为这很愚蠢,但是了解这些危险重要。即使您不是root用户,也可能在终端上造成很大的损失。我想您可能真的很在乎rm,但是既然您说“我们可以撤消在终端机中完成的操作”,我认为这是值得一提的。普遍的答案是不,你不能。


2

选项1:请参阅从ext2文件系统中删除Linux文件。本页指向LunetIX公司的Sebastian Hetze编写的程序,该程序(如标题所示)从ext2文件系统中删除最近删除的文件。用法示例:

# undelete -d /dev/hdc3 -a 10

警告:

  • 原来的网站不见了。上面的链接是Internet存档。
  • 该站点混合使用英语和德语。
  • 如上所述,该工具是专门为ext2文件系统设计的。它不可能在任何其他文件系统类型上工作;特别是ext N以外的其他语言。

选项2:我的计算机上运行着rsnapshot(rsync),这使选定文件夹的每小时快照一次。它每小时,每2小时或您告诉CRON要做的任何事情都会递增执行此操作。一整天后,它将这些快照回收为一个每日快照,并在每周7天后将其循环等等。这使我能够每小时返回约一个月左右的时间!磁盘空间非常好,因为它创建了指向从未更改的文件的符号链接。


为了明确起见,#1特定于ext2文件系统。它在ext3文件系统上不起作用。
nagul


1

对于ext2,存在取消删除的实用程序,但是大多数其他Linux文件系统都处于“石器时代”,没有任何高级可用性功能。考虑到巨大的驱动器具有足够的空间以至于再也不会删除文件,这令人沮丧。

因此,您会遇到三个选择:

  1. 定期进行备份,例如使用以下命令:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. git对所有工作使用版本控制工具。虽然这不能防止疯狂rm -r地杀死存储库,但可以防止常规麻烦,因为您将使用git rmnot raw rm

  3. 要格外小心和不信任太多rm -itrash-cli和朋友,大多数数据你将失去的外壳你不会失去偶然rm,而是由误导管道,输错了输出文件,误导mv之类的东西,即东西,将覆盖您的数据,而不仅仅是删除它。

为确保最大程度的安全,请全部执行三个操作。


称ext2为现代很有趣。与ext2 / 3相比,较新的文件系统使用更复杂的磁盘格式,并且不得不放弃易于查找的位置,您可能会在其中找到要删除的文件。它们是为备份他们关心的事情的人而设计的。顺便说一句,我通常使用mv和cp -i,因为我通常不想破坏任何东西。我通常键入\ rm,因为我也将rm别名为rm -i,但是我不想回答它的问题。
彼得·科德斯

0

检查这个...可能对您有所帮助http://artmees.github.io/rm/

假设你做了

rm very_important_file

从终端。恢复此文件是一个乏味且并不总是成功的过程

相反,如果您使用了上面提到的脚本。您不必为此担心,因为

rm very_important_file
mv very_important_file ~/.Trash/

是等效的。该脚本可以处理更多情况,并且根本不会改变您的系统rm,这是因为该脚本已放入用户本地bin文件夹中,因此它掩盖了系统rm,但不影响它或禁用它

这是一种完善的别名方法,但不会丢失任何功能


1
这将会是好的,如果你可以添加一些解释,这是什么一样,以及它如何适用的问题,也许增加一个例子,等等
slhck


0

对我来说(opensuse jump 42.2,NTFS笔式驱动器)PhotoRec-也由testdisk创作者使用-):)但是它还没有恢复文件名。

PhotoRec是文件数据恢复软件,旨在从硬盘,CD-ROM和数码相机内存中恢复丢失的文件,包括视频,文档和档案,以及丢失的图片(因此称为Photo Recovery名称)。PhotoRec会忽略文件系统并处理基础数据,因此即使媒体的文件系统已受到严重损坏或重新格式化,它也仍然可以工作。

我已经在openSUSE中使用标准存储库安装了它

指令


1
欢迎来到超级用户!请阅读“ 如何推荐软件”以获取最少的必需信息以及有关如何在“超级用户”上推荐软件的建议。为了使您的答案有用,即使提供的链接中断,这些详细信息也应编辑为您的答案。
我说恢复莫妮卡
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.