当前位置: 首页 > 科技观察

6款高效的Linux文件查找工具

时间:2023-03-13 13:57:00 科技观察

1.前言我们在使用Linux的时候,经常会有查找文件的需求,那么Linux命令下有哪些工具可以快速查找文件呢?先来了解一下这些工具:linux查找文件1.1find命令Linuxfind命令是所有Linux命令中最有用的,也是最容易混淆的一个。这很难,因为它的语法不同于其他Linux命令的标准语法。但是,它非常强大,因为它允许您按文件名、文件类型、用户甚至时间戳来查找文件。使用find命令,您不仅可以查找具有这些属性的任意组合的文件,还可以对它找到的文件执行操作。1.2locate命令Linuxlocate命令用于查找满足条件的文件。它会到保存文件名和目录名的数据库中查找满足模板样式条件的文件或目录。locate允许用户在文件系统中快速搜索指定的文件。其方法是先建立一个包含系统中所有文件的名称和路径的数据库,然后在搜索时只需要查询这个数据库,而不需要真正深入文件系统。在一般发行版中,数据库的建立是在crontab中自动执行的。1.3grep命令Linuxgrep命令用于在文件中查找满足条件的字符串。grep也可以通过文件名搜索文件,但一般用于查找文件的内容。grep(globalsearchregularexpression(RE)andprintouttheline,综合搜索正则表达式并打印出行)是一个强大的文本搜索工具,可以使用正则表达式搜索文本并将匹配的行打印出来.1.4whereis命令whereis命令只能用来搜索程序名,只能搜索二进制文件(参数-b)、man描述文件(参数-m)和源代码文件(参数-s)。如果省略该参数,则返回所有信息。1.5which命令which命令的作用是在PATH变量指定的路径中搜索某个系统命令的位置,并返回第一个搜索到的结果。也就是说,通过which命令,可以看到某个系统命令是否存在,以及命令执行到哪里了。1.6type命令type命令实际上不是搜索命令。用于区分某个命令是由shell本身提供的,还是由shell外部的独立二进制文件提供的。如果命令是外部命令,使用-p参数显示命令的路径,相当于which命令。1.7Summary查看可执行文件的位置。whereis查看文件的位置。locate配合数据库查看文件位置。find实际上是在硬盘上搜索文件名。type区分命令类型2.find命令用例2.1根据文件名查找zcwyou.txt文件,从/开始,即在Linux挂载的所有分区和目录中查找。[root@zcwyou~]#find/-namezcwyou.txt只查找.txt结尾的文件[root@zcwyou~]#find/-name'*.txt'查找txt和pdf结尾的文件[root@zcwyou~]#find.-name"*.txt"-o-name"*.pdf"2.2从某个目录查找文件从当前用户的家目录开始查找[root@zcwyou~]#find~-namezcwyou.txtfromthecurrent目录开始搜索[root@zcwyou~]#find.-namezcwyou.txt从/var目录开始搜索[root@zcwyou~]#find/var-namezcwyou.txt2.3忽略大小写查找文件中带abc的文件name,忽略大小写使用选项-iname[root@zcwyou~]#find/-iname*abc*2.4按文件类型搜索使用选项-type查找某一类型的文件,例如:b-块设备文件。d-目录。c-一个字符设备文件。p-管道文件。l-符号链接文件。f-普通文件。查找/etc目录下的所有目录并打印出来[root@zcwyou~]#find/etc-typed-print查找当前目录下除目录外的所有类型文件[root@zcwyou~]#find.!-typed-print查找/etc目录下的所有符号链接文件[root@zcwyou~]#find.!-typed-print[root@zcwyou~]#find.!-typed-print2.5根据目录深度搜索查找当前目录和深度限制为3的所有文件[root@zcwyou~]#find.-maxdepth3-typef2.6基本文件时间搜索格式:find.-typef时间类型UNIX/Linux文件系统每个文件都有三种时间类型:访问时间(-atime/day,-amin/minute):用户最后一次访问时间。修改时间(-mtime/day,-mmin/minute):文件最后修改的时间。更改时间(-ctime/day,-cmin/minute):文件数据元素(如权限等)的最后修改时间。搜索最近7天内访问过的所有文件[root@zcwyou~]#find.-typef-atime-7搜索正好7天前访问过的所有文件[root@zcwyou~]#find.-typef-atime7搜索访问时间超过7天的所有文件[root@zcwyou~]#find.-typef-atime+7搜索访问时间超过10分钟的所有文件[root@zcwyou~]#find.-typef-amin+10找出所有修改时间长于file.log的文件[root@zcwyou~]#find.-typef-newerfile.log2.7按文件大小查找使用格式:find.-typef-sizefilesize文件大小单位:b------块(512字节)c------字节w------字(2字节)k------千字节M------兆字节G------千兆字节查找大于10KB的文件[root@zcwyou~]#find.-typef-size+10k查找小于30M的文件[root@zcwyou~]#find.-typef-size-30M搜索等于55MB的文件[root@zcwyou~]#find.-typef-size55M2.8搜索后删除当前目录下的所有.test文件[root@zcwyou~]#find.-typef-name"*.test"-delete2.9根据文件权限/属主匹配在当前目录下查找权限为755的文件[root@zcwyou~]#find.-typef-perm755中查找权限为600以外的php文件当前目录[root@zcwyou~]#find.-typef-name"*.php"!-perm600找出当前目录下用户zcwyou拥有的所有文件[root@zcwyou~]#find.-typef-userzcwyou找出当前目录下用户组zcwyou拥有的文件所有文件[root@zcwyou~]#find.-typef-groupzcwyou3.结合其他工具查找3.1结合其他命令使用-exec选项查找当前目录下的所有根文件,并将归属更改为用户zcwyou[root@zcwyou~]#find.-typef-userroot-execchownzcwyou{};{}与-exec选项配合使用,匹配所有文件,然后会替换为对应的文件名在你的home目录下找到所有.txt文件并删除[root@zcwyou~]#查找$HOME/.-name"*.txt"-okrm{};例子中-ok和-exec的行为是一样的,只是会提示,是否执行相应的操作。3.2结合xargs使用find命令的-exec选项处理匹配到的文件时,find命令会将所有匹配到的文件传递给exec执行。但是有些系统对可以传给exec的命令长度有限制,所以find命令运行几分钟后,就会出现溢出错误。错误消息通常是“参数列太长”或“参数列溢出”。这就是xargs命令发挥作用的地方,尤其是find命令。find命令将匹配到的文件传递给xargs命令,而xargs命令一次只获取文件的一部分而不是全部,这与-exec选项不同。这样它就可以处理***获取的第一批文件,然后是下一批,依此类推。在某些系统中,使用-exec选项会启动一个相应的进程来处理每个匹配的文件,而不是一次性将所有匹配的文件作为参数执行;这样,在某些情况下会出现进程过多,系统性能下降的问题,所以效率不高;使用xargs命令时,只有一个进程。另外,使用xargs命令时,是一次获取所有参数还是分批获取,以及每次获取参数的个数,将根据该命令的选项和系统内核中对应的可调参数来决定。让我们看看xargs命令如何与find命令一起使用,并给出一些示例。找到系统中的每一个普通文件,然后用xargs命令测试它们属于哪种类型的文件[root@zcwyou~]#find.-typef-print|xargsfile在其中找到内存信息转储文件(coredump)整个系统,然后将结果保存到/tmp/core.log文件中:[root@zcwyou~]#find/-name"core"-print|xargsecho"">/tmp/core.log中使用grep命令所有普通文件在[root@zcwyou~]#find.-typef-print|xargsgrep"hostname"中搜索hostname这个词删除当前目录30天前的所有内容[root@zcwyou~]#find.-ctime+30-execrm-rf{};或[root@zcwyou~]#find./-mtime+30-print|xargsrm-f-r删除文件大小为零的文件xargs允许用户对匹配的文件执行几乎所有的命令。4.locate命令locate命令实际上是“find-name”的另一种写法,但比后者快得多,因为它不是搜索特定目录,而是搜索数据库。CentOS7数据库的位置是/var/lib/locatedb,CentOS6数据库的位置是/var/lib/mlocate/mlocate.db,这个数据库包含所有本地文件信息。Linux系统自动创建这个数据库。默认情况下,它每天自动更新一次,因此无法使用定位命令找到已更改的文件。为避免这种情况,您可以在使用locate之前使用updatedb命令手动更新数据库。以CentOS7.5的最小化安装为例。默认情况下系统没有集成这个工具,需要手动安装:安装locate工具:[root@zcwyou~]#yum-yinstallmlocate出现如下输出表示安装成功:Totaldownloadsize:113kInstalled大小:379k下载包:mlocate-0.26-8.el7.x86_64.rpm|113kB00:00:01运行事务检查运行事务测试事务测试成功运行事务安装:Vml1_6er4.x1ifymlocate-0.26-8.el7.x86_641/1已安装:mlocate.x86_640:0.26-8.el7完成!更新数据库,即将系统中的所有文件信息写入数据库/var/lib/mlocate/mlocate.db[root@zcwyou~]#updatedb查看.txt结尾的文件:[root@zcwyou~]#locate*.txt输出结果:/root/abc.txt/root/cisco1.txt/root/cisco2.txt/root/compress。txt/root/cp1.txt/root/cp2.txt/root/cut.txt/root/cut2.txt/root/diff1.txt/root/diff2.txt/root/test.txt/root/zcwyou.txt5。grep命令搜索文本内容5.1根据内容搜索,显示d开头的文件中所有包含test的行。[root@zcwyou~]#grep'test'd*显示aa、bb、cc文件中匹配test的行。[root@zcwyou~]#grep'test'aabbcc显示所有包含每行至少有5个连续小写字符的字符串的行[root@zcwyou~]#grep'[a-z]{5}'aa显示/中的文件usr/src目录(不包括子目录)包含测试行[root@zcwyou~]#greptest/usr/src显示/usr/src目录(包括子目录)中的文件包含测试行[root@zcwyou~]#grep-rtest/usr/src在zcwyou.txt文件中查找整个单词,而不是字符串的一部分(比如匹配'test',而不是'tester123'),[root@zcwyou~]#grep-wtestzcwyou.txt搜索不区分大小写。默认区分大小写[root@zcwyou~]#grep-iteszcwyou.txt查找关键字test,列出包含test的文件名,在[root@zcwyou~]#grep-ltest*.txt当前目录找到关键字test,列出不包含test的文件名,在当前目录下找到[root@zcwyou~]#grep-Ltest*.txt5.2递归搜索/var/log中符合条件的文件并其子目录,查找shutdown关键字的文件[root@zcwyou~]#grep-rshutdown/var/log5.3反向搜索“-v”参数可以打印出不符合条件的行的内容。在名称包含test的文件中找到不包含test的行。此时使用的命令为:[root@zcwyou~]#grep-vtest*test*6。whereis命令whereis命令只能用来搜索程序名,只能搜索二进制文件(参数-b)、man描述文件(参数-m)和源代码文件(参数-s)。如果省略该参数,则返回所有信息。whereis命令使用示例:查看pwd命令程序的所有位置和描述文件所在位置[root@zcwyou~]#whereispwd输出结果:pwd:/usr/bin/pwd/usr/share/man/man1/pwd.1.gz7.which命令which命令的作用是在PATH变量指定的路径中搜索某个系统命令的位置,并返回第一个搜索结果。也就是说,通过which命令,可以看到某个系统命令是否存在,以及命令执行到哪里了。[root@zcwyou~]#whichwget输出结果:/usr/bin/wget8。type命令查找wget程序位置[root@zcwyou~]#typewget输出结果:wgetis/usr/bin/wget查找du程序位置,使用选项-p,相当于which命令[root@zcwyou~]#type-pduoutput/usr/bin/du找到cd程序的位置,显示为builtin,也就是linux内置命令[root@zcwyou~]#typecd输出显示,cd命令是一个系统集成命令。cd是shellbuiltin用来查找ll程序的位置[root@zcwyou~]#typell输出显示ll是ls-l的别名。ll别名为`ls-l--color=auto'/本文已同步至博客站点,尊重原创,转载请在文中附上以下链接:https://www.linuxrumen.com/rmxx/176.html