我正在编写一个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.