linux-func-locate

介绍

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

updatedb之后使用locate仍然找不到想要文件,可以检查挂载的目录是否被忽略了

updatedb配置

1
2
3
4
5
6
7
8
9
PRUNE_BIND_MOUNTS = "yes" # 是否进行限制搜索
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda confi
gfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hug
etlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs
rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fus
e.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" # 排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索

安装

1
yum -y install mlocate

用法

1
locate(选项)(参数)

选项

选项 描述
-d<目录>或--database=<目录> 指定数据库所在的目录;
-u 更新slocate数据库;
-i 忽略大小写
-q, --quiet 安静模式,不会显示任何错误讯息
-r, --regexp REGEXP 使用基本正则表达式
--help 显示帮助;
--version 显示版本信息。

参数

参数 描述
查找字符串 要查找的文件名中含有的字符串。

例子

1
2
# 搜索etc目录下所有以my开头的文件
locate /etc/my