Linux查找文件 find grep用法

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
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容