别再一个个找文件:find 的四个日常用法
磁盘快满了不知道谁占的、配置文件不知道放哪了、日志文件太多不知道哪个是今天的,这些问题在服务器上几乎每天都会遇到。find 是 Linux 自带的查找工具,按名字、时间、大小、类型都能找,学会四个用法,找文件不用再一个目录一个目录翻。
1. 按名字找:先定位,再动手
最常用的是按名字找文件。想在 /etc 下面找名字里带 nginx 的配置文件:
find /etc -name "*nginx*"
* 是通配符,匹配任意字符。想找某个具体文件,比如 myapp.conf:
find / -name "myapp.conf" 2>/dev/null
后面的 2>/dev/null 是把“没有权限”的报错丢掉,屏幕上只剩真正的结果,找起来清爽得多。
2. 按时间找:只看最近改过的
出了问题先看最近改过什么文件,这个思路用 find 很好实现。找 /var/log 下面 24 小时内改过的文件:
find /var/log -mtime -1
-mtime -1 表示 1 天以内,-mtime +7 表示 7 天以前。配合 -name "*.log" 还能只看日志:
find /var/log -name "*.log" -mtime -1
排查“昨天还好好的,今天突然不行了”这类问题时,先把最近一天改过的文件列出来,往往一眼就能看到嫌疑对象。
3. 按大小找:磁盘满了先找大文件
磁盘快满的时候,别急着删日志,先看看是谁占的地方最大。找根目录下大于 100M 的文件:
find / -type f -size +100M 2>/dev/null
-type f 只找普通文件,-size +100M 表示大于 100 兆。想按大小排序看,可以交给 du 和 sort:
find /var -type f -size +10M -exec du -h {} \; 2>/dev/null | sort -rh | head -10
这条列出 /var 下面最大的 10 个文件,删之前先确认是不是能删的,别把数据库文件顺手清了。
4. 找到就处理:别手动一个个敲
找到文件之后常常还要批量处理,比如把一周前的旧日志删掉。find 的 -exec 可以直接对找到的每个文件执行命令:
find /var/log -name "*.log" -mtime +30 -exec rm {} \;
这条删掉 30 天前的日志。删之前先不加 -exec,只看列表确认一遍;或者先用 -exec ls -lh {} \; 看一眼大小,确认无误再删。批量操作最怕的就是条件写错,删错了找不回来。
小结
按名字定位、按时间筛最近改动、按大小找大文件、找到之后用 -exec 批量处理。find 的参数看着多,日常其实就这四个组合够用。先想清楚“按什么条件找”,再让 find 去翻,翻文件这件事就不用再靠眼睛一层层看了。
- 点赞
- 收藏
- 关注作者
评论(0)