1.前言本文主要讲解Linux系统中最常用的5个高效搜索文件的命令。它们是which,type,whereis,locate,find及其使用它们是:which:在PATH路径变量中,搜索系统命令对应的文件的目录位置type:用于显示哪些命令是内置的shell和哪些命令是外部命令。如何使用选项-p,会显示外部命令的保存位置,相当于which命令。其中is:只能用于搜索程序名,选项-b用于搜索二进制文件,即编译文件,选项-m用于搜索用户手册文件,选项-s用于搜索源代码文件locate:基于数据库缓存信息显示文件位置不是实时搜索。如果要实时查找,需要在使用前手动更新数据库。find:Linux系统最常用也是最强大的搜索命令,用于实时查找硬盘上的文件。注意:在这5个命令中,find命令是最慢的,因为它可以搜索任何类型的文件,而且是实时搜索。通常使用whereis或者locate先查找文件,如果没有找到目标文件,再使用find命令。这是因为whereis和locate是通过查询数据库来定位文件路径的,所以速度还是比较快的,也比较省时。find命令实时搜索硬盘上的文件。locate命令是mlocate软件套件的一个子命令集。通过以下命令安装mlocate套件[root@CentOS7~]#yum-yinstallmlocate总下载量:113k安装大小:379k下载包:mlocate-0.26-8.el7.x86_64.rpm|113kB00:00:00运行事务检查运行事务测试事务测试成功运行事务安装:mlocate-0.26-8.el7.x86_641/1验证:mlocate-0.26-8.el7.x86_641/1已安装:mlocate.x86_640:0.26-8.el7完成!执行以下命令手动更新数据库:[root@CentOS7~]#updatedbupdatedb命令读取/etc/updatedb.conf中的配置,然后在整个Linux文件系统中搜索文件,然后更新数据库文件,找到该文件并直接读取数据库。2、搜索系统命令位置-`which`命令which命令在PATH变量指定的路径中搜索某个系统命令的位置,返回第一个搜索结果。which命令的格式如下:which[-a]commandwhich命令的参数如下:-a:列出所有能在PATH目录下找到的命令,而不是只列出第一个找到的命令。用例,使用which命令查找wget程序文件所在目录位置:[root@zcwyou~]#whichwget/usr/bin/wget可以看到wget程序所在位置3.搜索程序相关文件命令`whereis`whereis命令使用格式如下:whereis[-bmsu]文件或目录名whereis命令的选项如下:选项说明-b只搜索程序二进制文件-m只搜索对应的用户手册程序-s只搜索程序源文件-u搜索除上述以外的其他特殊文件三个选项中的其他特殊文件使用locate搜索案例:搜索locate命令程序的位置:[root@CentOS7~]#whereislocate的搜索结果如下,可以看到locate程序locate的程序文件和手册文件所在位置:/usr/bin/locate/usr/share/man/man1/locate.1.gz搜索的手册文件chmod程序[root@zcwyou~]#whereis-mchmodchmod:/usr/share/man/man1/chmod.1.gz搜索程序相关的文件命令whereis4。通过`locate`命令搜索文件locate命令的格式如下:locate[-ir]keywordlocate命令的参数如下:-i:忽略大小写差异;-r:正则表达式可以遵循表达式的实现方式。用例:[root@zcwyou~]#locateuseradd/etc/default/useradd/usr/sbin/luseradd/usr/sbin/useradd/usr/share/man/de/man8/useradd.8.gz/usr/share/man/fr/man8/useradd.8.gz/usr/share/man/id/man8/useradd.8.gz/usr/share/man/it/man8/useradd.8.gz/usr/share/man/ja/man8/useradd.8.gz/usr/share/man/man1/luseradd.1.gz/usr/share/man/man8/useradd.8.gz/usr/share/man/ru/man8/useradd。8.gz/usr/share/man/tr/man8/useradd.8.gz/usr/share/man/zh_CN/man8/useradd.8.gz/usr/share/man/zh_TW/man8/useradd.8。gz5.使用Linux中最强大的搜索命令工具`find`,您可以使用find命令搜索Linux系统文件中的任意文件。使用Linux中最强大的搜索命令工具,find。action]5.1基于文件名搜索的`find`命令与文件名相关的参数如下:-namefilename:查找名为filename的文件。filename可以使用正则表达式来表示。用例:[root@CentOS7~]#find/-namesz/usr/bin/sz找到名为sz的文件。5.2`find`命令根据文件大小搜索如果想以文件大小作为搜索条件,可以使用以下参数:-sizexxx:查找正好等于xxx大小的文件;-size-xxx:查找大于xxx的文件;-size+xxx:查找小于xxx的文件。其中,xxx的单位为:-cbytebyte;-w表示汉字(2字节);-b块(512字节);-k表示千字节;-M表示兆字节;-G表示Ji字节。find的用例:在当前目录下搜索大于99KB的文件[root@zcwyou~]#find.-typef-size+99k在当前目录下搜索等于88KB的文件[root@zcwyou~]#find.-typef-size88k5.3`find`命令的文件类型搜索选项如下:option-type表示定义搜索目标文件的类型。TYPE的参数列表为:-f:普通文件;-l:符号链接;-d:目录;-c:字符设备;-b:块设备;-s:套接字;-p:先进先出。用例:在/proc目录中查找所有类型为socket的文件。[root@zcwyou~]#find/proc-types5.4`find`命令根据文件时间和时间相关参数进行搜索,包括-atime、-ctime、-mtime。下面用-mtime说明:-mtimen:n是一个数字,列出n天之前“一天之内”改变的文件名;-mtime+n:列出n天之前(不包括第n天本身)已经更改的文件名;-mtime-n:列出n天内(不包括第n天本身)更改过的文件名;-newerfile:file是一个已经存在的文件,并且列出该文件还需要一个新的文件名。下面通过几个实用的方式来解释这个用法:-mtime+2表示距现在2天,即从当前时间的前2天开始,走到更早的时间。-mtime+1表示时间超过1天,即从当前时间的前1天,到更早的时间。-mtime1,文件是从当前时间算起的第一天,所以这个是时间点。用例:查找从现在到24小时前,/etc目录下所有内容发生变化的文件都会被列出来。[root@zcwyou~]#find/etc-mtime0查找/etc目录下所有比/etc/passwd文件更新的文件。[root@zcwyou~]#find/ect-newer/etc/passwdfind命令的使用方法请参考本站教程:Linuxfind命令查找文件34个实战案例系统运维是经常用到的,掌握这五个命令的用法可以大大提高运维效率。
