【Linux】文件搜索
在Linux中,查找文件的方法有很多,现在介绍常见的几个工具。
locate
这是较为简单的文件搜索命令。
locate命令通过快速搜索数据库,从而找到路径名与给定字符串相匹配的文件,并输出结果。
命令格式
命令格式如下:
|
|
options
常见的选项如下:
-
-A:-all,只输出同时匹配所有模式的文件。默认情况下,文件只要匹配某个模式就会被打印。 -
-V: 打印版本信息。
pattern
搜索时,不要求文件和模式完全匹配,即搜索支持通配符。
数据库
linux系统中通常会开启一个定时任务,然后每隔一段时间执行一次updatedb程序命令,从而生成新的数据库文件。locate搜索时,会在这个数据库文件中进行查找。
linux系统中的数据库通常位于/var/lib/mlocate/mlocate.db。
locate搜索到的结果,并不一定是当前的最新的文件。如果想获得最新的结果,可以切换到root用户,并执行updatedb。
find
find命令除了可以根据文件名搜索文件外,还可以根据各种属性进行文件查找,其支持的特性非常丰富。
命令格式
find的命令格式如下:
|
|
如果省略path,则默认在当前目录下搜索。
常见选项参数
常见的选项为:
-
-cmin。后跟参数:
-
n: n分钟前的那个时刻,内容或属性改变的文件或目录。 -
+n: 超过n分钟。 -
-n: 不足n分钟。
-
-
-cnewer file。内容或属性的修改时间晚于
file的文件或目录。 -
-ctime后跟参数:
-
n: n*24小时前的那个时刻,内容或属性发生改变的文件或目录。 -
+n: 超过n*24小时。 -
-n: 不足n*24小时。
-
-
-empty匹配空文件或空目录。
-
-group name匹配属于
name组的文件或目录,name可以是组名,或者组ID。 -
-name pattern和通配符匹配的文件或目录。
-
-iname pattern和
-name类似,只是文件或目录不区分大小写。 -
-inum n匹配索引节点是n的文件,通常用于查找硬连接。
-
-mmin后跟参数:
-
n: n分钟前的那个时刻,内容被修改的文件或目录。 -
+n: 超过n分钟。 -
-n: 不足n分钟。
-
-
-mtime后跟参数:
-
n: n*24小时前的那个时刻,内容被修改的文件或目录。 -
-n: 不足n小时。 -
+n: 超过n小时。
-
-
-newer file匹配内容的修改时间晚于
file的文件或目录。 -
-nouser匹配不属于有效用户的文件或目录。当用户被删除时,该命令可以用于删除无用文件。
-
-nogroup匹配不属于有效用户组的文件或目录。
-
-perm mode与指定权限匹配的文件或目录。
-
-samefile file与
-inum类似,匹配与file具有相同inode的文件。 -
-size后跟参数:
-
n: 匹配大小等于n的文件或目录。 -
+n: 匹配大小超过n的文件或目录。 -
-n: 匹配大小不足n的文件或目录。
n的计量单位可以是:
-
b: 512字节的块。 -
c: 字节,如-size 1c。 -
w: 两个字节的字。 -
k: KB。 -
M: MB。 -
G: GB。
-
-
-type t匹配
t类型的目标。t可以是:-
b: 块设备文件。 -
c: 字符设备文件 -
d: 目录。 -
f: 普通文件。 -
l: 符号链接。
-
-
-user name匹配属于
name用户的文件或目录,name可以是用户名,或者用户ID。
逻辑操作
逻辑操作也是options中的一种。
-
-and:将多个检验条件以“逻辑与”的关系组合起来,表示“逻辑与”的关系时,可以省略该操作符。简写为-a。 -
-or:将多个检验条件以“逻辑或”的关系组合起来,简写为-o。 -
-not:匹配使该操作符之后的条件为假的文件或目录。 -
():默认情况下,find命令从左向右进行运算,而括号()可以改变运算优先级。通常()前需要使用引号或者反斜线,如\(\)。
逻辑操作符采用惰性运算,即如果操作符左边的条件能确定最终结果,就不再执行右边的操作。
其他选项
find命令还有一些其他的常见选项:
-
-depth:要求find先处理完文件,再处理目录。 -
-mindepth levels:从该层级的子目录开始搜索。 -
-maxdepth levels:搜索的最大子目录层级。 -
-mount:不去遍历挂载在其他文件系统上的目录。 -
-noleaf:要求find程序不要以“正在搜索类UNIX文件系统“为假设来优化搜索,在DOS/Windows系统上会用到该选项。
path
如果省略path,则默认在当前目录下搜索。
expression
找到文件后,就可以根据expression对文件进行处理了。
find中有一些预定义的动作:
-
-delete:删除匹配文件。 -
-ls:以标准格式输出匹配文件。 -
-print:输出匹配文件,默认情况下就是执行该操作。 -
-quit:一旦匹配成功就退出。
find还可以根据需要自定义动作,自定义方法为:
|
|
上述方法会对每个匹配文件执行一遍自定义命令,如果只想对所有匹配文件执行一次命令,可以使用下述方法:
|
|
whereis
whereis用来查找满足条件的二进制文件、帮助文件和源代码文件。
具体用法
用法为:
|
|
常见选项
-
-b:只搜索二进制文件。 -
-B <目录>:指定二进制文件搜索路径。 -
-m:只搜索man帮助文档。 -
-M <目录>:指定帮助文档搜索路径。 -
-s:只搜索源代码文件。 -
-S <目录>:指定源代码文件搜索路径。 -
-l:输出有效查找路径。
文件分类方式
whereis有一套自己的文件搜索方式,它规定了二进制文件、帮助文档或者源代码文件的搜索目录。
使用whereis -l即可查看具体搜索路径。
which
which用于在PATH路径中查找可执行程序,并输出具体路径。如:
|
|
总结
以上就是Linux中较为常见的文件搜索工具,各自无优劣之分,可以根据需要选择合适的使用。