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

som*_*ing 27 filesystems rm tmp files

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

sudo rm -rf /tmp/* !(lost+found)
Run Code Online (Sandbox Code Playgroud)

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

题:

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

Gab*_*kas 43

bash 中的正确语法如下:

rm /tmp/!(lost+found)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 啊,所以它本质上是另一个著名的“我的命令行中丢失的空间破坏了我的所有数据”的另一个案例 - 就像在`rm -rf / tmp` ^^ (29认同)
  • 我宁愿备份到一个单独的硬盘或服务器,在正常情况下,它甚至不能被 root 写入。OP 使用了 `sudo`,所以一个只能被 root 写入的普通文件夹不一定有帮助。 (9认同)
  • 我再怎么强调也不为过,系统管理员的偏执并非无缘无故。:) 始终将最有价值的数据备份在只能以 root 用户身份写入的地方。 (8认同)

Mar*_*ich 26

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

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)
Run Code Online (Sandbox Code Playgroud)

我不知道这到底bash是做什么的,但是下面的这个命令打印了我的/tmp/所有内容以及我当前目录(当前是~)中的所有内容:

echo /tmp/* !(lost+found)
Run Code Online (Sandbox Code Playgroud)

  • 请记住,只有在设置了 `extglob` 选项时,`!(foo)` 在 bash 中才作为“除 foo 之外的所有”工作。此外,OP 没有指定他使用的是哪个 shell,所以很难猜测 `rm !(lost+found)` 命令在他的情况下到底做了什么。 (13认同)
  • 哎呀!*“我不知道 bash 到底在做什么”* -> 它正在执行扩展。猜猜“除此之外的一切”是什么?`cd /; 回声!(丢失+找到)` >_< (9认同)
  • 很棒的评论,尽管 OP 表示他使用的是 Debian 7,它以“bash”作为默认 shell。他很可能没有改变这一点。此外,在 Debian 7 中,`extglob` 选项默认设置为 `true`(我刚刚检查过)。 (5认同)
  • 这听起来可能适用于 zsh;bash 我不这么认为。我得到“!lost+found: event not found”,因为“!”用于从历史记录中检索命令。 (3认同)