Linux find 命令完全指南及核心用法

2025-03-19 02:50

本文主要是介绍Linux find 命令完全指南及核心用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linuxfind命令完全指南及核心用法》find是Linux系统最强大的文件搜索工具,支持嵌套遍历、条件筛选、执行动作,下面给大家介绍Linuxfind命令完全指南,感兴趣的朋友一起看看吧...

findlinux 系统最强大的文件搜索工具,支持 嵌套遍历、条件筛选、执行动作。以下通过场景分类解析核心用法,涵盖高效搜索、文件管理及高级技巧:

一、基础搜索模式

1. 按文件名搜索(精确/模糊匹配)

<BASH>

find /path -name "*.log"       # 精确匹配 .log 后缀(区分大小写)
find /home -iname "*.TXT"      # 模糊匹配 .txt 后缀(忽略大小写)
find . -name "data_[0-9].csv"  # 使用通配符 [] ? * 匹配

2. 排除指定目录/文件

find /var/log -path "/var/log/nginx" -prune -o -name "*.log"  # 排除 nginx 目录
find . -not -name "*.tmpjs"     # 排除所有 .tmp 文件

二、根据文件类型筛选

使用 -type 筛选文件类型:

  • f: 常规文件
  • d: 目录
  • l: 符号链接
  • s: 套接字
  • p: 命名管道
find /opt -type d -name "config"        # 搜索名为 config http://www.chinasem.cn的目录
find ~/ -type f -empty                  # 查找当前用户下空文件
find /tmp -type l -ls                  # 列出 /tmp 下所有符号链接详细信息

三、时间维度搜索

按时间筛选(文件修改时间 -mtime / 访问时间 -atime):

  • +n: n 天前
  • -n: 最近 n 天内
  • n: 正好 n 天前
find . -mtime -7           # 查找过去 7 天内修改过的文件
find /var/log -mtime +30 -name "*.log"  # 搜索 30 天前的日志文件

按分钟级精准控制(-mmin):

find /tmp -mmin -10       # 查找过去 10 分钟内修改的文件

四、文件大小搜索

使用 -size (单位:c=字节, k=KB, M=MB, G=GB):

  • +n: 大于 n
  • -n: 小于 n
  • n : 等于 n
find / -size +100M        # 全局搜索大于 100MB 的文件(慎用根目录)
find ~/Downloads -size -5k  # 查找 Downloads 中小于 5KB 的文件

五、权限与所有权过滤

1. 按权限位搜索(数字或符号模式)

find . -perm 644           # 精确匹配权限为 644 的文件
find /etc -perm -u=r       # 用户可读的文件(权限包含 r)
find /bin -perm /u=s       # 包含 SUID 的文件

2. 按用户/组筛选

find /var -user www-data   # 属于 www-data 用户的文件
find /home -group dev      # 属于 dev 组的文件

六、组合条件与逻辑操作

  • -a (-and): 逻辑与(默认)
  • -o (-or) : 逻辑或
  • ! (-not) : 逻辑非
  • 使用 () 分组(需转义)
find /data \( -name "YQZdCSJP*.jpg" -o -name "*.png" \) -size +2M  # 查找 JPG 或 PNG 且大于 2MB
find . -type f ! -name "*.tmp"    # 排除所有 .tmp 文件

七、执行后续动作(-exec 与 xargs)

1. 直接执行命令(-exec

find . -name "*.bak" -exec rm -f {} \;       # 删除所有 .bak 文件(确认无误后执行)
find /var/log -type f -mtime +30 -exec gzip {} \;  # 压缩 3YQZdCSJP0 天前的日志文件

2. 结合 xargs 提高效率

find /tmp -name "core.*" -print0 | xargs -0 rm -f  # 安全处理含空格文件名

3. 删除文件(内建动作)

find . -type f -name "*.tmp" -delete        # 直接删除(-delete 必须放在最后)

八、高级搜索场景

1. 查找占用 inode 的小文件

find /path -type f -size +0c -links 1 -exec ls -i {} \;  # 非硬链接的独立文件

2. 查找重复文件(根据 MD5)

find . -type f -exec md5sum {} + | sort | uniq -w32 -dD  # 生成校验和对比重复项

九、安全排查技巧

1. 搜索可疑 SUID/SGID 文件

find / -perm /4000 -user root 2>/dev/null   # SUID 且属主为 root
find / -perm /2000 -group root 2>/dev/null  # SGID 且属组为 root

2. 查找全局可写文件

find / -xdev -tyYQZdCSJPpe f -perm -0002 ! -perm -1000  # 忽略粘滞位目录下的文件

十、性能优化建议

限定搜索深度:-maxdepth 和 -mindepth

find /var/log -maxdepth 2 -name "*.log"   # 仅搜索两层目录

跳过特定文件系统-xdev(不跨文件系统)

find / -xdev -name "lost+found"          # 仅在当前文件系统搜索

总结

  • 核心模式find [路径] [条件] [动作],灵活组合条件实现精准搜索。
  • 安全第一:执行删除或修改前,建议先用 -print 或 -ls 确认目标文件。
  • 效率优先:在高负载场景下,尽量减少全盘扫描,合理使用 -xargs 提升性能。

到此这篇关于Linux find 命令完全指南的文章就介绍到这了,更多相关Linux find 命令内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Linux find 命令完全指南及核心用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153818

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du