【Linux】文件查找locate



前言

locate命令主要用于查找文件或目录,来源于mlocate包。


一、locate

locate查找文件或目录,不是去搜索具体的目录,而是去检索一个/var/lib/mlocate/mlocate.db数据库文件。该文件包含本地所有文件信息,系统每天会自动更新该数据库文件一次。
安装:

yum install -y mlocate

整个locate由四部分组成:

  • /usr/bin/updatedb 更新数据库,每日自动由crontab完成,亦可手动触发更新
  • /usr/bin/locate 命令执行文件,查询文件位置
  • /etc/updatedb.conf updatedb的配置文件
  • /var/lib/mlocate/mlocate.db 存放文件信息的数据库文件

locate使用:

[root@localhost ~]# locate --help
Usage: locate [OPTION]... [PATTERN]...
Search for entries in a mlocate database.

  -A, --all              only print entries that match all patterns
  -b, --basename         match only the base name of path names
  -c, --count            only print number of found entries
  -d, --database DBPATH  use DBPATH instead of default database (which is
                         /var/lib/mlocate/mlocate.db)
  -e, --existing         only print entries for currently existing files
  -L, --follow           follow trailing symbolic links when checking file
                         existence (default)
  -h, --help             print this help
  -i, --ignore-case      ignore case distinctions when matching patterns
  -l, --limit, -n LIMIT  limit output (or counting) to LIMIT entries
  -m, --mmap             ignored, for backward compatibility
  -P, --nofollow, -H     don't follow trailing symbolic links when checking file
                         existence
  -0, --null             separate entries with NUL on output
  -S, --statistics       don't search for entries, print statistics about each
                         used database
  -q, --quiet            report no error messages about reading databases
  -r, --regexp REGEXP    search for basic regexp REGEXP instead of patterns
      --regex            patterns are extended regexps
  -s, --stdio            ignored, for backward compatibility
  -V, --version          print version information
  -w, --wholename        match whole path name (default)
[root@localhost ~]# updatedb
[root@localhost ~]# locate 新建文本文档.txt
/root/新建文本文档.txt
[root@localhost ~]#

二、updatedb

系统每日会更新一次mlocate.db文件,其更新操作由crond+updatedb组合完成:

[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查找文件时,会找到已经被删除的文件(不久前删除),或者是刚刚创建的文件未找到,这是因为数据库文件尚未被系统更新,此时该文件中就还保留有已删除的文件信息或尚未包含新建的文件信息。那么就需要手动去更新数据库。

[root@localhost ~]# locate ana    # 搜索名称或路径中包含“ana”的文件
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
# 更新或创建数据库文件
[root@localhost ~]# updatedb      # 更新索引

# 数据库文件更新完毕,进行查找文件,即可定位文件所在路径
[root@localhost ~]# locate ana
/etc/NetworkManager
/etc/anacrontab
/etc/NetworkManager/NetworkManager.conf
/etc/NetworkManager/conf.d
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dnsmasq-shared.d

三、updatedb.conf

有时我们需要调整updatedb的一些策略,比如mlocate.db数据库文件过大,此时就需要在配置文件中配置忽略掉一些文件或目录,以减小db文件。

[root@localhost ~]# vi /etc/updatedb.conf 
PRUNE_BIND_MOUNTS = "yes"  # 是否进行限制搜索
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"  # 排除检索的文件系统类型
PRUNENAMES = ".git .hg .svn"   # 排除检索特定后缀的文件
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph" # 排除检索特定路径下的目录及文件
~

可以在PRUNEPATHS 添加上需要排除检索的路径,以达到减小数据库文件大小的目的。
之后手动更新一次updatedb即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值