基本上,我正在尝试删除这些文件:
/var/lib/mysql/db/nomNomina2.*
当我用locate查找它们时,我得到以下输出:
/var/lib/mysql/db/nomNomina2.MYD
/var/lib/mysql/db/nomNomina2.MYI
/var/lib/mysql/db/nomNomina2.frm
但后来我尝试
$ rm -fv /var/lib/mysql/db/nomNomina2.frm
我没有得到任何输出,但使用locate 时文件仍然显示。
请注意,我可以在同一位置创建和删除具有相同文件名的文件,但在使用locate 时它仍然会显示,并且我将无法创建另一个具有相同名称的表。
有什么想法可能导致这种情况吗?文件系统混乱?如何纠正?
答案1
locate
是不可靠有关系统上存在哪些文件的实时、最新信息。信息缓存在数据库中。
还可以考虑一下著名的台词,链接为:
这不工作!我应该责怪缓存吗?
有关您的盒子上存在哪些文件/目录的实际当前信息现在, 使用ls
或find
或stat
或test -e filename && echo it is there
甚至printf %s\\n *
。差不多任何事物exceptlocate
将为您提供有关文件系统的最新信息。
另请参阅LESS=+/BUGS man locate
(在我的系统上)部分内容:
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
,它就达到了它的目的,你现在需要使用其他检查/验证/等的工具。您找到的文件。
答案2
locate 命令不搜索磁盘上的文件,而是搜索数据库中的文件路径。数据库是一个文件,其中包含有关文件及其在系统上的路径的信息。
因此,“locate”命令的一个限制是它对数据库的依赖性,该数据库可以由另一个实用程序“updatedb”更新。因此,为了从“locate”命令获得最新且可靠的结果,应定期更新其工作的数据库。
因此,删除文件后,您应该使用#find命令实时搜索文件来检查文件是否存在。 #find /var/lib/mysql/db/ -iname "nomNomina2.*"