locate命令其实是find -name的另一咱写法,但是要比后者快的多,原因在于它不搜索具体目录,而是搜索/var/lib/locatedb或/var/lib/mlocate/mlocate.db,这个数据库中含有本地所有文件信息。linux系统自动创建这个数库,并且每天自动更新一次,所以使用locate命令 查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
如下面的例子:
[root@NB test]# touch chehi123
[root@NB test]# pwd
/root/test
[root@NB test]# cd
[root@NB ~]# pwd
/root
[root@NB ~]# locate chehi
[root@NB ~]# updatedb
[root@NB ~]# locate chehi
/root/test/chehi123
#但在/tmp下的文件是不效的
[root@NB tmp]# touch tmp123
[root@NB tmp]# pwd
/tmp
[root@NB tmp]# locate tmp123
[root@NB tmp]# cd
[root@NB ~]# locate tmp123
[root@NB ~]# updatedb
[root@NB ~]# locate tmp123
[root@NB ~]#
注意:在u盘里的文件也不会被存在/var/lib/mlocate/mlocate.db中,所以locate不能查到u盘内的文件!!!!!确切地说放在/media下的文件都不会被存在/var/lib/mlocate/mlocate.db中!!
我见过最NB的查找文件最快的命令
[root@NB data]# locate teamviewer.
/data/Software/teamviewer.i686.rpm
/home/ok/.local/share/teamviewer11/drive_c/teamviewer.html
/home/ok/Desktop/TMP/teamviewer.png
/home/ok/Downloads////////test/teamviewer.zip
/opt/teamviewer/tv_bin/desktop/teamviewer.png
locate -r :使用正规运算式做查找的条件以makefile结尾的
[root@NB data]# locate -r makefile$
/usr/local/src/rar/makefile
以/usr/local/src/test开头的
[root@NB dnsmasq]# locate -r ^/usr/local/src/test
/usr/local/src/test
/usr/local/src/test/MySQL-5.6.-.rhel5.x86_64.rpm-bundle.tar
/usr/local/src/test/MySQL-client-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-devel-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-embedded-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-server-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-shared-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-shared-compat-5.6.-.rhel5.x86_64.rpm
/usr/local/src/test/MySQL-test-5.6.-.rhel5.x86_64.rpm
-i是不分大小写