Linux 查找命令

前言

学习 Linux 的历程可谓是一波三折,从最基础的命令,逐渐上升到系统编程,再到后期的网络编程,好像什么都学了点,但是说起这每一点都似乎说不出个所以然来,还记得第一遍不那么完整地看完Linux的教程,我花了大三零零散散的几个月,这个时候的我刚草草结束C++的学习,因为急着赶进度,我甚至跳过了C++的最后几节最重要的课(后来也让我追悔莫及),Linux的环境搭建我都一直没有动作,动手能力非常差,拿着 XShell 一直做原始人,学的也很拖拉,最后的结果就是学习的效果非常拉胯,可以说是什么都没往脑子里进,什么都是只会一点皮毛,加上我在这期间也没有坚持跟着老师上课敲,课后的作业也没有做,学了就跟没学一样,所以接下来关于Linux 的所有博客都是属于我的忏悔录,是为那个怯于动手,惰于动脑的我的忏悔,期望能够弥补我的基础

在使用 Linux 系统的时候,我们经常会需要查找某些文件,但是大多数情况下我们并不能确定这些文件的具体位置,这样的话就非常浪费我们的时间,Linux 为我们提供了很多用于文件搜索的命令,如果需求比较简单可以使用 locate ,which,whereis 来完成搜索,如果需求比较复杂可以使用 find grep (PS: 除了locate,其他的我都用到过,但是一直不求甚解,不知其所以然)

一、find

find 是Linux 中一个搜索功能非常强大的工具,它的主要功能是根据文件的属性,查找对应的磁盘文件,比如我们常用的一些属性,文件名,文件类型,文件大小,文件的目录深度等,下面基于这些常用数据来讲解一些具体的使用方法

1.1 文件名(-name)

根据文件名进行搜索有两种方式:精确查询模糊查询,关于模糊查询必须要使用对应的通配符,最常用的有两个,分别为 * 。其中*** 可以匹配零个或者多个字符**, ? 用于匹配单个字符

如果我们进行模糊查询,建议将带有通配符的文件名写到引号中(单引号或者双引号都可以),这样可以避免搜索命令执行失败(不加引号,某些情况下会这样)

如果需要根据文件名进行搜索,需要使用参数 -name

模糊搜索:

精确搜索:

1.2 文件类型(-type)

我们知道Linux 中有七种文件类型,我们还可以通过 find 对指定类型的文件进行搜索,该属性对应参数为 -type ,其中每种类型都有对应的关键字:

1.3 文件大小(-size)

如果需要根据文件大小进行搜索,需要使用参数 -size .关于文件大小的单位有很多,可以根据实际需求选择,常用的分别有 k M G

在进行文件大小判断的时候,需要指定相应的范围,涉及的符号有两个分别为:(+)(-)

1.4 目录层级

因为Linux 的目录是树状结构,所有的目录可能有很多层,在搜索某些属性的时候可以指定只搜索几层目录,相关的参数有两个,分别为:-maxdepth-mindepth

这两个参数不能单独使用,必须和其他属性一起使用,也就是搜索某几层目录中满足条件的文件

1.5 同时执行多个操作

在搜索文件的时候如果在一个 find 执行多个操作,通过管道(|)的方式是不通的,比如:

要实现上面的需求,需要在 find 中使用execok, xargs,这样就可以在find命令执行完毕之后,再执行其他的子命令了

1.5.1 exec

-exec 是find 的参数,可以在exec参数后添加其他需要被执行的shell命令

find 添加了exec参数之后,命令 尾部需要加一个后缀 { } \ ; 注意{}和\之间需要一个空格

在参数 -exec 后添加的shell 命令处理的是find搜索之后的结果,find 的结果会作为新添加的shell命令的输入,最后在终端上输出最终的处理结果

1.5.2 ok

-ok 和 -exec 都是 find 命令的参数,使用方式类似,但这个参数是交互式的,在处理 find 的结果的时候,会向用户发起询问,比如在删除搜索结果的时候,为了保险起见,就需要询问机制了

1.5.3 xargs

在使用 find 的 -exec 参数时,需要在指定的子命令尾部添加几个特殊字符 {}\; 一不小心就容易写错,有一种看寄来更加直观、书写更加简便的方式,我们可以使用xargs 替换掉-exec参数,而且在处理数据的时候 xargs 更高效,有了xargs 的加持我们就可以在 find 命令中直接使用管道完成前后命令的数据传递

二、grep

和 find 不同, grep 命令用于查找文件里符合条件的字符串,grep 命令中有几个常用参数

三、locate

我们可以将 locate 看做是一个简化版的 find ,使用这个命令我们可以 根据文件名搜索本地的磁盘文件,但是 locate 的效率要比 find 要高很多,原因在于它不搜索具体目录,而是搜索一个本地的数据库文件,这个数据库中含有本地所有的文件信息,Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最近变动过的文件,为了避免这种情况,可以在使用之前,先使用updatedb命令,手动更新数据库

locate 的常用参数:

①搜索所有目录下以谬个关键字开头的文件

②搜索指定目录下以某个关键字开头的文件,指定的目录必须要使用绝对路劲

③搜索文件的时候,忽略文件名的大小写,使用参数 -i

④列出前N个匹配到的文件名称或路径名称,使用参数 -n

⑤基于 正则表达式 进行文件名匹配,查找符合条件的文件,使用参数 -r

相关推荐
basketball6161 小时前
软考中级网络工程师 第4章 无线通信网 备考总结
linux·服务器·网络·网络工程师·软考
好评1242 小时前
【Linux】进程信号
linux·运维·服务器
zhangrelay2 小时前
ROS 2 Lyrical 第4章 URDF机器人建模与Gazebo Garden仿真
linux·笔记·学习·ubuntu·机器人·ros2
wuminyu2 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
xianyuCcCcCCCcc2 小时前
Nginx 深度解析:从基础架构到反向代理与负载均衡实战全解
linux·运维·nginx·bash·负载均衡
Dave1205462 小时前
AI Agent学习 Day14:LangGraph进阶 —— 条件分支、Tool Node与Memory持久化
人工智能·学习
爱折腾的小码农3 小时前
解决Navicat 17 Premium Lite在Linux上运行报错“LIBSYSTEMD_251‘ not found”问题
linux·运维
疯狂打码的少年3 小时前
【数据结构】串的模式匹配:KMP算法(重点)
数据结构·笔记·算法
一米阳光86613 小时前
软考(中级)软件设计师核心笔记(8)数据结构——线性结构、数组、矩阵
数据结构·笔记·职场发展·软考·软件设计师·中级职称