我有个习惯,rm -rf *
每次在睡眠模式时都会打字。似乎我的潜意识希望我在一天结束时删除所有我编写的代码。
有没有办法rm -rf *
在 Linux 的 C-shell 或 bash-shell 中阻止这个特定命令()?
或者,有没有一种方法可以在我的 shell 输入进入 shell 进行进一步处理之前为其设置一个命令过滤器?
答案1
查看安全保证这是一个包装器,rm
它允许你设置一个列表重要的不会被意外删除的目录。
这不会阻止您意外删除列出的目录之外的文件,但当您的潜意识决定加大赌注并执行时,它可以防止发生灾难rm -rf /
。
除此之外,防止意外删除的规范方法是使用alias rm="rm -i"
其他几个答案中提到的方法。
极端情况下采取极端措施……
如果你的潜意识听起来很恶意,它仍然可以通过使用/bin/rm
跳过别名来绕过这一点。为了防止这种情况,请-i
在你经常工作的目录中创建一个名为的文件:
[me@home]$ touch -- -i
[me@home]$ ls
-i file1.txt file2.txt
当 evil-you 执行时/bin/rm -rf *
,通配符会扩展为以 开头的文件列表-i
,并且将被视为一个选项/bin/rm
:
[me@home]$ /bin/rm -rf *
/bin/rm: remove regular empty file `file1.txt'?
(当你的潜意识没有注意的时候,将鼠标悬停在以下块上……)
现在让我们希望你的潜意识没有意识到这个
--
选择......
答案2
您应该能够使用 alias 命令执行此操作。这与 eg 转换rm
为 的操作相同rm -i
,以防止您在未先确认的情况下删除内容。
答案3
其他人都建议将别名改为rm
。rm -i
这通常是一个很好的解决方案。问题是,它在你的例子中不起作用。你总是-rf
在 之后使用rm
。你的命令将变成rm -i -rf *
,并且由于 -f 在 -i 之后,它将覆盖 -i。
-rf
您可以编写一个包装器,在执行之前检查并提示您rm
。
答案4
设置一个别名来rm
执行你的自定义脚本。它可以检查命令参数(-rf *
)并打印一个令人讨厌的提示“你确定要翻转吗!?”否则它会默默地将其传递给/usr/bin/rm
或诸如此类。