解释rm ./-rf"技巧"

Chr*_*per 6 unix bash command-line rm

这个问题说明:

令人惊讶的是,有多少用户不了解这些rm ./-rfrm -- -rf技巧.

我不敢尝试这些,但对他们的所作所为感到好奇.它们也很难搜索......

有人可以开导我吗?

Don*_*van 7

rm ./-rf和/或rm -- -rf尝试删除一个名为的文件,具体来说,-rf

这里唯一的技巧是您通常无法删除以" - "开头的文件,因为该命令将假定它是一个命令参数.通过在文件前面加上完整路径,或使用--选项(这意味着,结束所有选项),命令将不再认为它是一个参数.

应该注意的是--,这个技巧的版本可能也可能不适用于所有shell命令,因此最好使用第一个版本.


Jon*_*ler 7

如果您-rf的目录中有一个文件,如果您不知道该技巧,则很难删除该文件.那是因为:

rm -rf
Run Code Online (Sandbox Code Playgroud)

提供两个命令行选项(-r-f)作为单个参数,并告诉rm递归和强制删除的东西.

如果你写:

rm ./-rf
Run Code Online (Sandbox Code Playgroud)

参数不再以短划线开头,因此它只是一个文件名.类似地,通过常见(但不是通用)约定,--标记选项参数的结尾,之后的任何内容都不再是一个选项(通常意味着它是文件名).所以:

rm -- -rf
Run Code Online (Sandbox Code Playgroud)

删除文件,因为rm知道后面的参数--是文件名,而不是它要处理的选项.

-rf如果使用通配符,该文件甚至更危险:

rm *rf*
Run Code Online (Sandbox Code Playgroud)

突然,这将删除目录和文件(但不会损害文件-rf).

  • 哇,`rm*rf*`做*不*做我的预期.通配符作为选项!那太吓人了! (2认同)