无法删除文件,但可以删除父目录

无法删除文件,但可以删除父目录

基本上,我正在尝试删除这些文件:

/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不可靠有关系统上存在哪些文件的实时、最新信息。信息缓存在数据库中。

还可以考虑一下著名的台词,链接为:

这不工作!我应该责怪缓存吗?

有关您的盒子上存在哪些文件/目录的实际当前信息现在, 使用lsfindstattest -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.*"

相关内容