一文揭晓,我是如何在Linux中查找自如

news2024/11/17 13:49:45

未来已来,只是不均衡地分布在当下

大家好,我是菜农,欢迎来到我的频道。

本文共 2187字,预计阅读 10 分钟

用过 Linux 的小伙伴都知道,在Linux系统中包含着大量的文件,绝大部分情况下,我们都是通过 CLI 的方式与Linux进行交互,这就会面临一个问题,当我们需要查找一个文件的时候却迟迟无从下手,不知道该如何找起。

我们应该怎么查找文件呢?庞大的文件量如何查找自如了,这篇文章带你走进 Linux 的内部世界!

在本篇中我们将掌握

两款用于在系统中查找文件的工具

  • locate:按照路径名查找文件
  • find:在目录中查找文件

三个配合查找工具来处理结果文件的命令

  • xargs:通过标准输入构建并执行命令
  • touch:修改文件时间
  • stat:显示文件或文件系统状态

一、查找工具

1. locate

顾名思义,这是一款定位工具,用于简单的文件查找。它能对路径名执行快速的数据库查找(留意下,这里是 数据库 查找),然后输出与给定字符串匹配的各个名称。

场景1

系统中创建了一个 locate-file 文件,由于粗心忘记了文件所在路径,那该怎么办呢?通过 locate 命令

locate 命令会从 路径名数据库 中进行查找,输出所有包含字符串 locate-file 的匹配项。

场景2

难度升级,在系统的多个目录下都创建了 locate-file 文件,但只想要上级目录是 dir1 的文件,那该怎么办?通过 grep 命令

我们可以借助Linux系统中 **管道 | ** 的特性,利用 grep 来进行过滤。

不知道细心的小伙伴有没有注意到,上面几段文字中都提到了 数据库 这个关键词。我们利用 locate 再次进行查找:

两个步骤:

  1. 我们创建了 locate-file_bak 文件
  2. 我们利用 locate 进行查找

但我们却发现此时查找的结果为空!locate 难道失效了?其实不然,locate 命令在系统安装好之后是无法工作的,但如果我们过一天后再次进行尝试就会发现又恢复正常了。那是咋回事?是因为 locate 命令的数据库是通过另一个命令 updatedb 创建的。它通常利用 cron 定时任务进行作业,大多数包含 locate 命令的系统每天会执行一次 updatedb 命令,因此数据库并不是实时更新的,所以会出现上述的情况,创建文件后,数据库还没进行更新。

那么该如何解决该问题呢?

我们可以切换为超级用户,手动执行 updatedb 命令。

2. find

顾名思义,这也是一款定位工具,不同的是,该命令用户复杂的文件查找。find 命令可以根据各种属性在指定目录(及其子目录)中查找文件。

场景1

我们想要生成 testdir 目录中的文件列表,那该怎么办?通过 find 命令

对于相对较大的文件夹来说,该命令会产生一个很长的文件列表,我们可以利用 **管道 | ** 的特性进行二次处理。比如我们可以通过 wc 命令来统计文件数量。

find 命令的强大之处就是在于能够配合各种选项(option)、测试条件(test)以及操作(action)来找出符合特定条件的文件。

1)测试条件

假如我们只想要查找目录,我们便可以利用测试条件来实现。

通过加入测试条件 -type d,限制只查找目录。相反,我们也可以使用下列测试条件,限制只查找普通文件

通过 type 可以来限制输出的文件类型,在 find 命令中支持以下文件类型:

  • b: 块设备文件
  • c: 字符设备文件
  • d: 目录
  • f: 普通文件
  • l: 符号链接

当然,我们除了利用 -type 来限制文件的类型,我们还可以限制 文件名、文件大小 等,以下列出几点常见的测试条件:

  • -size n: 匹配大小为 n 的文件
  • -type n: 匹配类型为 n 的文件
  • -name n: 匹配名称为 n 的文件
  • -empty: 匹配空文件或目录
  • -user name: 匹配属于用户 name 的文件或目录。name 可以使用用户名或数值形式的用户ID表示

如果想查看更完整的测试条件,可以使用 man find 来查看命令手册

2)操作符

测试条件find 指令已经相当完整了,但有些时候我们仍然需要一种更好的方式来描述测试条件之间的逻辑关系。

场景1

我想查找 testdir 目录下,命名为 dir2dir3 的文件

