Linux文件查找命令之locate

文章
林里克斯

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。


一、locate介绍


1.介绍

locate 命令用来查找文件或目录。 locate 命令要比 find -name 快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,有个弊端就是刚创建的或更新数据库后创建的文件不能立刻搜索到,因为不是实时查询,需要更新下数据库才能查询。

locate命令的工作特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的文件是全路径,不仅仅是文件名
  • 可能之搜索用户具备读取和执行权限的目录

2.语法

locate [-d ][--help][--version][范本样式...]

3.参数

$ locate --help
Usage: locate [OPTION]... [PATTERN]...
Search for entries in a mlocate database.

-A, --all              #只显示匹配到的所有模式条目
-b, --basename         
-c, --count            #只匹配路径名的基名称
-d, --database DBPATH  #使用指定路径数据库,而不是默认路径 /var/lib/mlocate/mlocate.db
-e, --existing         
-L, --follow           #只打印当前现有文件的条目
-h, --help             #打印帮助信息
-i, --ignore-case      #匹配模式时忽略大小写区分
-l, --limit, -n LIMIT  #限制输出(或计数)以限制条目
-m, --mmap             #为向后兼容而忽略
-P, --nofollow, -H     #在检查文件是否存在时,不跟随后面的符号链接
-0, --null             #输出带有NUL的单独条目
-S, --statistics       #不搜索条目,打印每个已用数据库的统计信息
-q, --quiet            #报告有关读取数据库的无错误消息
-r, --regexp REGEXP    #使用基本正则表达式
    --regex            #使用扩展正则表达式
-s, --stdio            #为向后兼容而忽略
-V, --version          #打印版本信息
-w, --wholename        #匹配整个路径名(默认)

4.locate 相关命令和文件

/usr/bin/updatedb            #主要用来更新数据库,通过crontab自动完成的
/usr/bin/locate              #查询主命令
/etc/updatedb.conf           #updatedb的配置文件
/var/lib/mlocate/mlocate.db  #存放文件信息的文件(数据库)

二、安装使用


1.安装

$ yum -y install mlocate

2.实际使用

$ locate file.txt

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
#报错信息

3.更新数据库解决安装后第一次查询报错

$ updatedb
$ locate file.txt
/root/file.txt

4.updatedb.conf 介绍

$ cat /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"
#排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索。updatedb之后使用locate仍然找不到想要文件,可以检查挂载的目录是否被忽略了

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

675 0 2020-07-27


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-04-19

今日天气
站点统计
  • 文章总数:240篇
  • 分类总数:29个
  • 评论总数:10条
  • 本站总访问量 213947 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!