昨晚我犯了一个错误,无意中删除了1800GB的文件服务器


27

我昨天在测试机上运行了此命令,但它是通过SSH连接的文件服务器。

sudo rm -rf /tmp/* !(lost+found)

我的终端模拟器是Konsole。我的系统是Debian 7。

题:

除了/ tmp中的文件,此命令是否删除了其他文件?


可能是未安装/ home文件系统?
伊曼纽尔

@Emmanuel我已经确认文件丢失。
somethingSomething

1
您的历史记录未显示任何删除错误。在执行“ kill $(lsof / usr ...)”时,您杀死了许多操作系统进程。文件系统共享守护进程可能已受到影响。您是否尝试过重新启动服务或重新启动文件管理器?
伊曼纽尔

1
@somethingSomething Konsole不是shell,它是KDE的默认终端仿真器。尝试在终端中键入一些字符,例如,dsgsadfsf然后按Enter。查看结果。如果是bash: dsgsadfsf: command not found,那么您的外壳是bash
Gabor Farkas 2014年

5
希望您备份良好。如果要尝试恢复,请停止使用该系统,直到能够制作驱动器的字节级副本进行实验。对有问题的文件系统的任何写入都会加剧损坏。
2014年

Answers:


43

bash中的正确语法如下:

rm /tmp/!(lost+found)

正如@goldilocks 在评论中所写,原始命令对查询进行了扩展(删除文件/tmp夹中的所有文件,然后继续,并删除当前工作文件夹中的所有文件(在您的情况下为home文件夹))。

您可以尝试检查是否可以恢复某些数据。这里有一个关于Linux数据恢复的问题


28
啊,所以它本质上是另一个著名的“摧毁了我所有的数据我的命令行中缺少空间”的情况下-就像在rm -rf / tmp^^
马丁·冯·Wittich

8
我不能足够强调,系统管理员的妄想并非没有原因。:)始终将您最有价值的数据备份在只能以root用户身份写入的位置。
Gabor Farkas 2014年

9
我宁愿备份到单独的硬盘或服务器,在正常情况下,这些硬盘或服务器甚至无法写成root用户。OP使用sudo,因此仅可写为root的普通文件夹不一定有用。
Martin von Wittich 2014年

好一点,我对OP没有足够的重视。服务器可能很昂贵,但是单独的磁盘就足够了。我使用了一个单独的分区,该分区默认情况下已卸载。简单又脏,但是有效。
Gabor Farkas 2014年

1
@simonzack通过安装它可以减少发生事故的机会,对我来说就足够了:)
Gabor Farkas 2014年

26

!(lost+found)你的rm命令很可能是致命的错误:

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

我不知道该怎么bash做,但是下面的命令显示了我的/tmp/所有内容以及当前目录的所有内容(当前是~):

echo /tmp/* !(lost+found)

!(folder)是命令我曾经跑,其中删除了所有的除外一部分folder
somethingSomething

3
听起来可能与zsh兼容。bash我不这么认为。我得到!lost+found: event not found!用于从历史记录中检索命令的命令。
wurtel

9
kes!“我不知道bash到底在做什么” ->它正在执行扩展。猜猜“除了这一切”是什么?cd /; echo !(lost+found)> _ <
goldilocks 2014年

13
请记住,!(foo)只有在extglob设置了选项的情况下,bash才能作为“除foo外的所有内容”使用。此外,OP没有指定他使用的是哪个shell,因此很难猜测rm !(lost+found)命令在他的情况下到底做了什么。
jimmij 2014年

5
很好的一句话,尽管OP表示他正在使用Debian 7,它bash是默认的shell。他很可能没有改变这一点。此外,在Debian 7中,该extglob选项true默认设置为(我刚刚检查过)。
Gabor Farkas 2014年
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.