本文档风哥主要介绍Linux系统中find命令的使用方法,包括文件查找、按名称查找、按类型查找、按大小查找、批量操作等,结合RHEL LINUX 10系统环境,提供详细的命令示例和输出结果,适合Linux运维人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn 学习交流加群风哥QQ113257174
参考Red Hat Enterprise Linux 10官方文档中的System administration章节 from LinuxDBA视频:www.itpux.com
Part01-基础概念与理论知识
1.1 find命令的基本概念
find命令是Linux系统中最强大的文件查找工具,用于在目录树中查找文件和目录。find命令可以根据文件名、文件类型、文件大小、修改时间、权限等多种条件进行查找,并可以对查找到的文件执行各种操作。find命令是Linux运维人员必须掌握的核心命令之一。
- 支持多种查找条件
- 支持逻辑运算(AND、OR、NOT)
- 支持对查找结果执行操作
- 支持递归查找
- 支持正则表达式
- 可以查找文件属性
1.2 find命令的语法格式
find命令的基本语法格式如下:
find [路径…] [表达式]
# 语法说明:
# 路径:要查找的目录路径,默认为当前目录
# 表达式:查找条件和操作
# 表达式由选项、测试和动作组成
1.3 find命令的常用参数
find命令的常用参数如下:
# 按文件名查找
# -name PATTERN
# 按文件名查找(区分大小写)
find /etc -name “*.conf”
# -iname PATTERN
# 按文件名查找(不区分大小写)
find /etc -iname “*.CONF”
# 按文件类型查找
# -type TYPE
# 按文件类型查找
# f: 普通文件
# d: 目录
# l: 符号链接
# b: 块设备
# c: 字符设备
# p: 管道文件
# s: 套接字文件
find /var -type f -name “*.log”
# 按文件大小查找
# -size N
# 按文件大小查找
# N: 精确大小
# +N: 大于N
# -N: 小于N
# 单位:c(字节), k(KB), M(MB), G(GB)
find /var -size +100M
# 按修改时间查找
# -mtime N
# 按修改时间查找(天)
# N: N天前
# +N: 超过N天
# -N: N天内
find /var -mtime -7
# -mmin N
# 按修改时间查找(分钟)
find /var -mmin -60
# 按访问时间查找
# -atime N
# 按访问时间查找(天)
find /var -atime +30
# -amin N
# 按访问时间查找(分钟)
find /var -amin -60
# 按权限查找
# -perm MODE
# 按权限查找
find /var -perm 755
# 按所有者查找
# -user USERNAME
# 按所有者查找
find /var -user root
# -group GROUPNAME
# 按所属组查找
find /var -group root
# 按inode查找
# -inum N
# 按inode号查找
find /var -inum 123456
# 按深度查找
# -maxdepth N
# 最大查找深度
find /var -maxdepth 2 -name “*.log”
# -mindepth N
# 最小查找深度
find /var -mindepth 2 -name “*.log”
# 逻辑运算
# -a, -and
# 逻辑与(默认)
find /var -name “*.log” -a -size +10M
# -o, -or
# 逻辑或
find /var -name “*.log” -o -name “*.txt”
# !, -not
# 逻辑非
find /var ! -name “*.log”
# 动作
# -print
# 打印文件名(默认)
find /var -name “*.log” -print
# -ls
# 显示详细信息
find /var -name “*.log” -ls
# -delete
# 删除文件
find /var -name “*.tmp” -delete
# -exec COMMAND {} \;
# 对每个文件执行命令
find /var -name “*.log” -exec chmod 644 {} \;
# -exec COMMAND {} +
# 对多个文件执行命令
find /var -name “*.log” -exec chmod 644 {} +
# -ok COMMAND {} \;
# 执行命令前确认
find /var -name “*.log” -ok rm {} \;
Part02-生产环境规划与建议
2.1 find命令使用场景规划
在生产环境中,find命令主要用于以下场景:
# 1. 文件查找场景
# – 查找配置文件
# – 查找日志文件
# – 查找临时文件
# – 查找特定类型文件
# 2. 文件管理场景
# – 批量删除文件
# – 批量修改权限
# – 批量移动文件
# – 批量压缩文件
# 3. 磁盘管理场景
# – 查找大文件
# – 查找占用空间最多的目录
# – 清理旧文件
# – 查找重复文件
# 4. 安全审计场景
# – 查找SUID文件
# – 查找SGID文件
# – 查找可写文件
# – 查找无主文件
2.2 find命令安全使用建议
在生产环境中使用find命令时,需要注意以下安全建议:
- 删除文件前先确认
- 使用-ok替代-exec进行确认
- 避免在根目录递归查找
- 注意权限问题
- 大目录查找时注意性能
- 使用-print0和xargs -0处理特殊文件名
2.3 find命令最佳实践
find命令在生产环境中的最佳实践:
# 1. 查找并删除文件前先确认
# find /tmp -name “*.tmp” -ls
# find /tmp -name “*.tmp” -delete
# 2. 使用-ok进行交互式操作
# find /tmp -name “*.tmp” -ok rm {} \;
# 3. 使用-print0和xargs -0处理特殊文件名
# find /tmp -name “*.tmp” -print0 | xargs -0 rm
# 4. 限制查找深度
# find /var -maxdepth 3 -name “*.log”
# 5. 排除特定目录
# find /var -path “/var/log” -prune -o -name “*.log” -print
# 6. 使用-exec批量操作
# find /var -name “*.log” -exec gzip {} \;
# 7. 查找并统计
# find /var -name “*.log” | wc -l
# 8. 查找并排序
# find /var -name “*.log” -exec ls -lh {} \; | sort -k5 -h
Part03-生产环境项目实施方案
3.1 基本查找操作
find命令在RHEL LINUX 10系统中的基本查找操作示例: 更多学习教程公众号风哥教程itpux_com
# 1. 按文件名查找
# find /etc -name “*.conf”
/etc/resolv.conf
/etc/host.conf
/etc/sysctl.conf
/etc/krb5.conf
/etc/dnf/dnf.conf
# 2. 按文件名查找(不区分大小写)
# find /etc -iname “*.CONF”
/etc/resolv.conf
/etc/host.conf
/etc/sysctl.conf
# 3. 按文件类型查找
# 查找所有目录
# find /var -type d | head -n 10
/var
/var/log
/var/cache
/var/lib
/var/spool
# 查找所有普通文件
# find /var -type f | head -n 10
/var/log/messages
/var/log/secure
/var/log/cron
# 查找所有符号链接
# find /var -type l | head -n 10
/var/mail
/var/run
# 4. 按文件大小查找
# 查找大于100MB的文件
# find /var -size +100M
/var/log/large.log
# 查找小于1KB的文件
# find /var -size -1k | head -n 10
/var/log/small.log
# 查找正好100MB的文件
# find /var -size 100M
# 5. 按修改时间查找
# 查找最近7天修改的文件
# find /var -mtime -7 | head -n 10
/var/log/messages
/var/log/secure
# 查找超过30天修改的文件
# find /var -mtime +30 | head -n 10
/var/log/old.log
# 查找最近1小时修改的文件
# find /var -mmin -60 | head -n 10
/var/log/messages
# 6. 按权限查找
# 查找权限为755的文件
# find /usr/bin -perm 755 | head -n 10
/usr/bin/ls
/usr/bin/cat
/usr/bin/grep
# 查找权限为644的文件
# find /etc -perm 644 | head -n 10
/etc/passwd
/etc/group
/etc/hosts
# 7. 按所有者查找
# find /var -user root | head -n 10
/var/log/messages
/var/log/secure
# 8. 按所属组查找
# find /var -group root | head -n 10
/var/log/messages
/var/log/secure
# 9. 按深度查找
# 查找深度不超过2层的文件
# find /var -maxdepth 2 -name “*.log”
/var/log/messages
/var/log/secure
# 查找深度至少2层的文件
# find /var -mindepth 2 -name “*.log”
/var/log/nginx/access.log
/var/log/nginx/error.log
# 10. 查找空文件或空目录
# find /tmp -empty
/tmp/empty_file
/tmp/empty_dir
3.2 高级查找操作
find命令的高级查找操作示例:
# 1. 组合条件查找
# 查找大于10MB且最近7天修改的文件
# find /var -size +10M -mtime -7
/var/log/large.log
# 查找大于10MB或最近7天修改的文件
# find /var -size +10M -o -mtime -7
/var/log/messages
/var/log/large.log
# 查找不是.log文件的文件
# find /var ! -name “*.log” | head -n 10
/var/cache
/var/lib
# 2. 使用正则表达式
# find /var -regex “.*\.log\.[0-9]+”
/var/log/messages.1
/var/log/secure.1
# find /var -iregex “.*\.LOG”
/var/log/messages
/var/log/secure
# 3. 查找SUID文件
# find /usr -perm -4000
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/su
# 4. 查找SGID文件
# find /usr -perm -2000
/usr/bin/wall
/usr/bin/write
# 5. 查找可写文件
# find /tmp -perm -002
/tmp/test_file
# 6. 查找无主文件
# find /var -nouser
/var/tmp/orphan_file
# 7. 查找无组文件
# find /var -nogroup
/var/tmp/orphan_file
# 8. 查找硬链接数大于1的文件
# find /var -links +1
/var/log/messages
# 9. 查找inode号
# find /var -inum 123456
/var/log/messages
# 10. 排除特定目录
# find /var -path “/var/log” -prune -o -name “*.log” -print
/var/cache/log.log
# 11. 查找并显示详细信息
# find /var -name “*.log” -ls | head -n 5
1234567 4 -rw——- 1 root root 1234 Apr 2 10:00 /var/log/messages
# 12. 查找并统计文件数量
# find /var -name “*.log” | wc -l
15
# 13. 查找并统计总大小
# find /var -name “*.log” -exec du -ch {} + | grep total
50M total
# 14. 查找最近访问的文件
# find /var -atime -1 | head -n 10
/var/log/messages
/var/log/secure
# 15. 查找最近状态改变的文件
# find /var -ctime -1 | head -n 10
/var/log/messages
/var/log/secure
3.3 批量操作实战
使用find命令进行批量操作:
# 1. 批量删除文件
# find /tmp -name “*.tmp” -delete
# 或
# find /tmp -name “*.tmp” -exec rm {} \;
# 2. 批量修改权限
# find /var/www -type f -exec chmod 644 {} \;
# find /var/www -type d -exec chmod 755 {} \;
# 3. 批量修改所有者
# find /var/www -exec chown apache:apache {} \;
# 4. 批量压缩文件
# find /var/log -name “*.log” -mtime +7 -exec gzip {} \;
# 5. 批量移动文件
# find /tmp -name “*.log” -exec mv {} /var/log/ \;
# 6. 批量复制文件
# find /etc -name “*.conf” -exec cp {} /backup/ \;
# 7. 批量创建备份
# find /etc -name “*.conf” -exec cp {} {}.bak \;
# 8. 批量查找并替换内容
# find /etc -name “*.conf” -exec sed -i ‘s/old/new/g’ {} \;
# 9. 批量查找并打印
# find /var -name “*.log” -exec echo “Found: {}” \;
# 10. 批量查找并执行脚本
# find /tmp -name “*.sh” -exec bash {} \;
# 11. 使用xargs批量操作
# find /var -name “*.log” | xargs grep “error”
/var/log/messages:Apr 2 10:00:01 server01 kernel: error: [UFW BLOCK]
# 12. 使用xargs批量删除
# find /tmp -name “*.tmp” | xargs rm -f
# 13. 使用xargs批量压缩
# find /var/log -name “*.log” -mtime +7 | xargs gzip
# 14. 使用-print0和xargs -0处理特殊文件名
# find /tmp -name “*.tmp” -print0 | xargs -0 rm -f
# 15. 批量查找并发送邮件
# find /var -name “*.log” -size +100M -exec mail -s “Large log files” admin@fgedu.net < {} \;
Part04-生产案例与实战讲解
4.1 文件管理案例
使用find命令进行文件管理:
# 1. 清理临时文件
# find /tmp -type f -mtime +7 -delete
# find /tmp -type d -empty -delete
# 2. 清理日志文件
# find /var/log -name “*.log” -mtime +30 -exec gzip {} \;
# find /var/log -name “*.gz” -mtime +90 -delete
# 3. 查找大文件
# find / -type f -size +100M -exec ls -lh {} \; | awk ‘{print $5, $9}’ | sort -hr
1.5G /var/log/large.log
500M /var/lib/mysql/ibdata1
# 4. 查找重复文件
# find /var -type f -exec md5sum {} \; | sort | uniq -w32 -dD
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 /var/log/duplicate1.log
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 /var/log/duplicate2.log
# 5. 查找并删除空文件
# find /var -type f -empty -delete
# 6. 查找并删除空目录
# find /var -type d -empty -delete
# 7. 查找并修改文件权限
# find /var/www -type f -name “*.php” -exec chmod 644 {} \;
# find /var/www -type d -exec chmod 755 {} \;
# 8. 查找并修改文件所有者
# find /var/www -exec chown -R apache:apache {} \;
# 9. 查找并备份文件
# find /etc -name “*.conf” -exec cp {} /backup/etc/ \;
# 10. 查找并压缩文件
# find /var/log -name “*.log” -mtime +7 -exec gzip -9 {} \;
4.2 日志管理案例
使用find命令进行日志管理:
# 1. 查找并归档旧日志
# find /var/log -name “*.log” -mtime +30 -exec tar -czf /backup/logs_$(date +%Y%m%d).tar.gz {} +
# 2. 查找并删除旧日志
# find /var/log -name “*.log.*” -mtime +90 -delete
# 3. 查找并压缩日志
# find /var/log -name “*.log” -size +50M -exec gzip {} \;
# 4. 查找并分析日志
# find /var/log -name “*.log” -exec grep -l “error” {} \;
/var/log/messages
/var/log/secure
# 5. 查找并统计日志大小
# find /var/log -name “*.log” -exec du -ch {} + | grep total
150M total
# 6. 查找并分割大日志
# find /var/log -name “*.log” -size +100M -exec split -b 50M {} {}_part_ \;
# 7. 查找并移动日志到归档目录
# find /var/log -name “*.log” -mtime +7 -exec mv {} /var/log/archive/ \;
# 8. 查找并清理应用日志
# find /var/log/app -name “*.log” -mtime +30 -delete
# 9. 查找并备份重要日志
# find /var/log -name “secure” -o -name “messages” -exec cp {} /backup/important_logs/ \;
# 10. 查找并监控日志增长
# while true; do
find /var/log -name “*.log” -mmin -5 -exec ls -lh {} \;
sleep 300
done
4.3 故障排查案例
使用find命令进行故障排查: 学习交流加群风哥微信: itpux-com
# 1. 查找磁盘空间占用
# find /var -type f -exec du -h {} + | sort -rh | head -n 10
1.5G /var/log/large.log
500M /var/lib/mysql/ibdata1
200M /var/cache/dnf/packages.db
# 2. 查找inode占用过多
# find /var -xdev -printf ‘%h\n’ | sort | uniq -c | sort -k 1 -n | tail -n 10
1234 /var/log
567 /var/cache
234 /var/lib
# 3. 查找权限问题
# find /var/www -type f ! -perm 644 -ls
1234567 4 -rwx—— 1 root root 1234 Apr 2 10:00 /var/www/html/config.php
# 4. 查找安全风险文件
# find / -perm -4000 -o -perm -2000 -ls
1234567 16 -rwsr-xr-x 1 root root 16384 Apr 2 10:00 /usr/bin/sudo
# 5. 查找可写目录
# find /var -type d -perm -002 -ls
1234567 4 drwxrwxrwt 2 root root 4096 Apr 2 10:00 /var/tmp
# 6. 查找无主文件
# find /var -nouser -o -nogroup -ls
1234567 4 -rw-r–r– 1 1234 5678 1234 Apr 2 10:00 /var/tmp/orphan_file
# 7. 查找最近修改的文件
# find /etc -mtime -1 -ls
1234567 4 -rw-r–r– 1 root root 1234 Apr 2 10:00 /etc/passwd
# 8. 查找被删除但仍占用空间的文件
# find /proc/*/fd -ls 2>/dev/null | grep ‘(deleted)’
1234567 0 l-wx—— 1 root root 64 Apr 2 10:00 /proc/12345/fd/1 -> /var/log/deleted.log\ (deleted)
# 9. 查找硬链接
# find /var -type f -links +1 -ls
1234567 4 -rw-r–r– 2 root root 1234 Apr 2 10:00 /var/log/messages
# 10. 查找符号链接
# find /var -type l -ls
1234567 0 lrwxrwxrwx 1 root root 10 Apr 2 10:00 /var/mail -> spool/mail
Part05-风哥经验总结与分享
5.1 find命令使用技巧总结
根据多年的Linux运维经验,总结find命令的使用技巧:
# 1. 常用find别名
alias findbig=’find / -type f -size +100M -exec ls -lh {} \;’
alias findold=’find / -type f -mtime +30′
alias findempty=’find / -type f -empty’
# 2. 查找并删除前确认
# find /tmp -name “*.tmp” -ok rm {} \;
# 3. 查找并显示详细信息
# find /var -name “*.log” -ls
# 4. 查找并统计
# find /var -name “*.log” | wc -l
# 5. 查找并排序
# find /var -name “*.log” -exec ls -lh {} \; | sort -k5 -h
# 6. 查找并压缩
# find /var/log -name “*.log” -mtime +7 -exec gzip {} \;
# 7. 查找并移动
# find /tmp -name “*.log” -exec mv {} /var/log/ \;
# 8. 查找并备份
# find /etc -name “*.conf” -exec cp {} /backup/ \;
5.2 find命令操作检查清单
在生产环境中使用find命令时的检查清单:
- 确认查找路径是否正确
- 确认查找条件是否准确
- 确认是否需要限制深度
- 确认是否需要排除目录
- 确认删除操作是否安全
- 确认是否需要备份
- 确认权限是否足够
- 确认性能影响
- 确认输出结果是否正确
- 确认是否需要日志记录
5.3 相关工具推荐
与find命令相关的工具和替代方案:
# 1. locate – 快速文件查找
# locate “*.conf”
# 优点:速度快,使用数据库索引
# 缺点:数据库不是实时更新
# 2. which – 查找命令位置
# which ls
# 优点:快速查找可执行文件
# 3. whereis – 查找文件位置
# whereis ls
# 优点:可以查找二进制、源码、手册页
# 4. type – 查找命令类型
# type ls
# 优点:可以区分别名、函数、内置命令
# 5. fd – 现代化的find替代品
# fd “*.conf”
# 优点:速度快,输出美观,默认忽略隐藏文件和.git目录
# 6. ripgrep (rg) – 文件内容搜索
# rg “error” /var/log/
# 优点:速度快,支持正则表达式
# 7. fzf – 模糊查找工具
# find /var -name “*.log” | fzf
# 优点:交互式模糊查找
# 8. tree – 目录树显示
# tree -L 2 /var
# 优点:以树形结构显示目录
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
