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