这很明显是一种 的逻辑,使用 find 命令我们可以这样做:

在这一小段语句中我们使用到了两种逻辑关系:分别是 且(-and)或(-or)

-and 可以省略,如果不嫌麻烦的话也可以这样写:

三个逻辑关系:。介绍了前两种,第三种也不能落下:

通过指令可以看出,我们可以利用 -not 进行结果取反。

3)预定义操作

以上操作我们能够通过 find 命令来查找结果,但更多时候我们真正想做的是对结果执行某些特殊操作。

当我们想要删除 /Users/cbuc/testdir/dir2 这个目录时,我们可以通过以上认识到的操作先进行查找

然后使用 -delete 命令来删除当前匹配的文件

可以发现, /Users/cbuc/testdir/dir2 这个目录已经被删除了

除了删除操作,还可以进行以下几种常见的操作:

  • -delete: 删除当前匹配的文件
  • -ls: 对匹配的文件执行相当于 ls -dils 命令的操作
  • -print: 将匹配文件的完整路径名输出至标准输出
  • -quit: 一旦发现匹配就退出

敬畏生产环境:使用 -delete 之前,需要使用 -print 命令先确保查找结果无误。

4)自定义操作

除了预定义操作,我们还可以针对查找结果调用任意命令。传统的实现方式是通过 -exec 操作。

-exec command {};

这里的 command 特指命令名,{ } 是代表当前路径名的符号。; 作为分隔符,表示命令结束。比如我们之前使用的 -delete 命令可以使用自定义操作来替换。

-exec rm '{}' ';'

因为 { }; 对 shell 具有特殊的含义,所以必须对其进行标注或转义

我们借此来认识 xargs 命令,它从标准输入接收输入,将其转换为指定命令的参数列表。

其中,find 命令的输出结果通过管道传给了 xargs 命令,后者构造出 ls 命令的参数列表,然后执行该命令。

命令参数的数量不是没有限制的。有可能出现命令长度超出 Shell 接受能力的情况。如果出现了这种情况,xargs 命令可以使用系统支持的最大参数数量来执行指定的命令,然后重复此过程,直至处理完所有参数。在执行 xargs 命令时加入 --show-limits 选项就能知道系统支持的最大参数数量。


好了,以上便是本篇的所有内容,如果觉得对你有帮助的小伙伴不妨点个关注做个伴,便是对小菜最大的支持。不要空谈,不要贪懒,和小菜一起做个吹着牛X做架构的程序猿吧~ 咱们下文再见!

今天的你多努力一点,明天的你就能少说一句求人的话!

我是小菜,一个和你一起变强的男人。 💋

微信公众号已开启,菜农曰,没关注的同学们记得关注哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react hooks 中使用 Echarts图表中遇到的问题及相关配置

前言 项目开发中,需要做一个报表功能,看了下UI图,初步定下使用 echarts,不过之前使用 echarts 都是在 Vue2 和 Vue3 框架下开发,第一次使用 react-hooks 开发 echarts,将流程及一些 相关配置 写个随笔记录…

没有开发经验的程序员,怎么快速学习进入工作?

今天在群里,Ace老师遇到一位没有开发经验的同学,他的情况是这样的。 问题 Ace老师: 有一些伙伴,我现在真的没有想到太好的方法去教他,我跟大家讲一下他目前的情况,你们有经验的来和他说说这样的情况应该怎…

操作系统权限提升(三)之Windows系统内核溢出漏洞提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!!! Windows系统内核溢出漏洞提权介绍 溢出提…

五、环境的搭建

1、配置用户信息 以下操作是用终端模拟器Cmder,这个工具比较便捷,比如需要粘贴,点击一下鼠标右键就粘贴了。如果不想下载这个工具,也可以在终端操作(打开终端快捷键:Win R,输入cmd)。 (1)查看git 打开C…

Recast-Detour看这里就够了!

目录一、 Recast生成(一) 概述1. 简介(二) 生成过程1. 体素化2. 区域3. 轮廓4. 生成凸多边形5. 详细三角形(三) 配置1. 可配置参数2. 数据结构(四) 项目应用1. CS体系方案…

2023最新前端面试题3(持续更新)

