银河麒麟高级服务器操作系统(通用)执行locate命令报错"locate: 无法执行 stat `/var/lib/mlocate/mlocate.db': 没有那个文件或目录"
一 问题现象
[root@localhost ~]# locate targetfile
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
二 系统环境
本文以银河麒麟高级服务器操作系统V10-SP2-X86版本做演示
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)
Kernel:
4.19.90-25.35.v2101.ky10.x86_64
Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-x86_64-Build09/20210524
#################################################
三 原因
1.locate命令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。
2.updatedb命令是由mlocate-updatedb.timer服务控制,默认未运行。服务开启状态下默认每天更新一次。因此,如果系统中文件有新的变动,使用locate命令可能无法立即查询到最新的文件信息。为了避免这种情况,第一次使用locate命令之前,必须使用updatedb指令来创建或更新locate数据库,以确保查询结果的准确性。这样做可以确保locate命令能够利用最新的文件信息数据库进行查询,从而提高查询效率和准确性。
四 解决方法
4.1 执行updatedb,生成mlocate.db文件
[root@localhost ~]# updatedb
[root@localhost ~]#
[root@localhost ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 9177837 7月 22 17:00 /var/lib/mlocate/mlocate.db
4.2 开启mlocate-updatedb.timer服务,确保每天更新一次mlocate.db文件
[root@localhost ~]# systemctl enable mlocate-updatedb.timer --now
Created symlink /etc/systemd/system/timers.target.wants/mlocate-updatedb.timer → /usr/lib/systemd/system/mlocate-updatedb.timer.
[root@localhost ~]#
[root@localhost ~]# systemctl status mlocate-updatedb.timer
● mlocate-updatedb.timer - Updates mlocate database every day
Loaded: loaded (/usr/lib/systemd/system/mlocate-updatedb.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Mon 2024-07-22 17:02:08 CST; 11s ago
Trigger: Tue 2024-07-23 00:00:00 CST; 6h left
7月 22 17:02:08 localhost systemd[1]: Started Updates mlocate database every day.
五 验证
[root@localhost ~]# locate targetfile
/root/targetfile