find和grep是Linux下最常用的两个查找工具。find找文件,grep找内容。组合起来基本能解决90%的查找需求。
find 基础用法
find默认递归查找当前目录及所有子目录。
find . -name "*.log"
-name区分大小写。要忽略大小写用-iname。
按类型查找:
find /var/log -type f -name "*.log" # 只查文件
find /etc -type d -name "conf" # 只查目录
-type f是文件,d是目录,l是符号链接。
按时间查找:
find . -mtime -7 # 7天内修改过的文件
find . -mtime +30 # 30天前修改过的文件
-mtime按天,-mmin按分钟。atime是访问时间,ctime是状态变更时间。
按大小查找:
find . -size +100M # 大于100MB
find . -size -1k # 小于1KB
单位:k小写,M大写,G大写。
find 执行操作
查到了直接干点事:
find . -name "*.tmp" -delete # 删掉所有.tmp文件
find . -name "*.bak" -exec rm {} \; # 另一种删法
find . -type f -exec chmod 644 {} \; # 改权限
-exec后面的{}代表找到的每个文件,\;是结束符。注意空格。
用+替代\;可以批量传给命令,性能更好:
find . -name "*.py" -exec grep "TODO" {} +
grep 基础用法
grep在文件内容里搜字符串。默认输出匹配行。
grep "error" /var/log/syslog
常用参数:
grep -i "error" file # 忽略大小写
grep -r "config" /etc/ # 递归搜索目录
grep -l "root" /etc/*.conf # 只输出文件名,不输出内容
grep -n "port" nginx.conf # 显示行号
grep -v "debug" log.txt # 排除匹配行(反选)
grep -c "failed" auth.log # 统计匹配行数
grep 正则
grep默认支持基础正则。用-E开启扩展正则,或者直接egrep。
grep -E "^[0-9]{3}" file # 行首三个数字
grep -E "error|warning" log # 匹配error或warning
grep -E "colo.?r" file # 匹配color或colour
find + grep 组合
最实用的场景:找某个目录下包含特定内容的文件。
find /var/www -type f -name "*.php" -exec grep -l "database" {} \;
这条命令:在/var/www下找所有.php文件,在这些文件里搜”database”关键字,只输出文件名。
更快的写法:
grep -rl "database" /var/www --include="*.php"
grep的-r就是递归,–include指定文件类型。效果一样,但少敲几个字。
实际案例
查最近修改过的配置文件里有没有密码硬编码:
find /etc -type f -mtime -3 -exec grep -l "password" {} \;
找超过1GB的日志文件并清空:
find /var/log -type f -size +1G -exec truncate -s 0 {} \;
查代码里所有没用的import:
grep -rn "import" src/ | grep -v "from" | grep -v "import os"
配合xargs处理大量文件时更高效:
find . -name "*.log" -print0 | xargs -0 grep "ERROR"
-print0和-0配合处理文件名含空格的情况,否则文件名带空格会炸。
几个坑
1. find的路径参数必须放在最前面,不能写成 find -name “*.txt” /tmp
2. grep默认不支持通配符,要用-E或转义
3. 在脚本里用find时,文件名可能包含换行符,用-print0 + xargs -0是安全写法
4. grep在大文件上很慢,先缩小范围再搜
性能建议
如果服务器是雨云的云服务器,它的磁盘IO和CPU性能都不错,跑find grep基本无感。雨云的性价比确实高,稳定性也靠谱,适合跑这类频繁IO的任务。但不管什么机器,搜索/var/log下几百个GB的日志时,先用find按时间缩小范围,再用grep搜内容,能省不少时间。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容