Linux文件查找命令(locate/find)

在用linux操作系统的时候,当我们忘记之前某个文件存储的位置,但是知道其文件名或者模糊的知道其文件名,我们都可以通过文件查找工具来查找,linux提供两种常用的查找工具,locate和find,在日常使用中后者比前者较前者功能更强大更具有实时性,下面我们就这两种工具来谈一谈她们的使用方法。

Locate

locate是基于实现构建好的索引库(索引库可以理解成文件路径的集合),索引库的位置放在/var/lib/mlocate/mlocate.db文件里面,系统一般一天会自动更新一次,也可以使用updatedb手动更新,要注意的是,索引库的构建过程需要遍历整个文件系统,非常消耗系统资源。

locate的特点是查找的速度快,比find快很多,因为它只在查找索引库,而find会遍历整个文件系统的路径。快的好处自然也给locate带来的缺点,就是它并非是实时查找,意思就是你如果刚刚创建了一个文件,但是你忘记了其路径,只记得其名称,那么这个时候就不建议使用locate,因为索引数据库没有更新,你使用locate查不到,除非你走运,定期更新的时间刚好在创建文件完文件之后,locate在匹配文件名的时候是模糊匹配。

下面我们就来介绍一下locate的用法:

locate

NAME:通过文件名查找文件 SYNOPSIS:locate [OPTION]... PATTERN... -b:只匹配路径中的基名; -c:输出符合条件文件的数目 -r:使用基本正则表达式 --regex:使用扩展正则表达式 -i:忽略大小写 -q:安静模式,不会有任何输出

举例1:查找含有"passwd"的文件名

[root@localhost ~]# locate passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd /usr/bin/grub2-mkpasswd-pbkdf2 ......(省略) /usr/share/doc/passwd-0.79/AUTHORS /usr/share/doc/passwd-0.79/COPYING /usr/share/doc/passwd-0.79/ChangeLog /usr/share/doc/passwd-0.79/NEWS /usr/share/vim/vim74/ftplugin/passwd.vim /usr/share/vim/vim74/syntax/passwd.vim

我们会发现,非基名中存在passwd也会被匹配出来,我们可以使用"-b"选项来匹配:

[root@localhost ~]# locate -b passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd /usr/bin/grub2-mkpasswd-pbkdf2 /usr/bin/kdepasswd /usr/bin/kpasswd /usr/bin/lppasswd /usr/bin/passwd /usr/bin/vncpasswd ...... /usr/share/man/zh_CN/man8/chpasswd.8.gz /usr/share/man/zh_CN/man8/smbpasswd.8.gz /usr/share/man/zh_TW/man8/chpasswd.8.gz /usr/share/ruby/webrick/httpauth/htpasswd.rb /usr/share/vim/vim74/ftplugin/passwd.vim /usr/share/vim/vim74/syntax/passwd.vim

 

看输出的显示结果,只有基名中含有"passwd"的才会被匹配

举例2:查找只有基名中含有"passwd"的文件名的数目

[root@localhost ~]# locate -bc passwd 155

举例3:查找基名中只有"passwd"文件的文件

[root@localhost ~]# locate -br "\<passwd$" /etc/passwd /etc/pam.d/passwd /usr/bin/passwd /usr/share/bash-completion/completions/passwd

updatedb的配置文件在/etc/updatedb.conf

PRUNE_BIND_MOUNTS = "yes" 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" 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"

PRUNE_BIND_MOUNTS:表示是否限制搜索

PRUNEFS:所列的文件系统,查找的时候不进行查找

PRUNENAMES:所列的后缀名不进行查找

PRUNEPATHS:所列的文件路径下的文件不进行查找

实时性检测

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13610.html