017、locate查找文件
本文最后更新于 65 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

locate查找文件

[root@localhost ~]# yum install -y mlocate
[root@localhost ~]# updatedb

查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源

工作特点:

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

语法
locate命令的基本语法如下:locate [选项] [参数]。
常用选项如下:
选项  说明
-b, --basename 匹配唯一的路径名称的基本文件名
-c, --count    显示匹配的文件个数,返回数字
-d, --database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)
-e, --existing 只显示当前存在的文件条目
-L, --follow   当文件存在时跟随蔓延的符号链接 (默认),会跟着软链接继续查找
-h, --help 显示本帮助
-i, --ignore-case  匹配模式时忽略大小写区别
-l, --limit, -n LIMIT    限制为 LIMIT项目的输出 (或 计数),如-l 1即使有多个匹配结果也只输出第一个
-m, --mmap 忽略向后兼容性
-P, --nofollow, -H    当检查文件时不跟随蔓延的符号链接,不会跟着软链接继续查找
-0, --null 输出时以 NUL 分隔项目
-S, --statistics   不搜索项目,显示有关每个已用数据库的统计信息,即显示目录数、文件数等
-q, --quiet    不报告关于读取数据库的错误消息
-r, --regexp REGEXP   搜索基本正则表达式 REGEXP 来代替模式,即使用正则表达式来匹配文件名
–regex REGEXP  模式是扩展正则表达式
-s, --stdio    忽略向后兼容性
-V, --version  显示版本信息
-w, --wholename    匹配完整路径名 (默认),即会显示匹配到的文件的绝对路径
参数为文件名或目录名。
使用

查找指定文件

查看名为restart.sh的文件

locate restart.sh
/usr/local/qcloud/stargate/admin/restart.sh

查找指定目录下以某个字符串开头的文件

例如,查找/root/.ssh目录下以"id_rsa"开头的所有文件

locate /root/.ssh/id_rsa
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub

利用正则表达式查找指定模式的文件

使用-r选项查找以"sh"结尾的文件或目录

locate -r sh$
拓展延申

updatedb的配置文件/etc/updatedb.conf
/ect/updatedb.conf是updatedb命令的配置文件,配置了一些数据库更新信息,我们可以在该文件中配置需要排除检索的文件。
使用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"

关于/etc/updatedb.conf文件的说明如下:
选项 说明

PRUNE_BIND_MOUNTS   表示是否进行限制搜索
PRUNEFS 指要排除的文件系统类型,即列出的文件类型不会被检索
PRUNENAMES  指要对哪些后缀的文件排除检索,即列出的带有这些的文件不会被检索
PRUNEPATHS  指要排除检索的路径,即列出路径下的文件和子文件夹都不会被检索,即使是updatedb之后也无法找到
修改之后重新执行updatedb命令更新数据库,再执行locate命令进行查找。
find命令和locate命令的区别

locate命令会通过数据库进行查找文件,速度非常快;而find命令则是直接在硬盘上查找文件,查找速度非常慢。
locate命令查找的文件是基于数据库的,如果是已删除或者新增加的文件,未被数据库记录那么可能查找到错误结果或者未查找到导致结果不准确;而find命令则查找很精确,不会出现locate命令出现的问题。
locate命令执行应该执行updatedb命令更新数据库;而find命令不需要多执行一个命令。

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