Linux locate命令 图片看不了?点击切换HTTP 返回上层
但是 locate 命令的局限也很明显,它只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。如果要按照复杂条件执行搜索,则只能求助于功能更加强大的 find 命令。locate 命令的优点鮮常明显,那就是搜索速度非常快,而且耗费系统资源非常小。这是因为 locate 命令不会直接搜索硬盘空间,而会先建立 locate 数据库,然后在数据库中按照文件名进行搜索,是快速的搜索命令。
locate 命令的基本信息如下。
- 命令名称:locate。
- 英文原意:find files by name。
- 所在路径:/usr/bin/locate。
- 执行权限:所有用户。
- 功能描述:按照文件名搜索文件。
命令格式
locate 命令只能按照文件名来进行搜索,所以使用比较简单。[root@localhost ~]# locate [选项] 文件名
选项:- -i:忽略大小写
常见用法
【例 1】基本用法。搜索 Linux 的安装日志。
[root@localhost ~]# locate install.log
/root/install.log
/root/install.log.syslog
#搜索文件名叫install.log的文件
[root@localhost ~]# locate mkdir
/bin/mkdir
/usr/bin/gnomevfs-mkdir
/usr/lib/perl5/auto/POSIX/mkdir.al
…省略部分内容...
#会搜索出所有含有mkdir字符串的文件名,当然也包含mkdir命令
【例 2】locate 命令的数据库。
我们在使用 locate 命令的时候,可能会发现一个问题:如果我们新建立一个文件,那么 locate 命令找不到这个文件。例如:
[root@localhost ~]# touch cangls
[root@localhost ~]# locate cangls
#新建立的文件,locate命令找不到
既然如此,locate 命令的数据库在哪里呢?
[root@localhost ~]#ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 2328027 6月 14 02:08/var/lib/ mlocate/mlocate.db
#这是 locate 命令实际搜索的数据库的位置
[root@localhost ~]# locate cangls
#没有更新数据库时,找不到cangls文件
[root@localhost ~]# updatedb
#更新数据库[root@localhost ~]# locate cangls
/root/cangls
#新建立的文件已经可以搜索到了
locate配置文件
我们再做一个实验,看看这是什么原因导致的。
[root@localhost ~]# touch /tmp/lmls
#在/tmp/目录下新建立一个文件
[root@localhost ~]# updatedb
#更新locat数据库
[root@localhost ~]# locate lmls
#依然查询不到lmls这个新建文件
[root@localhost ~]#vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
#开启搜索机制,也就是让这个配置文件生效
PRUNEFS = "9p afs anonjnodefs auto autofs bdev binfmt_misc cgroup cifs coda
configfs cpuset debugfs devpts ecryptfs exofe fuse fusectl gfs gfe2 hugetlbfs
inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfe nfs4 nfsd pipefe proc ramfs rootfs
rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
#在local执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = ".git.hg.svn"
#在locate执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spod/cups /var/spool/squid /var/tmp"
#在locat执行搜索时,禁止搜索这些系统目录