文件与目录 / 命令文档

Linux find 命令

$ find 14 个章节 Linux 命令详解

概述

掌握Linux系统中最强大的文件搜索工具

基本概念

find 是Linux/Unix系统中最强大和灵活的文件搜索命令之一。它可以根据各种条件(文件名、类型、大小、权限、时间等)在指定目录及其子目录中递归搜索文件和目录。

基本语法:
                    find [路径] [表达式] [动作]
find /path/to/search -name "filename" -type f

核心使用场景

查找特定文件、清理临时文件、整理重复文件
查找大文件、监控日志文件、检查权限异常
搜索代码文件、查找配置文件、定位错误日志
检查SUID文件、查找可疑权限、监控文件变化

常用参数详解

基础参数

高级参数

执行动作

基础搜索参数

-name "pattern" - 按文件名搜索(区分大小写) -iname "pattern" - 按文件名搜索(不区分大小写) -type f/d/l - 按类型搜索(文件/目录/链接) -size +100M - 按大小搜索(大于100MB) -mtime -7 - 按修改时间搜索(7天内) -user username - 按用户搜索 -group groupname - 按组搜索

高级搜索参数

-perm 755 - 按精确权限搜索 -perm -644 - 按最小权限搜索 -empty - 查找空文件或空目录 -newer file - 比指定文件更新的文件 -maxdepth 2 - 限制搜索深度 -mindepth 1 - 最小搜索深度 ! -name "*.tmp" - 逻辑非操作

执行动作

-print - 打印找到的文件(默认动作) -delete - 删除找到的文件 -exec command {} \; - 对每个文件执行命令 -exec command {} + - 批量执行命令 -ok command {} \; - 交互式执行命令 -ls - 以ls -l格式显示详细信息

1. 文件查找与清理

# 查找/目录下所有.log文件
                        
find / -name "*.log" -type f

# 查找大于100MB的文件

find /var -size +100M -type f -ls

# 删除7天前的临时文件

find /tmp -name "*.tmp" -mtime +7 -delete

# 查找/root/下的空目录并删除

find /root/ -type d -empty -delete

2. 权限与安全检查

# 查找SUID权限文件(安全检查)
                        
find / -perm -4000 -type f 2>/dev/null

# 查找所有用户可写的文件

find /etc -perm -002 -type f

# 查找属于特定用户(www-data)的所有文件

find / -user www-data -type f

# 查找没有用户的文件(孤儿文件)

find / -nouser -type f 2>/dev/null

3. 批量操作

# 批量修改文件权限
                        
find /var/www -name "*.php" -exec chmod 644 {} \;

# 批量压缩日志文件

find /var/log -name "*.log" -mtime +30 -exec gzip {} \;

# 复制特定文件到备份目录

find /etc -name "*.conf" -exec cp {} /root/backup/conf/ \;

# 统计/root/目录下shell脚本代码的行数

find /root -name "*.sh" -exec wc -l {} + | tail -1

4. 高级搜索技巧

# 组合条件:查找近7天修改的大于10MB的日志文件
                        
find /var/log -name "*.log" -mtime -7 -size +10M

# 排除特定目录

find / -path "/proc" -prune -o -name "*.conf" -print

# 查找重复文件(通过大小)

find . -type f -exec ls -l {} \; | sort -k5 | uniq -D -f4

# 按文件扩展名分组统计

find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -nr

性能优化技巧

使用 -maxdepth 限制搜索深度,避免递归太深影响性能
将最具选择性的条件放在前面,如 -name 或 -type
# 优化前:效率较低
                        
find / -size +100M -name "*.log"

# 优化后:效率更高

find /var/log -maxdepth 3 -name "*.log" -size +100M

# 并行处理大量文件

find . -name "*.txt" -print0 | xargs -0 -P 4 wc -l

常见陷阱与注意事项

使用 -delete 选项时要格外小心,建议先用 -print 测试结果
在根目录搜索时,记得排除 /proc, /sys 等虚拟文件系统
# 危险操作示例(请勿执行)
                        
find / -name "*" -delete  # 会删除所有文件!

# 安全做法:先预览再执行

find /tmp -name "*.tmp" -mtime +7 -print

# 确认无误后再执行删除

find /tmp -name "*.tmp" -mtime +7 -delete

实践练习

练习任务:
                    
                        查找系统中所有大于50MB的文件
                        找出最近3天内修改过的配置文件
                        删除/tmp目录下超过30天的临时文件
                        查找并统计不同类型文件的数量
                        备份所有.sh脚本文件到指定目录
# 练习答案(点击显示)

# 1. find / -size +50M -type f 2>/dev/null

# 2. find /etc -name "*.conf" -mtime -3

# 3. find /tmp -mtime +30 -delete

# 4. find . -type f | sed 's/.*\.//' | sort | uniq -c

# 5. find . -name "*.sh" -exec cp {} /backup/ \;

同分类 · 其他命令文档