经过 Linux 系统不断探索 , 不断发展到现代文明 , 我们都必须坚信:一个典型的 Linux 系统是包含很多文件的 , 即是由文件组成的!那么新的问题就会涌现到我们的脑海中-- “我们如何查找呢?” 。 当然 , 发展到现在的Linux 文件系统已经被良好地组织起来了 。 不过呢 , 海量的文件往往会引起一些可怕的问题 。
文章图片
作为一名LINUX 运维人员 , 每天面对着这些 linux 系统实际生产环境 , 必须有过硬的技术能力和良好的心理素质才能胜任 。 在今天这篇文章中 , 我们将介绍2 个用来查找文件的工具 。
命令locate,updatedb,find 和 xargs 都是 GNU 项目 findutils 软件包的一部分 。 这个GUN 项目提供了大量的在线文档 , 这些文档相当出色 , 如果你在高安全性的环境中使用这些程序 , 你应该读读相关文档 。 当然 , 在编写这篇文章过程中我还参考了 这本书 , 内容很贴近实践 , 很有理论指导实践价值的一本书籍 。
GNU 查找实用程序是 GNU 操作系统的基本目录搜索实用程序 。 这些程序通常与其他程序结合使用 , 以便向其他命令提供模块化和强大的目录搜索和文件定位功能 。
此包随附的工具包括:
Find -- search for files in a directory hierarchy
// 在目录层次结构中搜索文件
locate --list files in databases that match a pattern
// 列出与模式匹配的数据库中的文件
updatedb -- update a file name database
// 更新文件名数据库
xargs -- build and execute command lines from standard input
// 从标准输入生成和执行命令行
find 程序搜索目录树以查找文件或文件组 。 它遍历目录树并报告与用户规范匹配的文件的所有出现 。 find 程序包括非常强大的搜索功能 。
locate 程序扫描一个或多个文件名数据库并显示任何匹配项 。 如果文件存在于上一个文件名数据库更新期间 , 这可用作非常快速的查找命令 。
updatedb 程序更新定位程序使用的文件名数据库 。 文件名数据库包含上次更新数据库时在特定目录树中的文件列表 。 这通常每晚由 cron 系统守护程序运行 。
xargs 程序通过收集它在标准输入上读取的参数来生成和执行命令行 。 大多数情况下 , 这些参数是由 find 生成的文件名列表 。
下面是一个示例操作 , 使子目录docs 中的所有类HTML 文件由所有使用 find 和 xargs 的可读性 。 这是一个典型的示例 , 说明 Find 和 xarg 如何与其他实用程序一起使用 , 以提供强大的目录遍历功能 。
[centos@linux ~]$ find docs -name '*.html' -print0 | xargs -0 chmod a+r
查找文件的简单方法-- locate
Locate 命令会执行一次快速的路径名数据库搜索程序 , 同时输出每个与给定子字符串相匹配的路径名称 。 例如:我们想要找到“test/” 目录下所有以“zip” 开头的程序名称 。 接下来 , 我们可以以这种方式使用 locate 命令 , 用来找到我们想要的文件:
[me@linux ~]$ locate test/zip
locate 命令将会搜索它的路径名数据库 , 输出任一个包含字符串“tset/zip” 的路径名:
114/usr/test/zip
/usr/test/zipinfo
/usr/test/zipgrep
复杂点的话 ,locate 可以结合其它工具 , 比如说 grep 命令 , 来设计更加有趣的搜索方式:
[Centos@Linux ~]$ locate zip | grep test
/test/bunzip2
/test/bzip2
/test/gzip
/usr/test/unzip
/usr/test/unzipsfx
/usr/test/zip
/usr/test/zipgrep
/usr/test/zipinfo
查找文件的复杂方式--find
locate 程序有一个缺陷是只能依据文件名来查找文件 , 而 find 程序支持基于各种各样的属性搜索一个给定目录或者它的子目录 , 来执行查找文件程序 。 本人建议要花费大量的时间去学习 find 命令 , 因为它有许多有趣的特性 , 很有意思的 。
比较简单的应用方式中 ,find 命令可接收一个或多个目录名称来执行搜索程序 。 例如 , 输出我们的家目录的路径名列表:
[Centos@linux ~]$ find ~
对于一个比较活跃的用户帐号 , 这条命令将会产生一张很大的列表 。 避免查看不方便的现象 , 我们可以把这个列表通过管道符号输出到其它的程序中 。 例如:使用 wc 程序来计算出文件的数量:
[Centos@ ~]$ find ~ | wc -l
10029
通过find 命令用来找到符合特定标准的文件 , 这就是它的魅力所在 。
个人总结了些find 命令选项 , 这些选项被用作配合find 命令限定一定的搜索范围 。 每当构建 find 表达式的时候 , 这些选型可能会被其它的测试条件和行为包含或者覆盖 。 常见选项的列表:
选型 描述
-depth
指示 find 程序先处理目录中的文件 , 再处理目录自身 。 当指定-delete 行为时 , 会自动应用这个选项 。
-maxdepth levels
当执行测试条件和行为的时候 , 设置 find 程序陷入目录树的最大级别数
-mindepth levels
在应用测试条件和行为之前 , 设置 find 程序陷入目录数的最小级别数 。
-mount
指示 find 程序不要搜索挂载到其它文件系统上的目录 。
-noleaf
指示 find 程序不要基于自己在搜索 Unix 的文件系统的假设 , 来优化它的搜索 。 在搜索 DOS/Windows 文件系统和CD/ROMS 的时候 , 我们需要这个选项
来源:ITPUB博客
【locate|Linux文件查找工具的探索】作者:roc_guo
推荐阅读
- 功能|Linux 微信官方版 2.1.1 正式发布
- Linux|glibc在默认情况下并未妥善解决Y2038问题
- Intel|英特尔正为Linux 5.17准备PFRUT:升级系统固件无需重启
- Linux|Fedora 36默认字体将改为Noto,以覆盖更多语言
- 文件|日本惠普公司误删京都大学超算系统77TB重要数据
- Baidu|百度网盘青春版正式上线 只能传3次文件被吐槽是“一次性App”
- Linux|Ubuntu Kylin 20.04 Pro(RISC-V)版本正式发布
- Linux|有人说,Linux 发行版激增不利于 Linux 生态系统?
- Linux|兆芯x86 CPU+国产OS:安卓App在桌面跑起来
- AMD|Linux 5.17将支持AMD智能追踪缓冲区功能