我只是rm -rf /*不小心跑了,但我的意思是rm -rf ./*(注意斜线后面的星星)。
alias rm='rm -i'并且--preserve-root在默认情况下不救我,那么,有没有这方面的任何自动进行保护?
我不是 root 并立即取消了该命令,但在某处或某处有一些宽松的权限,因为我注意到我的 Bash 提示已经坏了。我不想依赖权限而不是 root(我可能会犯同样的错误sudo),而且我不想因为系统中某处丢失一个文件而寻找神秘的错误,所以,备份和sudo是好的,但我想要更好的东西来处理这个特定的情况。
关于三思而后行。我实际上正在使用它!但我用它来解决一些涉及 10 种不同事物的复杂编程任务。我深深地沉浸在这个任务中,没有任何脑力来检查标志和路径,我什至不考虑命令和参数,我认为像“空当前目录”这样的动作,我大脑的不同部分将它们转换为命令,有时会出错。我希望计算机纠正它们,至少是危险的。
背景:物理服务器,大约两年,7200-RPM SATA 驱动器连接到 3Ware RAID 卡,ext3 FS 挂载 noatime 和 data=ordered,不在疯狂负载下,内核 2.6.18-92.1.22.el5,正常运行时间 545 天. 目录不包含任何子目录,只有数百万个小(~100 字节)文件,还有一些更大的(几 KB)文件。
我们有一台服务器在过去几个月中出现了一些问题,但我们直到前几天才注意到它,因为它开始无法写入目录,因为它包含太多文件。具体来说,它开始在 /var/log/messages 中抛出这个错误:
ext3_dx_add_entry: Directory index full!
Run Code Online (Sandbox Code Playgroud)
有问题的磁盘有大量剩余的 inode:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 60719104 3465660 57253444 6% /
Run Code Online (Sandbox Code Playgroud)
所以我猜这意味着我们达到了目录文件本身可以有多少条目的限制。不知道会有多少文件,但正如您所见,不能超过三百万左右。不是那么好,请注意!但这是我的问题之一:上限到底是多少?是可调的吗?在我被骂之前——我想把它调低;这个庞大的目录导致了各种各样的问题。
无论如何,我们在生成所有这些文件的代码中找到了问题,我们已经更正了它。现在我坚持删除目录。
这里有几个选项:
rm -rf (dir)
我先试过这个。在它运行了一天半没有任何明显影响后,我放弃并杀死了它。
while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; …为了查看压缩整个系统的大致速度,然后在系统被 foobar 删除时恢复该系统,我将我们的一个主要系统部分克隆到工作站上,虽然它不是我们公司系统的组成部分,但很适合有运作。我定时创建整个系统的 tarball,并检查它以确保它看起来不错。
我接着跑rm -rf / --no-preserve-root。我以前从来没有机会这样做,所以很有趣。首先。
当我重新启动盒子时,没有任何显示。不是“戴尔”标志,不是 BIOS 选项,什么都没有。
我将驱动器连接到一个不同的盒子,并发现它有一个 UEFI 分区,这让我很懊恼。我假设我的死亡命令有效地控制了那个分区。
我将一个不同的、功能正常的驱动器连接到现已解散的工作站,但工作站仍然什么都不做。
有没有人看到过这样的东西,或者对寻找什么有建议?运行这个rm命令是如何把整个盒子搞得这么乱的?
更新:我们将包装盒退回给戴尔。我们无法准确诊断这是巧合还是dronus 描述的情况。但是,我会接受 dronus 的回答,因为它描述了发生这种情况的可能原因。此外,它将警告其他人不要在未来做同样的事情。如果有人发现戴尔使用有缺陷的 UEFI 的一些记录,那会很有帮助。
我使用默认选项安装了 ext3 文件系统。在它上面我有一些 ~ 100GB 的文件。
删除任何此类文件需要很长时间(8 分钟)并会导致大量 io 流量,从而增加服务器负载。
有什么方法可以使 rm 不那么具有破坏性?
我正在尝试删除 /var/www/html 但我收到此错误:
rm: cannot remove `html': Device or resource busy
Run Code Online (Sandbox Code Playgroud) 这是基于这里的这个恶作剧问题。所描述的问题是有一个 bash 脚本,其中包含以下内容:
rm -rf {pattern1}/{pattern2}
Run Code Online (Sandbox Code Playgroud)
...如果两种模式都包含一个或多个空元素rm -rf /,则假设原始命令被正确转录并且 OP 正在进行大括号扩展而不是参数扩展,则将扩展为至少一个实例。
命令 [...] 是无害的,但似乎几乎没有人注意到。
Ansible 工具可以防止这些错误,[...] 但是 [...] 似乎没有人知道这一点,否则他们就会知道我所描述的不会发生。
因此,假设您有一个rm -rf /通过大括号扩展或参数扩展发出命令的 shell 脚本,使用Ansible是否会阻止该命令被执行,如果是这样,它是如何做到的?
rm -rf /只要您使用 Ansible 来执行,以 root 权限执行是否真的“无害”?
我有一个巨大的日志文件,需要在生产 Web 服务器上删除。如果我在 Linux 上运行它,我担心它会使系统陷入困境。有什么绝妙的想法吗?
更新:
文件系统:ext3
分区:/var(主要是日志和 MySQL 数据)
不再写入日志文件。(没有附加其他数据)
Web 服务器是 LAMP(大量 IO)
众所周知,env.variable 中的额外空间会导致 bash 脚本中的 / 目录被删除。
#!/bin/bash
...
rm -rf /$MYPATH
Run Code Online (Sandbox Code Playgroud)
如果 $MYPATH 包含像"dir"或"dir /"这样的值,它将导致"rm -rf / dir"或"rm -rf dir /"。并会导致“rm -rf /”
是否有任何最佳做法可以防止这种情况?
我们有一个非常大(多 GB)的 Nginx 缓存目录用于繁忙的站点,我们偶尔需要一次清除所有目录。我过去解决了这个问题,方法是将缓存文件夹移动到新路径,在旧路径上创建一个新的缓存文件夹,然后rm -rfing 旧的缓存文件夹。
然而,最近,当我在忙碌的早晨需要清除缓存时,来自的 I/Orm -rf使我的服务器进程无法访问磁盘,因为 Nginx 及其面向的服务器都是读取密集型的。当 CPU 处于空闲状态并rm -rf占用iotop.
我ionice -c 3在调用 时尝试过rm,但它似乎对观察到的行为没有明显影响。
有没有办法驯服rm -rf更多地共享磁盘?我是否需要使用不同的技术来获取线索ionice?
更新:
有问题的文件系统是 AWS EC2 实例存储(主磁盘是 EBS)。该/etc/fstab条目如下所示:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Run Code Online (Sandbox Code Playgroud)