我正在删除我的 CentOS 服务器上的一些文件,病毒扫描认为这些文件已被感染。
其中两个文件的路径中有“..”。我知道这通常..
是我们导航到父目录的方式。在这种情况下,两个点似乎是实际路径的一部分。
例如,如果文件的路径是:
/var/lib/mysql/mysql/..\bin\cna12.dll
Run Code Online (Sandbox Code Playgroud)
然后我可以 cd 到:
/var/lib/mysql/mysql/
Run Code Online (Sandbox Code Playgroud)
如果我然后键入 cd 并按两次 Tab,我将获得自动完成多个选项的选项。选项之一是:
..\bin\cna12.dll
Run Code Online (Sandbox Code Playgroud)
在这个粘贴的文本中看到它(在第一列中注意它):
..\bin\cna12.dll help_topic.frm slow_log.CSV
columns_priv.frm help_topic.MYD slow_log.frm
columns_priv.MYD help_topic.MYI tables_priv.frm
Run Code Online (Sandbox Code Playgroud)
通常我可以输入自动完成建议的几个字符,然后再次按 Tab 键以完成自动完成...但我似乎无法选择它来完成自动完成。
我所做的一切似乎都不起作用。包括将其放在引号中,例如:
cd "..\bin\"
Run Code Online (Sandbox Code Playgroud)
请注意,Linux 斜杠是这种方式,“/”,而上面引用的斜杠是 Windows 样式的“\”。
我如何 cd 到 bin 目录,以便我可以删除该 .dll 文件?
小智 9
我不相信那是一个实际的目录,我怀疑那只是一个带反斜杠的文件。尝试直接删除该文件,它应该被删除。
这将起作用: rm '..\lib\plugin\amd.dll'
我也不确定cd
CentOS 系统的智能程度,它可能只显示目录的自动完成选项。您必须在其中执行rmdir '..\lib\plugin\amd.dll'
(假设它是空的)。您可以通过ls -l
在/var/lib/mysql/mysql/
目录中运行并查看它是文件还是目录来确定这一点,然后相应地发出正确的命令。
在 Linux 系统上,反斜杠仅被视为文件名中的字符,而不是目录分隔符。因此,在目录上下文中使用它们时没有特别的区别。反斜杠通常用作特殊字符的转义字符。
有两个问题。您没有在自动完成之前说出您正在输入的内容,这会使问题复杂化,并且您的行为好像这是另一个目录中的文件,但事实并非如此 - 正如您所指出的,反斜杠不是 unix 中的路径分隔符,它们只是文件名中的字符。
至于第二个,停止尝试cd
。cd
无论您做什么,Shell 都不会将该文件名自动补全到,因为它不是目录。文件在.
,只是rm
它。
至于第一个,您不能只键入..
自动完成,因为这不是一个明确的匹配(目录也包含..
,因为它必须)。你不能只输入..\
自动完成,因为反斜杠是一个元字符,它会转义后面的字符,而 shell 不知道那是什么——它可以是任何东西,也可以什么都没有。但是,如果您键入
rm ..\\
Run Code Online (Sandbox Code Playgroud)
然后点击TAB
(假设这是 bash),那么文件名应该被正确填写。我刚刚尝试过,它对我有用(Fedora 22 下的 bash 4.3.42(1))。