Linux经常使用命令之文件查找which、find、locate命令讲解

在以前的课程中,咱们介绍了Linux系统的经常使用文件处理命令和权限管理命令,今天咱们继续来学习Linux操做系统的其余处理命令。数据库

一、文件搜索命令 which 命令解释vim

  • 命令名称:which
  • 命令所在路径: /usr/bin/which
  • 执行权限:全部用户
  • 命令功能:显示系统命令所在目录
  • 语法:which [命令名称]

使用举例

好比咱们想要查找 ls 命令所在目录:windows

$ which ls学习

image

注意:which命令只能用于查找命令所在路径,不能查找普通文件,好比想用该命令查找名为ffile1的文件,执行 which file1以后是会提示no file:操作系统

image

相关命令

which 命令功能相似的命令 whereis,使用方法和which同样,好比查找 chmod命令所在位置:命令行

$ whereis chmod3d

二、文件搜索命令 find 命令解释unix

  • 命令名称:find
  • 命令所在路径: /usr/bin/find
  • 执行权限:全部用户
  • 命令功能:在指定目录下查找任何文件或目录
  • 语法:find [搜索路径] [参数] [查找关键字]

其实这条命令有点相似于在咱们windows系统里面查找文件,只不过在Linux里面是用命令行来查找而已。find命令中,参数有几十种,咱们介绍经常使用的几种。code

使用举例

1、根据文件名来查找:好比我想在/etc目录查找名为dnf的文件

$ find /etc -name dnfblog

你们能够看到,为我找出了2个名为dnf的文件。这里提醒一下你们,这里查找是全匹配查找,并非模糊查找,意思是这里只会为我查找名称全名为dnf的文件,而不是查找名称包含dnf的文件。

image

可是在有些状况下,咱们确实须要进行模糊查找,好比忘记了文件的全名,可能只记得文件名是dnf开头,那么咱们能够用一个通配符 * 来进行查找:

$ find /etc -name dnf*

image

你们能够看到,为我查找出来了5个以dnf开头的文件,其中包含了全名是dnf的文件,所以咱们能够清楚 * 号是匹配任意字符。

还有一种状况,好比我清晰的记得文件是dnf开头的,文件全名有8个字符,后面5个字符不记得了。在这种状况下,咱们能够用 ? 来进行辅助查找,一个?匹配一个字符:

$ find /etc -name dnf?????

image

咱们能够看到,为我查找出了2个文件名为dnf开头,全名是8个字符的文件。

注意:使用 find 查找文件,占用系统的资源越少越好,所以咱们在查找的时候,定位路径越精确越好,查找的关键字越全越好。并且最好不要在系统根目录下面查找,这样会全盘扫描,会消耗系统的大量资源。

2、根据文件大小来查找: -size

这里文件大小通常都是以block数据库块来计算的,一个数据块=512字节,所以1KB=2个数据块。好比咱们要查找文件大小为1M的文件:

$ find /etc -size +2048

你们注意,在数字2048前面我用了一个+号,表示文件大于1M。若是是小于1M,咱们能够用-号:

$ find /etc -size -2048

  • 根据文件的全部者查找: -user

好比我要查找全部者为系统用户chuan的用户的文件:

$ find /etc -user chuan

3、根据时间来查找

这个属性有点复杂,能够按照天来查找,也能够按照分支来查找:

天:ctime,atime,mtime

分钟:cmin,amin,mmin

  • c-change:表示文件的属性被修改,包含全部者、所属组、权限
  • a-access:表示被访问、浏览过
  • m-modify:表示文件的内容被修改过

这里还有个要注意的,就和咱们在使用-size属性同样,有-+的辅助, - 表示以内,+ 超过。好比咱们查找2分钟内被修改过的文件:

$ find /etc -mmin -2

4、根据文件类型来查找:-type

经常使用的类型有二进制文件 f,软连接文件 l,目录 d。好比咱们要查找类型为f的文件:

$ find /etc -type f

若是咱们想要在/home路径查找名称为 up开头的目录,该如何查找呢?这里咱们就要用到Linux查找的链接符:

  • -a and 逻辑与链接
  • -o or 逻辑或连接

那么咱们的命令能够写成:

$ find /home -name up* -a -type d

5、链接执行符:-exec

在上一个说到根据文件类型来查找的时候,咱们有用到查找链接符 -a-o,这里再介绍一个相对复杂一点的链接符 -exec。意思是:在执行命令查找完以后,再接着对执行结果进行操做。

好比咱们查找 /var/log 目录下面文件名为 dnf 开头的文件,并列出这些文件的属性:

$ find /var/log -name dnf* -exec ls -l {} \;

image

你们确定很疑惑这条命令中 {} \; 是什么意思,其实这个是固定格式,你们记住就好了。{} 表示 find 查询的结果

三、locate 命令使用详解

  • 命令名称:locate
  • 指令英文原义:list files in databases
  • 命令所在路径: /usr/bin/find
  • 执行权限:全部用户
  • 命令功能:寻找文件或目录
  • 语法:locate [查找关键字]

该命令在unix系统里面不提供,只有Linux系统才有

使用举例

好比要查找 service 的文件:

$ locate service

执行这条命令,你们会发现查找速度很是快,比 find 命令查找文件快多了。那有些同窗就会说,我就用 locate 命令查找文件,干吗还要 find 命令呢?

为解答这个问题,咱们先建立一个新的文件,好比我在 test 目录新建一个 file3的文件,而后再执行命令 $ locate file3,发现并无查找结果,可是这个文件缺失是存在的。

image

这是为何呢?由于执行 locate 命令查找,是经过Linux文件数据库去查找,并非扫描磁盘,所以查找速度会要比 find 查找快不少。而我刚新建的文件,并无同步到Linux的文件数据库里面去,所以经过 locate 是查找不到的。那么咱们如何把新建的文件同步到Linux文件数据库呢?有两种方式:

  • 等待Linux系统自动执行任务
  • 手动执行同步命令

因此接下来咱们来说解Linux的另一个命令:updatedb

四、updatedb 命令使用详解

  • 命令名称:updatedb
  • 指令英文原义:update the slocate database
  • 命令所在路径: /usr/bin/updatedb
  • 执行权限:全部用户
  • 命令功能:创建系统目录文件的数据库
  • 语法:updatedb

$ updatedb

image

五、grep 命令使用详解

  • 命令名称:grep
  • 命令所在路径: /bin/grep
  • 执行权限:全部用户
  • 命令功能:在文件中搜索字符串匹配的行并输出
  • 语法:grep [指定字符] [源文件]

注意:这个命令并非搜索文件,而是在文件中搜索匹配的字符串,并输出这一行。可是 grep 的做用不只仅如此,后面教程中咱们会继续介绍该命令的使用。

使用举例

好比我要查找 /etc/services 文件里面的 tftp相关的,若是咱们直接用以前学习的命令好比 catvimmore等命令,发现文件内容太长,太难找了,这种状况下咱们执行:

$ grep tftp service

image

以上4种命令就是咱们平常中使用最多的文件搜索相关的命令以及使用方法。

image

相关文章
相关标签/搜索