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

相关推荐
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
Brilliantwxx4 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做4 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
噜~噜~噜~4 小时前
操作系统笔记-2.3.5.1.1生产者-消费者问题
笔记·操作系统
yi.Ist4 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
一池秋_6 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
惜离殇6 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
骐骥18 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦8 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
闲云野鹤在人间8 小时前
OpenStack架构介绍和安装流程
linux·网络·架构·openstack