locate命令使用说明
1、命令概述
locate 命令用来查找文件或目录。locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。值得注意的是:版本不同,会有所不同。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
整个locate工作其实是由四部分组成的:
/usr/bin/updatedb 主要用来更新数据库,通过crontab自动完成的
/usr/bin/locate 查询文件位置
/etc/updatedb.conf updatedb的配置文件
/var/lib/mlocate/mlocate.db 存放文件信息的文件
2、命令语法
locate【选项】 【路径】【文件或目录】
3、命令选项
-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 限制为 LIMIT项目的输出 (或 计数) -m, --mmap 忽略向后兼容性 -P, --nofollow, -H 当检查文件时不跟随蔓延的符号 -0, --null null 输出时以 NUL 分隔项目 -S, --statistics 不搜索项目,显示有关每个已用数据库的统计信息 -q, --quiet 安静模式,不会显示任何错误讯息 -r, --regexp REGEXP 使用基本正则表达式 --regex 使用扩展正则表达式 -s, --stdio 忽略向后兼容性 -V, --version 显示版本信息 -w, --wholename 匹配整个路径名(默认)
4、locate命令软件安装
1 [root@lzg ~]# yum search locate 2 Loaded plugins: fastestmirror 3 Loading mirror speeds from cached hostfile 4 * base: mirrors.aliyun.com 5 * extras: mirrors.aliyun.com 6 * updates: mirrors.aliyun.com 7 =================================================== N/S matched: locate =================================================== 8 mlocate.x86_64 : An utility for finding files by name 9 perl-File-ShareDir.noarch : Locate per-dist and per-module shared files 10 which.x86_64 : Displays where a particular program in your path is located 11 12 Name and summary matches only, use "search all" for everything. 13 [root@lzg ~]# yum install -y mlocate
14 [root@lzg ~]# updatedb
5、命令示例
5.1 搜索/etc目录下所有以sh开头的文件:
1 [root@lzg ~]# locate /etc/sh 2 /etc/shadow 3 /etc/shadow- 4 /etc/shells 5 [root@lzg ~]#
5.2 搜索 /etc 目录下以k开头的文件:
1 [root@lzg ~]# locate /etc/k 2 /etc/kdump.conf 3 /etc/kernel 4 /etc/krb5.conf 5 /etc/krb5.conf.d 6 /etc/kernel/postinst.d 7 /etc/kernel/postinst.d/51-dracut-rescue-postinst.sh
5.3 查找和pwd相关的所有文件(包含pwd就会显示):
1 [root@lzg ~]# locate pwd 2 /etc/.pwd.lock 3 /usr/bin/pwd 4 /usr/bin/pwdx 5 /usr/lib/modules/3.10.0-1062.1.2.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz 6 /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/watchdog/hpwdt.ko.xz 7 /usr/lib64/cracklib_dict.pwd 8 /usr/lib64/python2.7/lib-dynload/spwdmodule.so 9 /usr/sbin/unix_chkpwd 10 /usr/share/cracklib/cracklib-small.pwd 11 /usr/share/cracklib/pw_dict.pwd 12 /usr/share/man/man1/pwd.1.gz 13 /usr/share/man/man1/pwdx.1.gz 14 /usr/share/man/man8/unix_chkpwd.8.gz
5.4 -c 只输出找到的数量:
1 [root@lzg ~]# locate -c /etc/sh #查找/etc目录下sh开头的文件数量 2 3 3 [root@lzg ~]# locate -c /etc/k 4 6 5 [root@lzg ~]#
5.5 查看updatedb的配置文件/etc/updatedb.conf:
1 [root@lzg ~]# cat /etc/updatedb.conf 2 PRUNE_BIND_MOUNTS = "yes" 3 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" 4 PRUNENAMES = ".git .hg .svn" 5 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" 6 [root@lzg ~]#
说明:
第一行PRUNE_BIND_MOUNTS="yes"的意思是:是否进行限制搜索。
第二行是排除检索的文件系统类型,即列出的文件系统类型不进行检索。
第三行表示对哪些后缀的文件排除检索,也就是列在这里面的后缀的文件跳过不进行检索。不同后缀之间用空格隔开。
第四行是排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索。updatedb之后使用locate仍然找不到想要文件,可以检查挂载的目录是否被忽略了