本文介绍在
Linux
下,查找文件位置的五种命令:find
、locate
、whereis
、which
和type
。
▚ 01 find
1.1 find简介
-
Linux find
命令非常适合搜索文件和目录,也可以将搜索结果传递给其他进程做进一步处理。 -
Linux find
命令功能强大且灵活。它可以使用大量不同的条件来搜索文件和目录,而不仅仅是文件名。例如,它可以搜索空文件、可执行文件或特定用户拥有的文件。它可以按文件的访问或修改时间查找和列出文件,您可以使用正则表达式模式,默认情况下它是递归的,并适合与命名管道(FIFO
缓冲区)等协同工作。 - 如果我们能够获取
find
命令的输出并自动将其用作其他命令的输入,则可以对为我们查找发现发现的文档和目录进行一些操作。这种方法可以利用这种能力,把事情提升到另一个层次。 - 将一个命令的输出通过管道传输到另一个命令的原理是
Unix
衍生操作系统的核心特征。让一个进程做一件事并做好,并期望它的输出可以是另一个进程的输入——甚至是一个尚未成文的进程,这样的设计原则通常被描述为“Unix
哲学”Unix philosophy
。然而,一些核心实用进程并不接受管道输入,如mkdir
。 - 为了解决这个缺点,
xargs
命令可用于打包管道输入并将其提供给其他命令,就好像它们是该命令的命令行参数一样。这实现了与直接管道几乎相同的效果。尽管是“几乎相同”,但不是“完全相同”,因为shell
扩展和文件名通配可能存在意想不到的差异。 - 我们可以将
find
与xargs
结合使用,以便对找到的文件执行某些操作。这是一种冗长的方法,但是我们可以将查找到的文件输入到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 "指定目录" "指定条件" "指定行为"
- 指定目录:会搜索该目录,以及其所有的子目录;默认情况是当前目录。
- 指定条件:对搜索文件的特征描述。
- 指定行为:对搜索结果进行特定的处理。
实例:
- 搜索当前目录以及子目录,显示所有文件名后缀为
.txx
的文件。
find . -name "*.txt"
- 搜索当前目录以及子目录,显示所有文件名后缀为
.txx
的文件的详细信息。
find . -name "*.txt" -ls
- 搜索系统,显示所有文件名后缀为
.txx
的文件。
find . -name "*.txt"
- 搜索当前目录以及子目录,显示过去5分钟内更新过的普通文件 (排除特殊文件和目录)。
find . -type f -mmin 5
- 搜索当前目录以及子目录,显示过去7天更新过的文件。
find . -ctime 7
注意:
find
命令中-name
后的搜索路径使用通配符时,必须将该路径使用引号括起来!!!
▚ 02 locate
-
locate
命令相当于find -name
,但是因为locate
是搜索一个数据库/var/lib/locatedb
,所以locate
命令的执行速度会更快。该数据库包含本地所有文件的信息,并且每天自动更新一次,会导致查找不到最新更新过的文件。为了解决这个问题,可以先使用updatedb
命令更新数据库,再使用locate
进行查找。
- 搜索
/home
目录及子目录下,所有以a开头的文件。
locate /home/a
- 搜索
/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
路径、bash
的man
手册页路径
▚ 04 which
-
which
命令是在$PATH
变量指定的路径中,搜索当前系统命令的位置,并返回第一个搜索到的结果。因此,使用which
命令的目的是:确认当前系统是否存在某个命令,和该命令的实际位置。
实例:
which mkdir
输出信息为:
/usr/bin/mkdir
此为
bash
可执行程序的绝对路径。
▚ 05 type
-
type
命令可用于区分某个命令是shell
自带的,还是由shell
外部的二进制文件提供的。当时外边命令时,可以使用-p
参数,来显示该命令的路径。
实例1:
type cd
- 会显示
cd
是shell
的自带命令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
发布评论