Linux 的定位命令返回已删除文件的路径



我正在编写一个bash shell脚本,它使用以下命令删除一个文件

rm abc.xsl

我处理了获得提示并提供所需的'y'或'n'输入的情况。

为了验证文件是否已被删除,我以以下方式运行locate命令来验证

locate */abc.xsl

注意:所需的文件存在于特定的目录中,所以在我的例子中,这个特定的命令不会给我任何其他文件的地址

我注意到,尽管文件已被删除,但locate命令仍然反映被删除文件的路径。

我通过手动执行每个所需的命令来调试这个问题

马其顿

admin@sharad-server$ pwd
/usr/local/myserver/myapplication/lib
admin@sharad-server$ rm abc.xsl
rm: remove write-protected regular file 'abc.xsl'? y
admin@sharad-server$ locate */abc.xsl
/usr/local/myserver/myapplication/lib/abc.xsl

文件被删除了,因为当我执行ls命令和cat命令时没有反映出来,如下所示

admin@sharad-server$ cat /usr/local/myserver/myapplication/lib/abc.xsl
cat: /usr/local/myserver/myapplication/lib/abc.xsl: No such file or directory

FYR我的应用程序部署在GCP上,我的服务器的平台详细信息如下:

admin@sharad-server$ uname -a
Linux sharad-server 3.10.0-1127.8.2.el7.x86_64 #1 SMP Tue May 12 16:57:42 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

以独立方式执行所有这些命令的shell的详细信息如下:

admin@sharad-server$ ps -p $$
PID TTY          TIME CMD
32296 pts/0    00:00:00 bash

为什么locate命令仍然反映已删除文件的路径?

更新:

根据其中一个建议,我也尝试了updatedb命令,但它给了我一个错误。

admin@sharad-server$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

最终更新:

updatedb命令与root用户一起工作,并成功地更新了locate命令的功能。

出于性能原因,Locate使用存储所有文件树结构的索引来查找…该文件需要使用updatedb #root permision needed命令更新。如果您想找到执行"实时分析"的文件或目录;您需要使用find.