我正在删除 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 文件?
答案1
我不相信那是一个实际的目录,我怀疑那只是一个带有反斜杠的文件。尝试直接删除该文件,它应该会被删除。
这将起作用:rm '..\lib\plugin\amd.dll'
我也不确定cd
CentOS 系统上的智能程度,它可能只显示目录的自动完成选项。您必须在其中执行此操作(假设它是空的)。您可以通过在目录中rmdir '..\lib\plugin\amd.dll'
运行并查看它是文件还是目录来确定这一点,然后相应地发出正确的命令。ls -l
/var/lib/mysql/mysql/
在 Linux 系统上,反斜杠仅被视为文件名中的字符,而不是目录分隔符。因此,在目录上下文中使用它们时没有特殊区别。反斜杠通常用作特殊字符的转义字符。
答案2
有两个问题。您没有在自动完成之前说明您正在输入的内容,这使事情变得复杂,并且您的行为就像那是另一个目录中的文件一样,但事实并非如此 - 反斜杠不是 unix 中的路径分隔符,正如您所指出的,它们只是文件名中的字符。
至于第二个,不要再尝试了cd
。不管你怎么做,Shell 都不会自动将文件名补全为cd
,因为它不是目录。文件在.
,就是rm
它。
对于第一个问题,你不能只需键入..
即可自动完成,因为这不是明确的匹配(目录还包含..
,因为它必须包含)。您不能只键入..\
即可自动完成,因为反斜杠是一个转义其后跟的元字符,而 shell 不知道那是什么 - 它可能是任何东西,也可能什么也不是。但是,如果您键入
rm ..\\
然后点击TAB
(假设这是 bash),文件名应该会正确填写。我刚刚试过了,它对我有用(Fedora 22 下的 bash 4.3.42(1))。
答案3
它是一个符号链接(Symbolic Link)。
如果运行命令:ls -l amd.dll
你会看到类似这样的内容:
lrwxrwxrwx 1 root root 14 2013 年 9 月 22 日 amd.dll -> ..\lib\plugin\amd.dll
这意味着实际文件位于此处:
/var/lib/mysql/lib/插件/amd.dll
答案4
如果它确实是一个目录,请尝试发出cd '..\lib\plugin\amd.dll'
(请注意单引号,而不是双引号)
如果它是一个文件,则使用rm '..\lib\plugin\amd.dll'
(再次注意单引号)