Linux学习第十二篇--文件搜索(命令查询)

时间:2022-05-12 08:35:48

前言

今天是系统学习linux的第七天,书籍已经看了百分之二十左右,也就说这本书学完按照目前这个节奏大约需要一个月的时间,但是因为还要工作,所以不可能每天都有充足的时间去系统的学习,所以将时间适当的放开一些,希望自己能够在七月底学完这本书上的知识,
加油!

补充-file命令

在linux操作系统中,因为不像是windos那样,根据后缀区分文件类型,但是不代表我们没有办法区分出文件的类型,在linux系统中有一个命令--file. 我们可以通过file命令来查看文件的类型. file命令用来判断文件类型.该命令的具体的实现逻辑,可以使用man file命令查看.在其描述中大致将文件分为了三类:文本文件,可执行文件,其他文件. 当然该命令也有为数不少的参数,但是作为一个补充的命令就不在详细的描述了,有机会再补充篇里完善.

查找命令文件的位置

到目前为止,其实我们接触了很多的命令,比如上一篇学到几个命令,我们了解在linux中一切皆文件,命令自然不是例外,那么,我们如何找到我们命令文件的位置呢? 难道要挨个的在PATH对应的目录下一一寻找吗? 当然不用这么麻烦,linux系统中有几个可以用来搜寻文件的命令.

which命令--查找命令对应的文件

比如: which命令,顾名思义,这个命令用来命令对应着哪一个或者那些文件. 在which的描述文件中说,whic用于展示命令(可执行文件/脚本)的完全路径,
Linux学习第十二篇--文件搜索(命令查询) 在which的可选项中,其实值得一说也就只有-a选项了,这个命令的作用就是输出所有能在$PATH(PATH环境变量对应的目录)匹配的文件. 除非是需要进行更精确的查找控制.但是一方面个人觉得单纯的查询命令位置用不到这么多,而且还有许多可以替换which命令的手段, 比如,接下来要讲到的whereis/locate/find等命令.

whereis--和which差不多,但是功能不一样哟.

whereis命令也是一个非常好的命令查找命令.

Linux学习第十二篇--文件搜索(命令查询)

该命令的选项也比较多,比如b,用来限制查找结果为二进制文件,m用来查找说明文件,s用来限制结果为资源文件,u则表示不是b/m/s的文件. 而选项B,M,S则用来限制对应其小写选项搜索文件的目录(多个目录可以使用空格分隔).
前面说到的which和whereis命令都是用来查找命令对应的文件,还有一些用来查找所有文件的命令,比如find和locate命令.

Find--用来查找文件,但是很慢

find命令是非常强大的搜寻命令,其功能比较强大,但是他的效率却相对与locate命令来说要慢得多,应为find命令需要遍历整个硬盘. Linux学习第十二篇--文件搜索(命令查询)
find命令的作用在层级目录中搜寻文件,他很强大,选项也很多.可以根据指定的选项和表达式来有目的的查找文件,但是使用这个命令有很多需要注意的地方,具体的可以详细的阅读以下find文件的说明文档. find命令的选项非常多限于篇幅的原因,无法对其一一介绍,这里只是介绍一些我认为常用的,剩下的命令在需要使用的时候,可以使用man find来确定需要的选项.
find命令使用的格式: find [被检索的路径] [选项及其参数] [查出数据后需要执行的动作]
对于find命令来说,我们要了解一下+n/-n/n的区别.+n代表比n大,-b代表比n小,n代表等于n,关于这个区别,我们先要有一个概念,待会在具体的命令中会通过使用来进一步的了解这一块内容. 下面的  [n] 含义等同该描述. 在使用find命令时关于时间选项有很多,我们可以将其分为四类,基于atime,基于ctime,基于mtime和其他,其中atime,ctime.mtime基本相似,区别只在与选项本身及对应的含义. 基于atime的命令有: atime +n 文件的最后一次访问在几天之前(不含n天). atime -n 文件的最后一次访问时间在几天之内 atime n 文件的最后一次访问时间是在第几天,注意和+n区别. amin [n]:文件最后一次访问在[n]分钟之前,这个n的取值和atime上的是一样的,只不过含义从天变成了分钟.  anewer 文件 ,查找最后一次访问时间在指定文件之后的文件.如果想要查找修改或者创建时间的话,只需要将anewer改成mnewer或者cnewer即可. 比如我们可以使用find -atime -10  来查找十天之前访问的文件.
当然前面说的只是关于时间的选项,下面聊一聊关于根据文件所属组或者所属者查找. 使用选项-gid可以查找文件所属组的群组ID为指定gid的数据. 使用选项-group可以查找指定组的文件. 使用-nogroup可以查找没有文件所属组的文件(或者所属组不存在). 使用-uid可以查找文件所属者为指定用户id的文件. 使用-user可以查找指定用户的文件. 使用-nouser可以查找没有用户的文件(或者所属者不存在),

