【转帖】【奇淫技巧】Linux | 查找文件,无所遁形

技巧,linux,查找文件,无所遁形 · 浏览次数 : 0

小编点评

**文件查找指南** **locate** * 查找文件系统上的文件。 * 使用 `updatedb` 命令更新数据库。 * 仅查找指定路径的文件。 **find** * 效率更高,能递归搜索任何给定路径的各种文件。 * 使用 `-H`、`-L` 等选项控制符号链接的处理。 * 使用 `-o` 和 `-d` 等选项控制匹配的文件处理方式。 * 支持大小筛选。 * 支持日期和时间筛选。 **总结** * locate 是一个用于查找文件系统上的工具。 * find 是一个用于查找文件系统和目录的工具。 * locate 更易于使用,但效率略低。 * find 更效率高,但需要掌握一些命令。

正文


theme: channing-cyan

本文正在参与 “走过Linux 三十年”话题征文活动

Linux系统上,最常见的操作莫过于处理文本。常见文件操作陈列、查找、排序、格式转换、数据流处理等等。这篇文章着眼于文件查找,分析locate和find命令的使用方法,和运用原理以及缺陷不足。

一、导读

这个问题其实很简单,众所周知,Linux区别于windows,它是文件系统,文件的组织形式相当特别(倒立的树),天生对文件操作友好。我们常用ls命令陈列文件目录的内容(文件+目录),它的文件目录层层递进,有时候特别深,如果我们想要找到一个文件,单纯使用ls命令是特别的麻烦。

ls [option -dir]

在茫茫文件中去遍历找到你的目标是很麻烦,所以才需要一个查找功能。Linux提供了常用的两种文件查找操作指令,Locatefind

二、locate定位

Locate 是一个工具,用于查找文件系统上的文件。它搜索由 updatedb 命令生成的文件系统上所有文件的预构建本地数据库。 注意,必须更新数据库,因为在少于24小时内创建的最新文件默认不会更新到数据库,而数据库将会在24小时内更新一次。

2.1 应用实践

使用方式相当简单,语法如下:

locate [OPTION]... PATTERN...

首先在目录/opt/test目录下创建一个新文件locate.file

touch locate.file

然后使用locate命令去定位文件位置。

locate locate.file

并没有如期的找到这个文件,执行完后报错了。

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

确实在报错提示的位置找不到这个数据库文件,因为这是我刚装的服务器,从未用到过这个命令,需要对数据库文件进行初始化。

sudo updatedb

使用root用户权限更新数据库,再次执行locate命令,执行成功,如图所示,找到了。

locate.png

提示:如果是新创建的文件,创建时间未超过24小时,同样也需要执行updatedb命令。

2.1 实现原理

locate并不会对整个文件系统进行扫描,它只会在文件数据库里面去查找。如图所示,我当前数据库文件的大小有5M的样子。

locate<em>file</em>size.png 对于刚创建的文件,它并不会及时收录到数据库中去,所以这个时候我们使用locate去索引这个文件,肯定是不能找到的。Linux系统一般是每天一更新这个数据库文件, 只要你间隔24小时去查询新创建的文件,理论上是能找到这个文件的。

locate.png

当然如果你并不想等待这么长的时间,你可以使用root用户权限执行updatedb去及时更新这个数据库,而后就可以查询到文件位置了。

2.3 缺点不足

在我实践使用中,有一些缺陷不足:

  • 执行这个命令会查询到所有满足%文件名%的文件,很多时候,不方便查看。
  • 上面也说到,如果在不强制更新数据库的前提下,我们是不能够及时查询到新创建的文件,除非等待24小时。
  • 因为要额外的存储一个数据库文件, 当文件越来越多的时候,这个数据库文件会越来越重,会带来不必要的存储负担。

那么我们就需要一个更加强大的命令,那就是find

三、find查找

find 命令是一个比 locate 搜索效率更高的工具。其能够递归地搜索任何给定路径的各种文件。使用文件命令,我们可以搜索文件的名称,所有者,组,权限,类型,大小,时间修改,日期和各种其他标准。find 命令非常高效,但这种效率是以时间来换取的。

3.1 应用实践

使用方法稍显复杂,语法如下。

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression] ​ H,-l 和-p 选项控制符号链接的处理。如果需要,选项-h -l -p -d -o必须出现在第一个路径名之前。命令行中起始点列表后面的部分是表达式。这是一种查询规范,描述了我们如何匹配文件以及如何处理匹配的文件。
语法很简单,就是3W原则Where(何处去找,默认是当前目录及其子目录下),What(找什么,可以是文件名,大小,权限,最近访问时间),What(找到以后做什么)。
​ 最简单的使用就是按照文件名搜索文件。 ​ find / -name locate.file

结果如图所示。

fine_name.png 需要注意的是,我选择查询文件啊的范围是整个文件系统,如果本身是以root权限去查询的,不会有任何问题,但是在Linux系统中,有很多文件目录的所有权是root用户或者其它用户的。
在搜索过程中可能会遇到Permission denied的报错,这个时候要么提升自身的权限,或是指定自己所有权范围内的目录下进行查找操作。
还有对于这样的查找方式,我们只会至多找到locate.file全匹配的文件路径,不会找到locate.file.1otherlocate.file等等这样的不完全匹配文件。

3.2 实现原理

