locate 快速查找文件

功能:在储存文件目录名称的索引数据库中,快速查找文件位置。使用权限:所有使用者。

原理:在Linux系统中,有个预装的数据库文件“/var/lib/mlocate/mlocate.db”(版本不同,会有所不同。有的版本位置是/var/lib/slocate/slocate.db,还有的是/var/cache/locate/locatedb)。此数据库索引数据库,它储存的是系统的全部的文件名和目录,每天自动更新一次。这个数据库由每天的例行工作(crontab)程序来建立。locate指令是在mlocate.db(或slocate.db)数据库内查找,所以速度非常快,比find快很多。但locate的查找并不是实时的,而是以数据库的更新为准。所以在查询前,可先运行“sudo updatedb”指令来更新数据库为最新(任何目录中均可运行此指令来更新)。

整个locate工作其实是由四部分组成的:
/usr/bin/updatedb       主要用来更新数据库,这个工作是通过crontab自动完成的。
/usr/bin/locate(mlocate)   是作来完成查询功能的程序。
/etc/updatedb.conff   是配置要查询哪些目录、哪些文件。
/var/lib/mlocate/mlocate.db   存放文件信息的文件。

 

语法:locate  [OPTION]  [PATTERN]
短选项 长选项 含义
-b --basename 匹配唯一的路径名称的基本文件名
-c --count 只显示找到条目的号码
-d --database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)
-e --existing 只显示当前存在的文件条目
-L --follow 当文件存在时跟随蔓延的符号链接 (默认)
-H   跟随符号链接
-i --ignore-case 匹配模式时忽略大小写区别
-l --limit 计数
-n LIMIT   至多显示 个输出
-P --nofollow 当检查文件时不跟随蔓延的符号
-0 --null 输出时以 NUL 分隔项目
-S --statistics 不搜索项目,显示有关每个已用数据库的统计信息
-q --quiet 不报告关于读取数据库的错误消息
-r --regexp REGEXP 搜索基本正则表达式 REGEXP 来代替模式
  --regex 模式是扩展正则表达式
 

 

实例

locate PATTERN

查询系统中,所有名为PATTERN和包含PATTERN的文件,然后把他们列出来

查找相关字issue 
$ locate issue 
/etc/issue 
/etc/issue.net 
/usr/man/man5/issue.5 
/usr/man/man5/issue.net.5 
 
查找etc目录下所有以sh开头的文件 
$ locate /etc/sh 
/etc/shadow 
/etc/shadow- 
/etc/shells 
 
 
查找时区分大小写 
$ locate makefile 
/usr/share/doc/python3-uno/demo/makefile.mk 
/usr/share/emacs/23.4/lisp/cedet/ede/makefile-edit.elc 
/usr/share/gtksourceview-3.0/language-specs/makefile.lang 
/usr/share/icons/Humanity/mimes/16/gnome-mime-text-x-makefile.svg 
/usr/share/icons/Humanity/mimes/22/gnome-mime-text-x-makefile.svg 
 
查找时不区分大小写,使用 -i 
$ locate -i makefile 
/usr/src/linux-headers-3.8.0-30/kernel/Makefile 
/usr/src/linux-headers-3.8.0-30/kernel/debug/Makefile 
/usr/src/linux-headers-3.8.0-30/kernel/debug/kdb/Makefile 
/usr/src/linux-headers-3.8.0-30/kernel/events/Makefile 
 

 

locate -n LIMIT  PATTERN

查看soft目录下以android开头的文件,限定只显示5个,使用 -n 
$ locate -n 5 /soft/android 
/home/bixiaopeng/soft/android-studio 
/home/bixiaopeng/soft/android-studio-bundle-130.737825-linux.tgz 
/home/bixiaopeng/soft/android-studio/Install-Linux-tar.txt 
/home/bixiaopeng/soft/android-studio/LICENSE.txt 
/home/bixiaopeng/soft/android-studio/NOTICE.txt 

 

locate -r  REGEXP

使用正规运算式做查找的条件

查找以makefile结尾的文件 
$ locate -r makefile$ 
/usr/src/linux-headers-3.8.0-19/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-19-generic/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-27/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-27-generic/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-29/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-29-generic/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-30/scripts/mkmakefile 
/usr/src/linux-headers-3.8.0-30-generic/scripts/mkmakefile 
 
 
查找以/var/lib/dpkg/info/开头的文件 
$ locate -r ^/var/lib/dpkg/info/ 
/var/lib/dpkg/info/zlib1g:amd64.postinst 
/var/lib/dpkg/info/zlib1g:amd64.postrm 
/var/lib/dpkg/info/zlib1g:amd64.shlibs 
/var/lib/dpkg/info/zlib1g:amd64.symbols 
/var/lib/dpkg/info/zlib1g:i386.list 
/var/lib/dpkg/info/zlib1g:i386.md5sums 
/var/lib/dpkg/info/zlib1g:i386.postinst 
/var/lib/dpkg/info/zlib1g:i386.postrm 
/var/lib/dpkg/info/zlib1g:i386.shlibs 
/var/lib/dpkg/info/zlib1g:i386.symbols