命令“sudo rm \\”挂起 - 希望确保不会对系统造成损坏

命令“sudo rm \\”挂起 - 希望确保不会对系统造成损坏

我试图弄清楚发生了什么事。大约一个小时前,我正在使用 sudo 编辑 /root 中的一个文件,但是当我保存并退出时,我不小心按下了反斜杠键,结果在我自己的主目录中出现了一个名为“\”的文件,该文件由 root 拥有,具有 640 权限。知道我无法使用给定的名称删除该文件,我尝试用另一个反斜杠转义反斜杠来删除它sudo rm \\,但这似乎导致系统挂起,此时我惊慌失措并首先尝试了Control-C(当然不起作用),然后Control-Z(按几次组合键后)返回了我的提示。

当我发出原始命令时,确保我位于主目录中后,我决定查找该进程,果然它仍然在列表中,只是暂停了。我必须发出 akill -9才能最终摆脱它,但我只是想确保它不会在系统上的其他任何地方删除文件。我想不出该命令挂起的另一个原因。

答案1

我假设用户尝试执行sudo rm \.


输入任何命令,然后\Enter都不会执行任何操作。

它不会做任何事情,因为你刚刚转义了换行符。您可能会收到一个类似于 的新提示>,对吧?这是辅助提示符 ( $PS2),当 shell 需要更多数据来完成当前命令时,它会使用它。

如果您不小心(或故意)没有关闭报价,您将会得到它,如

$ echo 'hello
>

从那里继续:

$ echo 'hello
> world'
hello
world

通过在行\尾键入,您可以引入一个续行:

$ ls -l \
>

从那里我们可以继续上一行:

$ ls -l \
> /usr \
> /bin

当您稍后按下换行符时,Enter换行符将转换为空格并执行命令(就像您ls -l /usr /bin在本例中键入的一样)。

所以,结论是:你输入了

$ sudo rm \

然后你按了回车键。这意味着 shell 还没有执行该命令,因为它仍在等待您结束该命令。此时只需按Ctrl+C取消命令即可。

下一个问题是:如何删除名为 的文件\? (由 root 拥有)

像这样:

$ sudo rm \\

或者像这样:

$ sudo rm '\'

答案2

该答案解决了标题中以及问题的预渲染文本中关于 running 的问题sudo rm \\。根据您在 Unix.SE 上实际输入的内容,这似乎就是您运行的内容。但是,根据您观察到的行为,您可能没有实际运行该命令,甚至任何命令,正如库萨拉南达所解释的。所以我建议您也阅读该答案。不管怎样,我认为这两个答案都应该有助于减轻您(也许还有其他读者)对您可能删除了其他文件的担忧。毕竟,部分担忧是不知道到底运行了什么。

我只是想确保它不会在系统上的其他任何地方删除文件

除非你通过了-r-R或 的--recursive选项,rm它不会尝试为您指定的每个文件名操作数删除多个文件。rm \\在 shell 中运行\作为文件名操作数传递。

有时您可能会传递一些看起来像单个操作数的东西,但它会扩展为多个操作数。例如,如果您使用*或 等通配字符,则可能会发生这种情况?。这不是您需要担心的事情\\

有时文件名以 和 开头-,可以解释为选项,这就是为什么某些命令(包括rm)支持一个--选项来指示结束选项。但在本例中这也不是问题。\开头为\, 不-

这是可能的——尽管不太可能,而且也是一个非常糟糕的主意--这rm可能是一个别名或 shell 函数,它将递归操作的选项传递给而/bin/rm不仅仅是运行/bin/rm。如果你这样做了,你可能就会知道。你可能还没有这样做过。不过你可以检查一下。在大多数 Bourne 风格的 shell 中,包括您可能在 RHEL 上使用的 Bash(此外,您标记了),你可以运行:

type rm

这很可能会显示以下之一:

rm is /bin/rm
rm is hashed (/bin/rm)

它还可能显示rm是一个别名,将-i-I 之 类的选项传递给rm。不过,只要它没有通过-r-R--recursive,它就不会尝试删除除您告诉它删除的文件之外的多个文件。

rmGNU/Linux 系统中提供的版本,包括 Red Hat Enterprise Linux(您标记为) 是 GNU Coreutils 中的一个。您可以在此处阅读 Coreutilsrm文档。某些发行版应用下游补丁,但此类补丁不应更改基本操作rm或添加新方法以意外递归地删除文件。在不同的类 Unix 操作系统中,其行为rm基本相同,即使您没有说明您正在运行什么操作系统,上述内容也应该适用。

答案3

要删除“棘手”的文件名,请在其前面添加以下前缀./

sudo rm ./\\

/如果预告片在您的根目录中添加了一个有趣的文件(例如名为的文件),也可以使用此方法-rf *

cd /
sudo rm ./-rf\ \*

如果没有,./您的所有文件都会消失。

相关内容