locate命令完全不同的是,find不会再去文件数据库中去查找文件,而是通过遍历指定盘的方式去查找文件位置。所以很显然的是,如果是你的磁盘够大,文件足够多,find命令可能会执行很久。 如图所示,直接在文件系统中搜索文件。 【图】 通过这样的方式,我们能查询到刚创建的文件。

3.3 高阶使用

除了文件名查找,find还能通过大小,文件权限,最近访问时间,限制文件/目录来查找目标。它的强大远不于此,它还能进一步操作查找的结果。 通过大小来查找

```

查找/opt目录下大小大于100M的文件

find /opt -size +100M

查找/opt目录下大小小于1K的文件

find /opt -size -1k ```

如果没有加减号,代表查询等于指定数值的文件。

根据文件最近访问的时间查找

```

查找最近七天访问过并且满足*.yml文件名匹配的所有文件

find -name "*.yml" -atime -8 ```

-atime 参数后面紧跟的 -8 表示 8天之内, 减号表示小于。

仅查找目录或文件 我们在当前目录下创建test目录,并且在test目录下创建一个test文件。

```

查询当前目录下目录名为test的所有目录,结果只会显示test目录

find . -name "test" -type d ​

查询当前目录下文件名为test的所有文件,结果只会显示test文件

find . -name "test" -type d ​ ```

  • type d : 只查找目录类型。 d 是 directory 的首字母, 表示“目录”;
  • type f : 只查找文件类型。 f 是 file 的首字母, 表示“文件”。

上面讲到了查找的方式,find还能做到对查找结果做进一步的处理。

删除查找到的文件

```

删除当前目录下名称为new_file的文件

find . -name new_file -delete ```

-delete 风险很大,请谨慎使用。

调用命令 在日常运维过程中,我们很有可能要对查询到的文件进行权限变更。 我们先创建一个文件echo.sh。

touch echo.sh

新创建的文件的权限如图所示。

end1.png

然后执行查找文件并修改权限操作。

find -name echo.sh -exec chmod 777 {} ;

end2.png

  • -exec 后面接命令,即执行操作
  • chmod 777 代表修改成可执行权限
  • {}代表对查找的所有文件都执行这个操作
  • ;是必须要有的命令格式

-exec是相当强大的,但是没有一个确认的操作,我们可以通过替换成-ok,在为每个查询到的文件执行命令之前会有一个确认提示,这样会安全一些。 执行查找文件后的操作还有很多,比如-print等等,不一一列举,有兴趣看看帮助手册。

3.4 缺陷不足

说起find的缺陷,比较明确的有一个,那就是随着磁盘大小的增加,文件数量的增加,查询时间上可能不可控。

四、知识扩展

除了上面讲到的locatefind,还有一个可同类比较的命令是which,这个命令很特殊,其会在 $PATH 环境变量中定义的目录中搜索一个给定的文件名。如果找到匹配项,则返回可执行文件的完整路径,语法如下。

which [-a] filename ...

其常用来查找可执行文件的路径。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览116150 人正在系统学习中

与【转帖】【奇淫技巧】Linux | 查找文件,无所遁形相似的内容:

【转帖】【奇淫技巧】Linux | 查找文件,无所遁形

theme: channing-cyan 本文正在参与 “走过Linux 三十年”话题征文活动 在Linux系统上,最常见的操作莫过于处理文本。常见文件操作陈列、查找、排序、格式转换、数据流处理等等。这篇文章着眼于文件查找,分析locate和find命令的使用方法,和运用原理以及缺陷不足。 一、导读

【转帖】奇淫技巧 | route命令设置网络优先级

奇淫技巧 | route命令设置网络优先级 https://blog.csdn.net/DynmicResource/article/details/120134745 1. 背景 在生活中的会经常遇见一台PC同时连接多个网络的场景.最典型的,一台笔记本可以同时连接一个无线网(手机热点)和一个有线网

[转帖]360与奇安信往事

1、360与奇安信的关系。 在14年奇安信成立后法定代表人就是齐向东,后来独立对外募资,360从控股子公司变成了参股子公司,并且齐向东与周鸿祎有约定,360主要做toC的业务,奇安信做toB的业务,泾渭分明。2016年7月22日,齐向东联合安源创志股权投资合伙企业,向奇安信增资,同年9月30日后,奇

[转帖]360孵化奇安信科创板上市,IPO前清空股权赚37亿元分手费

https://baijiahao.baidu.com/s?id=1666485645739027654&wfr=spider&for=pc 来源:IPO头条 来源:IPO头条原创,转载请注明来源 5月11日,奇安信科技集团股份有限公司(简称“奇安信”)向科创板递交招股书,已获上交所受理,计划发行不

[转帖]国内首家!奇安信可信浏览器率先升级至Chromium110内核

https://www.qianxin.com/news/detail?news_id=7916 2023年1月3日,奇安信正式推出了基于Chromium110内核的奇安信可信浏览器先锋版,成为国内首家升级至Chromium110内核的企业级浏览器供应商,再次实现了国产浏览器与业界最前沿Chromi

[转帖]周鸿祎与齐向东:在政企安全的大路上,各走一边

https://m.thepaper.cn/baijiahao_4387848 9月3日,360政企安全新战略发布会在北京召开,正式宣布与奇安信彻底“分家”后,360的政企安全战略进入3.0时代。 在会议上,周鸿祎与往常一样身着红色T恤,显得意气冲冲,坦言道:“今天我把原来不喜欢、不认可的一些业务卖

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww