Linux系统locate命令的使用方法是什么

来源:互联网转载和整理 2024-05-15 12:38:50

locate用法

小编今天带大家了解Linux系统locate命令的使用方法是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Linux系统locate命令的使用方法是什么”的知识吧。

1.1 简述

locate命令用于查找文件或目录。locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。因此,我们在用whereis 和 locate查找文件时,有时会找到已经被删除的数据;或者刚刚建立的文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。整个locate工作其实是由4部分组成的:

  • /usr/bin/updatedb: 主要用来更新数据库,通过crontab自动完成的

  • /usr/bin/locate: 查询文件位置

  • /etc/updatedb.conf: updatedb的配置文件

  • /var/lib/mlocate/mlocate.db: 存放文件信息的文件

locate会读取由updatedb准备好的一个或多个数据库,然后将满足匹配PATTERN的文件写到标准输出,每行一个文件名。假如并未指定--regex选项,则PATTERN可以包含通配符。假如PATTERN中并未包含任何通配符,则locate命令以*PATTERN*模式进行查找。

默认情况下,locate命令并不会检查数据库中的文件是否仍然存在,也不会报告在上一次更新数据库之后产生的文件。

1.2 用法

locate[OPTION]...[PATTERN]...

1.3 选项

-A,--all打印所有匹配PATTERNs的文件-b,--basename只名称与PATTERNs匹配的文件(例如/test/test.txt,则basename为test.txt)-c,--count只打印匹配到的文件数目,而不是文件名本身-d,--databaseDBPATH用DBPATH来代替默认的数据库。DBPATH是一个以:(冒号)分割的数据库名称列表-e,--existing只打印在调用locate时存在的文件-L,--follow当和-e选项一起使用时,如果该文件是一个软链接文件,则会获取到该软链接对应的实际文件(此为locate命令默认行文)。-h,--help打印帮助文档信息-i,--ignore-case当进行文件模式匹配时,忽略大小写-l,--limit,-nLIMIT当成功匹配到LIMIT数量的文件时,退出-P,--nofollow,-H当和-e选项一起使用时,如果该文件是一个软链接文件,此时不跟随链接的实际文件-0,--null输出时以ASCIINUL作为分隔符-S,--statistics获得每一个搜索数据库的统计信息-q,--quiet当在读取和处理数据库时,遇到错误也不打印相关信息-r,--regexpREGEXP查找一个基本的模式匹配REGEXP。此选项情况下,不能出现PATTERNs-V,--version打印locate的版本信息和license信息-w,--wholename匹配完整路径名(默认)

例如查找一个文件名称为NAME(并不是*NAME*)的文件,可以使用如下:

#locate-b'\NAME'

应为\本身是一个通配字符,因此这里会禁止隐式的转化为*NAME*.

1.4 使用范例

1) 搜索目录下所有以sh开头的文件

#locate/etc/sh/etc/shadow/etc/shadow-/etc/shells

2) 包含某个字符串的相关文件

#locatepasswd/etc/passwd/etc/passwd-/etc/pam.d/passwd/etc/security/opasswd/usr/bin/gpasswd/usr/bin/grub2-mkpasswd-pbkdf2/usr/bin/kpasswd/usr/bin/lppasswd/usr/bin/passwd/usr/bin/smbpasswd....

3) 限定显示数量

如果显示的内容过多,可以使用-n选项来限定显示数量。

#locate-n5passwd/etc/passwd/etc/passwd-/etc/pam.d/passwd/etc/security/opasswd/usr/bin/gpasswd

4) 使用正则表达式

当需要查找符合特定规则的信息时,可以使用-r选项匹配相应的正则表达式

//查找以/var/lib/rpm开头的文件#locate-r^/var/lib/rpm/var/lib/rpm/var/lib/rpm-state/var/lib/rpm/.dbenv.lock/var/lib/rpm/.rpm.lock....//查找以zip结尾的文件#locate-rzip$/usr/bin/funzip/usr/bin/gpg-zip/usr/bin/gunzip/usr/bin/gzip/usr/bin/mzip/usr/bin/unzip/usr/bin/zip/usr/lib64/libreoffice/share/config/images.zip/usr/lib64/libreoffice/share/config/images_crystal.zip....

5) 判断某一目录下的文件是否存在(软链接)

#ls../lib|whilereadline;doif[-f../lib/$line];thentemp="$(locate"$line")";if[-n"$temp"];thenecho$line;fifidone

1.5 updatedb的配置文件/etc/updatedb.conf

PRUNE_BIND_MOUNTS="yes"PRUNEFS="9pafsanon_inodefsautoautofsbdevbinfmt_misccgroupcifscodaconfigfscpusetdebugfsdevptsecryptfsexofsfusefuse.sshfsfusectlgfsgfs2gpfshugetlbfsinotifyfsiso9660jffs2lustremqueuencpfsnfsnfs4nfsdpipefsprocramfsrootfsrpc_pipefssecurityfsselinuxfssfssockfssysfstmpfsubifsudfusbfs"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"
  • PRUNE_BIND_MOUNTS: 表示是否进行限制搜索

  • PRUNEFS: 表示排除检索的文件系统类型

  • PRUNENAME: 表示排除检索的文件类型

  • PRUNEPATHS: 表示排除检索的文件目录

感谢大家的阅读,以上就是“Linux系统locate命令的使用方法是什么”的全部内容了,学会的朋友赶紧操作起来吧。相信亿速云小编一定会给大家带来更优质的文章。谢谢大家对本站的支持!