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仍然找不到想要文件,可以检查挂载的目录是否被忽略了

 

posted @ 2019-10-21 15:17  网络小白-lzg  阅读(1562)  评论(0编辑  收藏  举报