46、HTML语义化 HTML 语义化就是让页面内容结构化,它有如下优点 1、易于用户阅读,样式丢失的时候能让页面呈现清晰的结构。 2、有利于 SEO,搜索引警根据标签来确定上下文和各个关键字的权重。 3、方便其他设备解析,如盲人阅读器根…

【Pytorch项目实战】之迁移学习:特征提取、微调、特征提取+微调、雾霾清除

文章目录迁移学习(Transfer Learning)方法一:特征提取(Feature Extraction)方法二:微调(Fine Tuning)(一)实战:基于特征提取的迁移学习&#xff0…

2023第三方应用苹果电脑磁盘读写工具Tuxera NTFS

今天,小编要来分享的是Mac下一款实用的NTFS读写软件——Tuxera NTFS,我们都知道OS X默认是不支持NTFS格式写入的,对于很多使用U盘或移动硬盘写操作的朋友来说非常的不便。而Tuxera NTFS很好的解决了这个问题。小子这次带来的是2023版本。 Tu…

kali入侵电脑

kali入侵电脑 注意:本文仅用于教学目的 1 kali制作exe控制电脑(msfvenom) kali是黑客常用的系统,里面集成了很多的攻击软件,这里我给大家演示一种使用kali制作.exe文件来控制自己电脑的方式。 msfvenom a Metasploit s…

Vue2 和Vue 3的区别

Vue 2 和 Vue 3的区别 1.双向数据绑定原理不同 Vue2 的双向数据绑定是利用ES5的一个APIObject.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。 Vue3 中使用ES6的Proxy API对数据代理。 Vue3 使用数据代理的优势有以下几点:1&#x…

深圳MES系统如何助力注塑企业实现数字化发展

家用电器、电子产品、日用品、医疗保健、汽车零部件、新能源以及建筑、玩具等行业对注塑制品需求量日益增长。注塑企业提供的各式各样注塑产品已深入到经济生活的各个领域,为国家经济的各个部门包括轻工业和重工业提供关键的支持。 现状 现在注塑企业的注塑机工作…

RTP协议基本分析(RTSP、WebRTC使用)

1、介绍 实时流传输协议(RTSP:Real Time Streaming Protocol)是一种网络传输协议,旨在发送低延迟流。 该协议由RealNetworks,Netscape和哥伦比亚大学的专家在1996年开发。它定义了应如何打包流中的数 据以进行传输。 …

【GD32F427开发板试用】INA226完成电流电压采集

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:จุ๊บ冰语 前言 本次有幸参与并通过了极术社区组织的【GD32F427开发板试用】活动,让我对国产兆易创新的GD32处理器有了更深刻的…

Scala系列之:函数式编程

Scala系列之:函数式编程一、面向对象编程和函数式编程二、函数基本语法三、函数和方法的区别四、函数定义五、函数参数六、函数至简原则七、匿名函数一、面向对象编程和函数式编程 面向对象编程: 解决问题,分解对象,行为&#x…

【最新消息】苹果放出新大招??!!

各位开发者新年快乐,许久没有更新了,近期我收到反馈意思遇到苹果回复的新政策,不知道各位开发者有没有碰到过,我也会在下文提出我的猜测,要是有开发者也遇到了同样的问题,欢迎一起交流哦。 疑似新政策&…

【寒假每日一题】洛谷 P1088 [NOIP2004 普及组] 火星人

题目链接:P1088 [NOIP2004 普及组] 火星人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是…

vue-query 初探

vue-query,类似于vuex/pinia,以缓存为目的,但侧重的是对网络请求的缓存。 这是我预想的使用场景:假设在各个页面都需要发起相同的请求,去获取数据,而这种数据在一定时间内不会发生变化,那么这种…

【JavaWeb】带你走进Maven

文章目录1 什么是Maven?2 Maven 常用命令3 Maven 生命周期4 Maven 坐标详解5 IDEA 导入 Maven 项目1 什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌…

线程execute()与submit()区别

线程池中有两个提交任务的方法 向线程池提交任务的两种方式大致如下: 方式一:调用execute()方法 方式二:调用submit()方法 一、区别 以上的submit()和execute()两类方法的区别在哪里呢?大致有以下三点: 1.二者所接收…

引入“ 自动化测试 ”都需要满足哪些条件?

📌 博客主页: 自动化软件测试 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 如果你也想学习软件测试,文末卡片有我的交流群,加入我们&#xff…