locate:快速定位文件路径

xiaohai 2021-05-07 23:04:53 3373人围观 标签: Linux 
简介Linux系统里面有一个名为mlocate.db的数据库文件,这个文件系统包含系统文件的文件名及对应的路径信息。locate命令查找文件时就不用遍历磁盘,而是直接查找mlocate.db文件,这样可以快速定位。但是会有一个问题,如果新添加的文件,那么mlocate.db文件就没有记录,因此使用locate命令时可以先用updatedb命令更新一下mlocate.db数据库文件。当然,mlocate.db还会由系统自带的定时任务执行updatedb命令来定时更新。
说明

  Linux系统里面有一个名为mlocate.db的数据库文件,这个文件系统包含系统文件的文件名及对应的路径信息。locate命令查找文件时就不用遍历磁盘,而是直接查找mlocate.db文件,这样可以快速定位。但是会有一个问题,如果新添加的文件,那么mlocate.db文件就没有记录,因此使用locate命令时可以先用updatedb命令更新一下mlocate.db数据库文件。当然,mlocate.db还会由系统自带的定时任务执行updatedb命令来定时更新。
  mlocate.db文件在/var/lib/mlocate/mlocate.db,如果没有估计是没有安装,所以执行:yum install mlocate安装

#mlocal.db所在位置
[root@localhost ~]# ll -h /var/lib/mlocate/mlocate.db 
-rw-r-----. 1 root slocate 2.0M May 26 10:21 /var/lib/mlocate/mlocate.db

#定时任务所在文件
[root@localhost ~]# cat /etc/cron.daily/mlocate 
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' < /proc/filesystems)

renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
格式

  locate [option] [filename]

常用参数
-c:不显示匹配的内容,只显示匹配的行数
-r:支持基本的正则表达式
-i:匹配是忽略大小写
--regex:支持扩展正则表达式
示例

1、查找文件路径

[root@localhost ~]# locate  pwd
/apps/go1.10.1/src/syscall/pwd_plan9.go
/apps/gowork/src/github.com/golang/sys/plan9/pwd_go15_plan9.go
/apps/gowork/src/github.com/golang/sys/plan9/pwd_plan9.go
/etc/.pwd.lock
/usr/bin/pwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/modules/3.10.0-123.9.3.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko
/usr/lib64/cracklib_dict.pwd
/usr/lib64/python2.7/lib-dynload/spwdmodule.so
/usr/sbin/unix_chkpwd
/usr/share/cracklib/cracklib-small.pwd
/usr/share/cracklib/pw_dict.pwd
/usr/share/man/man1/pwd.1.gz
/usr/share/man/man1/pwdx.1.gz
/usr/share/man/man8/unix_chkpwd.8.gz
/usr/share/man/mann/pwd.n.gz

2、查找匹配的行

[root@localhost ~]# locate -c pwd
17

3、使用通配符查找文件路径

[root@localhost ~]# locate /usr/bin/pwd
/usr/bin/pwd
/usr/bin/pwdx

[root@localhost ~]# locate /etc/sh*
/etc/shadow
/etc/shadow-
/etc/shells

4、新建文件测试

[root@localhost ~]# touch xiao.txt
[root@localhost ~]# locate /root/xiao.txt  #没有在里面,所以需要使用到下一节里面的updatedb
[root@localhost ~]# updatedb 
[root@localhost ~]# locate /root/xiao.txt 
/root/xiao.txt