基于文件类型查找文件: 使用命令-empty可以查找空文件或者空目录
使用命令 -executable可以查找可执行文件.
使用-type可以查找指定类型的文件
基于文件大小查找文件: 使用命令-size [n]可以查找指定大小的文件,常用的修饰大小的参数(b/c/w/K/M/G).
根据文件名查找文件 使用命令-name 可以查找指定名称的文件 使用命令-iname可以查找指定名称的文件(不区分大小写).
根据文件权限查找文件 使用命令-perm [+-][权限]可以用来根据权限来查找文件. 当使用perm + 权限的时候,是查找目标文件权限包含该权限的文件. 当使用perm -权限的时候,是查找目标文件权限被该权限包含的文件. 当使用perm 权限 时,则表示查找权限为该权限的文件. 哎呀,,,说简单的写一下部分选项就好,结果没忍住又写了这么多....Linux学习第十二篇--文件搜索(命令查询)
关于选项最后在补充一条吧, 我们在指定被检索的路径的时候,可以通过-path 选项来使用正则表达式. 额咳咳...好了...find命令的选项到此为止,接下来讲讲find命令的动作参数....没错...find命令还没有讲完... 在对find命令最开始时我们提到了find命令的格式:
find命令使用的格式: find [被检索的路径] [选项及其参数] [查出数据后需要执行的动作]
接下来主要讲解的就是find命令查出数据后执行的动作,
我们可以使用 -delete 动作,来删除查找出来的文件.我们还可以使用 -exec 命令来执行一些命令.比如 find -atime -10 -iname mail -exec ls -al {} \;
Linux学习第十二篇--文件搜索(命令查询)

这条命令的作用是查找最后一次访问时间在十天之前,且文件名称叫 mail(不区分大小写)的文件,然后将这些文件的信息以长数据展示出来.详细解析一下这条命令,命令参数 -atime -10 表示查询最后一次访问时间在十天之前的文件. -iname      表示不区分大小写查找文件名称为mail的文件.                  -exec    表示数据查询后执行命令.这里就是 ls -al命令. ls -al {} \;   表示exec需要执行的命令,{}表示find命令查询出来的内容. \;表示命令结束.
Linux学习第十二篇--文件搜索(命令查询)
OMG,我终于写完了find命令....接下来就只剩下今天最后一个文件查找命令了 -- locate

locate 自带数据库的命令


和标题一样locate命令是一个自带数据库的命令.他查询文件的时候,不需要去遍历硬盘,只需要查询他自己的数据库就可以,所以他很快.他就好比The Flash,但是他有一点不足之处就是,他的数据库并不是实时更新的,而是定时更新的,基本是一天一次.所以有时候会出现查出的文件并不存在,或者新建的文件查不出来,这些都是因为他的数据库还没有更新,当然我们可以手动使用updatadb来更新他的数据库.注意一点因为updatedb命令需要遍历数据库,所以可能会耗费一定的时间.
接下来我们介绍一下这位 flash command--locate.
Linux学习第十二篇--文件搜索(命令查询)

在locate命令的描述文档中介绍locate命令是根据文件名称查找文件的.

Linux学习第十二篇--文件搜索(命令查询)


locate的选项也不少,但是通常来讲,我们一般只会使用到 -A选项和-e选项. A选项表示将显示所有的查询结果. e选项用于校验查出来的文件是否存在,如果不存在则不显示.
好啦,到这,这篇blog就结束了.