Linux之find命令详解(查找文件内容)

0    145    5

Tags:

👉 本文共约3348个字,系统预计阅读时间或需13分钟。

find常用命令

find查找文件内容

删除目录下最后一次访问时间超过一年的日志文件

如果你的 Linux 服务器上有一个名为 logs 的目录,如何删除该目录下最后一次访问时间超过一年的日志文件呢?

答案:首先我们需要使用 cd 命令进入对应的目录,然后,命令如下:

按名称或正则表达式查找文件

让我们从最简单的用法开始。要按特定名称搜索文件,命令如下:

如何查找所有格式为 pdf 的书籍?使用正则表达式:

默认情况下,find 命令会搜索常规文件,但最好进行指定(-type f)以使所有内容更清晰:

查找不同类型的文件

除了搜索常规文件外,我们还可以通过指定 -type 选项来搜索其他类型的文件。

例如目录:

或者符号链接:

按指定的时间戳查找文件

要按指定的时间戳搜索文件,我们需要知道 Linux 系统中的 3 个不同的时间戳:

  • 访问时间戳(atime):最后一次读取文件的时间。
  • 修改时间戳 (mtime):文件内容最后一次被修改的时间。
  • 更改时间戳 (ctime):上次更改文件元数据的时间(如,所有权、位置、文件类型和权限设置)

所以,正如开头提到的面试题,要搜索 atime 超过一年的文件,我们可以编写如下命令:

如果我们需要查找 mtime 正好是 5 天前的文件,请不要包含 +,因为它的意思是“大于”。

显然,+ 表示“大于”,- 表示“小于”。所以我们可以搜索 ctime 在 5~10 天前的文件:

按大小查找文件

-size选项使我们能够按指定大小查找文件。我们可以将其计量单位指定为以下约定:

类似于按时间戳查找文件,+ 表示“大于”,- 表示“小于”。例如,要查找大小为 10 MB ~ 1 GB 的文件:

按权限查找文件

合理控制文件的权限是 Linux 管理员的一项重要任务。find 命令的 -perm 选项可以帮助我们按指定权限查找文件:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

例如,上面的命令会搜索所有具有 777 权限的文件,这意味着一个文件对其持有者、组和所有用户具有所有的读、写和可执行权限。

按所有权查找文件

这个任务很简单。我们可以使用 -user 选项指定用户名。例如,以下命令将查找所有属于 yang 的文件:

在找到文件后执行命令

在大多数情况下,我们希望在找到我们需要的文件后进行后续操作。例如将其删除,或检查它们的详细信息等等。-exec 命令使这些所有事情变得更加容易。

现在,要了解如何使用它,让我们回到之前提到的面试问题:

上述命令在 -exec 选项后是 rm -rf,其用于删除文件。{} 是用于查找结果的占位符。

注意:占位符 {} 非常重要,尤其是在您想删除文件时。因为,如果您不使用它,该命令将对所有文件执行(而不是您刚刚通过 find 命令找到的文件)。

做一个尝试,请在终端上执行以下两个命令,并检查它们的结果有何不同:

一个使用占位符:

另一个不使用:

-exec 选项后面的命令必须以分号(;)结束。众所周知,转义字符用于去除单个字符的特殊含义。在 Linux 中,反斜杠\用作转义字符。所以我们将它用于分号字符。

查命令绝对路径:

which 用于查找并显示给定命令的绝对路径, 环境变量中 PATH 参数也可以被查出来。

寻找特定文件:

whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径, 该命令只能用于程序名的搜索

使用 whereis -b 命令找二进制文件,与帮助手册。

缓存查找文件:

locate 搜索一个数据库 / var/lib/mlocatedb, 这个数据库中含有本地所有文件信息, Linux 系统自动创建这个数据库, 并且每天自动更新一次, 所以使用 locate 命令查不到最新变动过的文件, 为了避免这种情况, 可以在使用 locate 之前, 先使用 updatedb 命令, 手动更新数据库, updatedb 命令会根据 / etc/updatedb.conf 来更新文件.

使用 locate 命令查询一个文件.

遍历文件查找:

find 命令可以说是最重要的查找命令了,该命令参数较多。

-name 按文件名查找:

常用查询通配符

查找 / var / 目录下, 以. log 结尾的文件.

查找 / root / 目录下, 以 [1-3 之间], 结尾是. txt 的文件

查找 / etc / 目录下, 开头是 6 个任意字符的文件

-size 根据大小查找

查找 / etc / 目录下, 小于 10k 的文件

查找 / etc / 目录下, 大于 1M 的文件

-user 根据属主与权限查找

在 / root 目录中查找属于 wang 用户的文件

查找 / boot / 目录中权限是 644 的文件

-type 根据类型查找

查找 / usr/bin / 目录下, 类型是二进制文件.

-time 按时间查找

查找 / etc / 目录下, 在 120 分钟以内, 内容被修改过的文件

查找 / etc / 目录下, 在 7 天之前, 属性被修改过的文件

-inum 根据 i 节点查询

有一些文件的硬链接数量很多,有相同的 i 节点,查找其中一个文件的 i 节点号,一次性删除。

-and or 逻辑连接符

在 / etc / 目录下, 查找大于 1k, 并且小于 10k 的文件

-exec 命令执行连接符

查找 / var/log / 目录下名字以. log 结尾的文件, 找到后执行 ls -l 显示详细信息. 公众号:入门小站

查找 / etc / 目录下名字以 "init*" 开头的文件, 找到后, 只列出文件, 过滤掉目录, 并执行 ls -l 显示详细信息.

查找 / tmp / 下, 的 yum.log 文件, 找到后直接删除.

查找根下, 找关于 lyshark 用户的所有文件, 找到后直接删除.

在根下, 查找 lyshark 用户的文件, 找到后删除, 删除前会提示是否删除.

参考

https://zhuanlan.zhihu.com/p/527958063
https://mp.weixin.qq.com/s/qllnjOfo93ENfeEbn1WhRQ

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部