所以基本上,我正在尝试删除文件:
/var/lib/mysql/db/nomNomina2.*
Run Code Online (Sandbox Code Playgroud)
当我使用 locate 查找它们时,我得到以下输出:
/var/lib/mysql/db/nomNomina2.MYD
/var/lib/mysql/db/nomNomina2.MYI
/var/lib/mysql/db/nomNomina2.frm
Run Code Online (Sandbox Code Playgroud)
但后来我尝试
$ rm -fv /var/lib/mysql/db/nomNomina2.frm
Run Code Online (Sandbox Code Playgroud)
我没有得到任何输出,但使用 locate 时文件仍然显示。
请注意,我可以在同一位置创建和删除具有相同文件名的文件,但是在使用 locate 时它仍然会显示,并且我将无法创建另一个具有相同名称的表。
任何想法可能导致这种情况?文件系统混乱?如何纠正?
locate
是不可靠的什么文件都存在你的系统上现场,最新信息。信息缓存在数据库中。
还可以考虑著名的线路,带有链接:
它不工作!我应该责怪缓存吗?
对于上的哪些文件实际电流信息/目录在你的盒子存在,现在,使用ls
或find
或stat
或test -e filename && echo it is there
或甚printf %s\\n *
。除了会为您提供有关文件系统的最新信息之外,几乎所有locate
内容。
另请参阅LESS=+/BUGS man locate
哪个(在我的系统上)部分读取:
Run Code Online (Sandbox Code Playgroud)BUGS The locate program may fail to list some files that are present, or may list files that have been removed from the system. This is because locate only reports files that are present in the database...
您可以运行updatedb
,但老实说,如果您确切地知道文件在哪里并且您正在使用它locate
来查找它们……那您只是做错了。 locate
告诉你一条路。它不会告诉您该路径上文件是否存在。如果您已经知道文件的路径,则不需要locate
,对吗?
locate的目的是“快速查找文件名”,不一定准确或可靠。
注意:我不是说“不要使用” locate
。当您不知道某个文件可能位于系统上的哪个位置时,它确实有其目的。但是一旦你从 中获得路径名locate
,它就达到了它的目的,你现在需要使用其他工具来检查/验证/等。你找到的文件。