本文介绍在Linux下,查找文件位置的五种命令:findlocatewhereiswhichtype

▚ 01 find


1.1 find简介

  • Linux find命令非常适合搜索文件和目录,也可以将搜索结果传递给其他进程做进一步处理。
  • Linux find 命令功能强大且灵活。它可以使用大量不同的条件来搜索文件和目录,而不仅仅是文件名。例如,它可以搜索空文件、可执行文件或特定用户拥有的文件。它可以按文件的访问或修改时间查找和列出文件,您可以使用正则表达式模式,默认情况下它是递归的,并适合与命名管道(FIFO缓冲区)等协同工作。
  • 如果我们能够获取find命令的输出并自动将其用作其他命令的输入,则可以对为我们查找发现发现的文档和目录进行一些操作。这种方法可以利用这种能力,把事情提升到另一个层次。
  • 将一个命令的输出通过管道传输到另一个命令的原理是Unix衍生操作系统的核心特征。让一个进程做一件事并做好,并期望它的输出可以是另一个进程的输入——甚至是一个尚未成文的进程,这样的设计原则通常被描述为“Unix哲学” Unix philosophy。然而,一些核心实用进程并不接受管道输入,如mkdir
  • 为了解决这个缺点,xargs命令可用于打包管道输入并将其提供给其他命令,就好像它们是该命令的命令行参数一样。这实现了与直接管道几乎相同的效果。尽管是“几乎相同”,但不是“完全相同”,因为shell扩展和文件名通配可能存在意想不到的差异。
  • 我们可以将findxargs结合使用,以便对找到的文件执行某些操作。这是一种冗长的方法,但是我们可以将查找到的文件输入到xargs中 ,然后通过管道传输到tar中,以创建这些文件的存档。我们将在包含许多帮助系统PAGE文件的目录中运行此命令。
find ./ -name "*.page" -type f -print0 | xargs -0 tar -cvzf page_files.tar.gz

详情请参考博文:How to Use the find Command in Linux (howtogeek)


1.2 find使用方法

Linux find命令用来在指定目录下查找文件。当不加任何参数时,find命令仅会在当前目录下查找子目录与文件,并将所有查找到的子目录和文件进行显示。

  • find是最常见且强大的文件查找命令,可以用于查找任何目标文件。使用格式为:
find "指定目录" "指定条件" "指定行为"
  • 指定目录:会搜索该目录,以及其所有的子目录;默认情况是当前目录。
  • 指定条件:对搜索文件的特征描述。
  • 指定行为:对搜索结果进行特定的处理。

实例:

  1. 搜索当前目录以及子目录,显示所有文件名后缀为.txx的文件。
find . -name "*.txt"
  1. 搜索当前目录以及子目录,显示所有文件名后缀为.txx的文件的详细信息。
find . -name "*.txt" -ls
  1. 搜索系统,显示所有文件名后缀为.txx的文件。
find . -name "*.txt"
  1. 搜索当前目录以及子目录,显示过去5分钟内更新过的普通文件 (排除特殊文件和目录)。
find . -type f -mmin 5
  1. 搜索当前目录以及子目录,显示过去7天更新过的文件。
find . -ctime 7

注意:find命令中-name后的搜索路径使用通配符时,必须将该路径使用引号括起来!!!



▚ 02 locate


  • locate命令相当于find -name,但是因为locate是搜索一个数据库/var/lib/locatedb,所以locate命令的执行速度会更快。该数据库包含本地所有文件的信息,并且每天自动更新一次,会导致查找不到最新更新过的文件。为了解决这个问题,可以先使用updatedb命令更新数据库,再使用locate进行查找。
  1. 搜索/home目录及子目录下,所有以a开头的文件。
locate  /home/a
  1. 搜索/home目录及子目录下,所有以a开头的文件,但忽略大小写。
locate  -i /home/a


▚ 03 whereis


  • whereis命令仅用于程序名的搜索,只能搜索二进制文件(-b)、man说明文件(-m)和源代码文件(-s)。若没有参数,但显示所有的查找结果。

查找bash的位置:

whereis bash

输出信息为:

bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

注意:以上输出信息从左至右分别为查询的程序名、bash路径、bashman手册页路径


▚ 04 which


  • which命令是在$PATH变量指定的路径中,搜索当前系统命令的位置,并返回第一个搜索到的结果。因此,使用which命令的目的是:确认当前系统是否存在某个命令,和该命令的实际位置。

实例:

which mkdir

输出信息为:

/usr/bin/mkdir

此为bash可执行程序的绝对路径。


▚ 05 type


  • type命令可用于区分某个命令是shell自带的,还是由shell外部的二进制文件提供的。当时外边命令时,可以使用-p参数,来显示该命令的路径。

实例1:

type cd
  • 会显示cdshell的自带命令 cd is a shell builtin

实例2:

type grep
  • 会显示grep是一个外部命令,并显示该命令的路径。


参考博客

How to Use the find Command in Linux (howtogeek)

Linux find 命令 | 菜鸟教程 (runoob)

Linux whereis命令 | 菜鸟教程 (runoob)

更多推荐

【文本位置查找】Linux中查找文件位置的命令,find、locate、whereis、which和type