【Linux】命令行下的增删查改之“查找“

embedded/2024/10/15 3:38:01/

根据路径和条件搜索指定文件(find)

find 命令是 Linux 系统中一个极为重要和强大的工具,用于在目录树中递归查找文件和目录,能够根据多个条件进行筛选。

它适用于进行系统维护、文件管理和日志分析时文件的搜寻,既然其查找方式递归且从根目录开始,所以其系统资源消耗相对其他查找命令大一些;

使用 find 的时候,注意输出可能会非常庞大,尤其是在搜索全系统时,此时可以用 -print 选项将结果输出到文件中,减轻终端压力;

此外确保有权限访问你所指定的目录,如果没有适当的权限,命令可能会输出错误信息。

find [路径] [参数]

参数:

-name

匹配名称

-perm

匹配权限(mode为完全匹配,-mode为包含即可)

-user

匹配所有者

-group

匹配所有组

-mtime -n +n

匹配修改内容的时间(-n指n天以内,+n指n天以前)

-atime -n +n

匹配访问文件的时间(-n指n天以内,+n指n天以前)

-ctime -n +n

匹配修改文件权限的时间(-n指n天以内,+n指n天以前)

-nouser

匹配无所有者的文件

-nogroup

匹配无所有组的文件

-newer f1 !f2

匹配比文件f1新但比f2旧的文件

-type b/d/c/p/l/f

匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)

-size

匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)

-prune

忽略某个目录

-exec …… {}\;

后面可跟用于进一步处理搜索结果的命令

实例:

  • 查找特定日期的文件:使用 -type f -mtime

查找过去 30 天内修改过的文件

find /path/to/directory -type f -mtime -30

  • 查找并删除特定类型的文件:使用-delete

慎用删除!

慎用删除!

慎用删除!

find /tmp -name "*.tmp" -delete

  • 在/etc目录中搜索所有大约1M大小的文件:
find /etc -size +1M 
  • 在/home目录中搜索所有属于指定用户的文件:
find /home -user username
  • 全盘搜索系统中所有类型为目录,且权限为1777的目录文件:
find / -type d -perm 1777

查找命令文件(which)

用于查找命令文件,仅仅查看所在路径,不需要其他任何其他信息,那么这将会是最好的选择。

which [参数] 文件

参数:

-n

指定文件名长度(不含路径)

-p

指定文件名长度(含路径)

-w 

指定输出时栏位的宽度

-V

显示版本信息

实例:

  • 查找某个指定命令文件所在位置:
which reboot

显示命令及相关文件的路径(whereis)

whereis 命令是一个用于定位二进制文件、源代码文件和手册页的 Linux 命令。

它与 find 命令和 locate 命令相比更快,因为它使用预先构建的数据库查找文件,通常只会在系统的特定目录中查找(如 /usr/bin、/usr/local/bin 和手册页目录)。

搜索范围是有限的: whereis 主要针对可执行文件、源代码和手册页的查找,不适合查找其他类型的文件。它只会在系统默认的路径中查找,而不会递归地搜索子目录。

输出信息简洁: whereis 的输出包含找到的二进制文件、源代码以及手册页的路径,通常只返回相关信息,不会输出大量无用信息。

whereis [参数] [命令名]

参数:

-b

查找二进制程序或命令

-B

从指定目录下 查找二进制程序或命令

-m

查找man手册文件

-M

从指定目录下 查找man手册文件

-s

只查找源代码文件

-S

从指定目录下 查找源代码文件

实例:

  • 显示ln命令的程序和man手册页的位置:
whereis ln

文本搜索工具(grep)

grep 是一个在 Unix 和类 Unix 系统中使用的命令行工具,用于搜索文本文件中匹配特定模式的行。它的名字来自“global regular expression print”的缩写,意为用于全面搜索的正则表达式。

对于大文件的搜索效率非常高,所以在非常大的文件上使用复杂正则匹配时应谨慎,因为那样做可能会影响性能。且支持多种选项和正则表达式,用户可以根据需求进行复杂的搜索。输出格式化便捷,提高使用者的查找效率。 但其仅能用于搜索和匹配,无法修改文本内容;要进行修改需要配合其他工具(如 sed 或 awk)。

默认情况下,grep 是区分大小写的。使用 -i 选项可以忽略大小写。在指定文件时,路径如果不正确会导致找不到文件或结果为空。当使用管道将其他命令的输出传递给 grep 时,需确保管道前的命令成功执行。如果同时使用输入流和文件,确保理解优先处理的是哪个。

grep [参数] 文件

参数:

-i

忽略大小写

-c

只输出匹配行的数量

-l

只列出符合匹配的文件名,不列出具体的匹配行

-n

列出所有的匹配行,显示行号

-h

查询多文件时不显示文件名

-s

不显示不存在、没有匹配文本的错误信息

-v

显示不包含匹配文本的所有行

-w

匹配整词

-x

匹配整行

-r

递归搜索

-q

禁止输出任何结果,已退出状态表示搜索是否成功

-b

打印匹配行距文件头部的偏移量,以字节为单位

-o

与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

-F

匹配固定字符串的内容

-E

支持扩展的正则表达式

实例:

  • 搜索某个文件中,包含某个关键词的内容:
grep root /etc/passwd

  • 搜索某个文件中,以某个关键词开头的内容:
grep ^root /etc/passwd


http://www.ppmy.cn/embedded/127671.html

相关文章

Spring MVC接收参数方式

1. 使用 RequestParam RequestParam 注解用于将请求中的参数绑定到控制器方法的参数上。 基本用法 GetMapping("/example") public String example(RequestParam("paramName") String param) {// 处理 paramreturn "result"; }可选参数 可以…

【笔记】408刷题笔记

文章目录 三对角三叉树求最小带权路径UDP报文首部和TCP报文首部IP报文首部TCP报文首部UDP报文首部 刷新和再生的区别地址译码 为了区分队空队满,可以使用三种处理方式 1)牺牲一个单元 队头指针在队尾指针的下一位置作为队满的标志 队满条件:(…

FPGA驱动HDMI 初级篇

简介 本章节主要讲述如何通过FPGA驱动HDMI显示。 本章节框图如下: bd框图中使用了两个IP核,分别是Video Timing controller核AXI4-Stream to video out两个模块,下面先对两个模块做介绍。 Video Timing controller 配置如下: 这里由于没有使用ZYNQ PS端,…

[蓝桥杯 2017 省 B] 日期问题

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年…

【题解】【动态规划01背包问题】—— [NOIP2012 普及组] 摆花

【题解】【动态规划01背包问题】—— [NOIP2012 普及组] 摆花 [NOIP2012 普及组] 摆花题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 解法1.二维 d p dp dp1.1.思路解析1.2.AC代码 解法2.一维 d p dp dp2.1.思路解析2.2.AC代码 3.扩展:前缀和优化 [NOIP2012 普及组…

互联网IT行业最“烫手”的六大证书!

PMP(项目管理专业人员资格认证) 报名条件:本科学历3年项目经验 考试时间:一年4次考试,分别在3、6、8、11各举行一次考试。 就业前景:适合IT项目经理、项目管理、助理、专员、产品经理等职位 含金量: 部…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入,滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

MySQL运维

MySQL运维 创建健壮的MySQL健康检查Python类 在本文中,我们将介绍如何创建一个强大而灵活的Python类,用于封装MySQL运维命令并提供易用的接口。这个类不仅支持后续扩展,还提供完备的响应和错误信息,同时要求必要的登录信息以确保…