【转帖】【奇淫技巧】Linux | 查找文件,无所遁形
theme: channing-cyan
本文正在参与 “走过Linux 三十年”话题征文活动
在
Linux
系统上,最常见的操作莫过于处理文本。常见文件操作陈列、查找、排序、格式转换、数据流处理等等。这篇文章着眼于文件查找,分析locate和find命令的使用方法,和运用原理以及缺陷不足。
一、导读
这个问题其实很简单,众所周知,Linux
区别于windows
,它是文件系统,文件的组织形式相当特别(倒立的树),天生对文件操作友好。我们常用ls
命令陈列文件目录的内容(文件+目录),它的文件目录层层递进,有时候特别深,如果我们想要找到一个文件,单纯使用ls
命令是特别的麻烦。
ls [option -dir]
在茫茫文件中去遍历找到你的目标是很麻烦,所以才需要一个查找功能。Linux提供了常用的两种文件查找操作指令,Locate
和find
。
二、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
命令,执行成功,如图所示,找到了。
提示:如果是新创建的文件,创建时间未超过24小时,同样也需要执行updatedb
命令。
2.1 实现原理
locate
并不会对整个文件系统进行扫描,它只会在文件数据库里面去查找。如图所示,我当前数据库文件的大小有5M的样子。
对于刚创建的文件,它并不会及时收录到数据库中去,所以这个时候我们使用locate
去索引这个文件,肯定是不能找到的。Linux
系统一般是每天一更新这个数据库文件, 只要你间隔24小时去查询新创建的文件,理论上是能找到这个文件的。
当然如果你并不想等待这么长的时间,你可以使用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
结果如图所示。
需要注意的是,我选择查询文件啊的范围是整个文件系统,如果本身是以root权限去查询的,不会有任何问题,但是在Linux
系统中,有很多文件目录的所有权是root用户或者其它用户的。
在搜索过程中可能会遇到Permission denied
的报错,这个时候要么提升自身的权限,或是指定自己所有权范围内的目录下进行查找操作。
还有对于这样的查找方式,我们只会至多找到locate.file
全匹配的文件路径,不会找到locate.file.1
、otherlocate.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
新创建的文件的权限如图所示。
然后执行查找文件并修改权限操作。
find -name echo.sh -exec chmod 777 {} ;
-exec
后面接命令,即执行操作chmod 777
代表修改成可执行权限{}
代表对查找的所有文件都执行这个操作;
是必须要有的命令格式
-exec
是相当强大的,但是没有一个确认的操作,我们可以通过替换成-ok
,在为每个查询到的文件执行命令之前会有一个确认提示,这样会安全一些。 执行查找文件后的操作还有很多,比如-print
等等,不一一列举,有兴趣看看帮助手册。
3.4 缺陷不足
说起find
的缺陷,比较明确的有一个,那就是随着磁盘大小的增加,文件数量的增加,查询时间上可能不可控。
四、知识扩展
除了上面讲到的locate
与find
,还有一个可同类比较的命令是which
,这个命令很特殊,其会在 $PATH
环境变量中定义的目录中搜索一个给定的文件名。如果找到匹配项,则返回可执行文件的完整路径,语法如下。
which [-a] filename ...
其常用来查找可执行文件的路径。
【转帖】【奇淫技巧】Linux | 查找文件,无所遁形的更多相关文章
- [转帖]Linux查找文件6个高效工具
Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...
- Gradle更小、更快构建APP的奇淫技巧
本文已获得原作者授权同意,翻译以及转载原文链接:Build your Android app Faster and Smaller than ever作者:Jirawatee译文链接:Gradle更小 ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组
一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...
- # ACM奇淫技巧
目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...
- ASP.NET Core 奇淫技巧之伪属性注入
一.前言 开局先唠嗑一下,许久未曾更新博客,一直在调整自己的状态,去年是我的本命年,或许是应验了本命年的多灾多难,过得十分不顺,不论是生活上还是工作上.还好当我度过了所谓的本命年后,许多事情都在慢慢变 ...
- 优化DP的奇淫技巧
DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...
- 12个实用的 Javascript 奇淫技巧
这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...
- NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)
NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...
- NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识
NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...
- NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)
NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...
随机推荐
- 教你用Python自制拼图小游戏,轻松搞定熊孩子
摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...
- 华为云举办AI经典论文复现活动,打造领先AI开发者学习社区
摘要:百余篇经典论文算法上线华为云AI Gallery,学AI就用ModelArts 2020年8月28日,华为云AI院长峰会在杭州千岛湖举行,来自中国科学院.中国工程院的多位院士,以及清华大学.北京 ...
- 30亿参数,华为云发布全球最大预训练模型,开启工业化AI开发新模式
摘要: 4月25日,华为云发布盘古系列超大规模预训练模型,包括30亿参数的全球最大视觉(CV)预训练模型,以及与循环智能.鹏城实验室联合开发的千亿参数.40TB训练数据的全球最大中文语言(NLP)预训 ...
- AUC/ROC:面试中80%都会问的知识点
摘要:ROC/AUC作为机器学习的评估指标非常重要,也是面试中经常出现的问题(80%都会问到) 本文分享自华为云社区<技术干货 | 解决面试中80%问题,基于MindSpore实现AUC/ROC ...
- 应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者
摘要:让不确定因子变为确定性因子,把复杂留给平台,简单留给开发者,是软件开发效率改进一直努力的方向,也是低代码理念的来源. 本文分享自华为云社区<应用开发专家一席谈:开发低代码,上手低门槛,Ap ...
- 你知道,java项目中是如何获取文件地址的吗?
摘要:在java项目中我们经常会读取配置文件,但是文件的路径在获取时我们是怎么得到的?因为我总是忘记获取文件地址的方法,就在此记录一下 本文分享自华为云社区<[Java]Java项目的绝对地址和 ...
- 火山引擎 DataTester 3 大功能升级:聚焦敏捷、智能与易用,帮助企业降本增效
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,火山引擎数智平台(VeDI)全面升级旗下 A/B 测试产品 DataTester,发布全新功能"M ...
- 火山引擎 DataTester:0 代码也能实施 A/B 测试的实验平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 近日,火山引擎 DataTester 对 A/B 实验"可视化编辑器"进行了升级,可视化编辑器功能让用 ...
- 火山引擎 DataLeap:3 小时分享,体系化讲透企业数据治理如何做?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 数据治理伴随着数据全生命周期的进程,涉及事前规范检查.事中监控管理.事后优化复盘等过程,关键重点领域包括数据质量的 ...
- Html 表格 在线转 Markdown
复制 HTML Table F12 查看网页源代码 Html to markdown 在线转换 https://tableconvert.com/html-to-markdown 复制 Markdow ...