linux文件查找-locate命令详解


我们在前面几篇文章中已经接触到了大量和文件与目录操作相关的命令,比如ls、cd、touch、mkdir、cp、mv等。本章就来详细介绍这些命令的用法。 文件的查找是我们在linux下经常遇到的问题。 我们之前在讲解linux命令的时候已经接触过一些和查找有关的命令了,那就是which和whereis, 不过这两个命令查找的都是和命令相关的文件。关于which和whereis命令的详细信息参考: 什么是linux命令 还有两个更强大的和文件搜索相关的命令,一个是locate,另一个是find。 locate利用数据库来搜索文件,速度要比find命令快,而find命令直接搜索磁盘的文件系统,如果磁盘性能比较差的话,那么find可能会花费更多的时间

locate和updatedb命令

回到顶部
locate命令常用格式如下:
              [root@initroot ~]# locate [-ir] keyword
            
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量;
-l :指定输出的行数,例如-l 5,只输出搜索结果的5行;
-S :输出locate所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等;
-r :后接正则表达式
列出locate命令查询所使用的数据库文件名及数据库记录信息:
              root@peter-VirtualBox:~# locate -S
              Database /var/lib/mlocate/mlocate.db:
                65,204 directories
                706,807 files
                61,479,834 bytes in file names
                24,835,248 bytes used to store database
            
可以看到locate其实是通过查询数据库文件/var/lib/mlocate/mlocate.db,而没有真正的搜索磁盘目录。
以关键词passwd搜索所有和passwd有关的文件名,且只列出5个:
            [root@initroot ~]# locate -l 5 passwd
            /etc/passwd
            /etc/passwd-
            /etc/cron.daily/passwd
            /etc/pam.d/chpasswd
            /etc/pam.d/passwd
            
locate会将所有文件名中包含passwd的文件都列出来。你会发现locate的搜索效率非常高。 这是因为locate是从数据库文件中搜索的,而不需要遍历磁盘中的每个目录。 我们通过-S选项已经知道locate的搜索数据库文件是/var/lib/mlocate/mlocate.db。 这个文件是由系统自动更新的,每个发行版的更新频率都不一样,在centos中是每天更新一次。 所以如果你刚刚创建了一个新文件,而数据库文件却还没有更新,那么这时候用locate是搜索不到刚刚创建的文件的。 可以用updatedb命令手动更新文件数据库。updatedb命令根据/etc/updatedb.conf配置文件中的设置, 去硬盘文件系统中搜寻文件, 最后更新整个数据库文件,因为updatedb会去搜寻整个硬盘,所以可能需要等待数分钟的时间。
我们cat命令查看/etc/updatedb.conf文件中的内容:
root@peter-VirtualBox:~# cat /etc/updatedb.conf 
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs devtmpfs fuse.mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ceph fuse.ceph fuse.rozofs ecryptfs fusesmb"
              
从输出中我们看到/etc/updatedb.conf文件中有几个项目,其中PRUNE_BIND_MOUNTS为是否开启限制, 如果为yes说明下面的设置生效。PRUNENAMES为不需要搜索的文件类型扩展名,PRUNEPATHS为不需要搜索的目录路径,PRUNEFS为不需要搜索的文件系统。
updatedb:根据/etc/updatedb.conf的设置搜寻系统硬盘中的文件名,并更新/var/lib/mlocate/mlocate.db数据库文件;
locate:依据文件数据库/var/lib/mlocate/mlocate.db中的记录,找到和关键词匹配的文件名。

locate命令从/var/lib/mlocate/目录下的mlocate数据库记录中查找文件。locate不需要搜索整个硬盘,所以速度比find命令快很多。
大部分发行版中,mlocate数据库由操作系统每天更新一次,如果你新建立了一个文件,而mlocate数据库还没有来得及更新,那么通过locate是找不到这个新建的文件的。
可以直接在命令行输入updatedb手动更新mlocate数据库。updatedb根据/etc/updatedb.conf中的配置,搜索整个系统硬盘内的文件,然后更新mvar/lib/mlocate/目录下的数据库文件

命令示例:
locate [ir] keyword
locate passwd

Usage: locate [OPTION]... [PATTERN]...
Search for entries in a mlocate database.
-A, --all only print entries that match all patterns
-b, --basename match only the base name of path names
-c, --count only print number of found entries
-d, --database DBPATH use DBPATH instead of default database (which is /var/lib/mlocate/mlocate.db)
-e, --existing only print entries for currently existing files
-L, --follow follow trailing symbolic links when checking file existence (default)
-h, --help print this help
-i, --ignore-case ignore case distinctions when matching patterns
-p, --ignore-spaces ignore punctuation and spaces when matching patterns
-t, --transliterate ignore accents using iconv transliteration when matching patterns
-l, --limit, -n LIMIT limit output (or counting) to LIMIT entries
-m, --mmap ignored, for backward compatibility
-P, --nofollow, -H don't follow trailing symbolic links when checking file existence
-0, --null separate entries with NUL on output
-S, --statistics don't search for entries, print statistics about each used database
-q, --quiet report no error messages about reading databases
-r, --regexp REGEXP search for basic regexp REGEXP instead of patterns
--regex patterns are extended regexps
-s, --stdio ignored, for backward compatibility
-V, --version print version information
-w, --wholename match whole path name (default)
Report bugs to https://pagure.io/mlocate.

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读