文件与目录 / 命令文档
Linux find 命令
概述
掌握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 -delete2. 权限与安全检查
# 查找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/null3. 批量操作
# 批量修改文件权限
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 -14. 高级搜索技巧
# 组合条件:查找近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/ \;