改完配置忘了文件放哪,只记得名字里有 nginx,这时候别一个个目录翻,用 find 最快。下面这几个 linux查找文件命令,覆盖大多数场景。

按名字找,find 加 -name

find /etc -name 'nginx.conf'
find / -name '*.log' -size +100M

第一条在 /etc 下找指定名字,第二条全盘找大于 100MB 的日志。全盘搜记得加 2>/dev/null,否则 /proc 的权限报错会刷满屏幕。

名字记不全就用 -iname 忽略大小写,配合通配符。找最近改过的文件加 -mtime -1,表示一天以内;找空文件加 -empty,找特定用户加 -user。

locate、which、whereis 各管一段

locate 查的是数据库,速度很快,但新文件要先跑 updatedb 才搜得到。which 只找可执行命令,比如 which python3;whereis 还会带上手册页路径。

找内容而不是找名字,用 grep -r 关键字 目录。找被删除但还占着磁盘的文件,用 lsof 配合 grep deleted。

按用户、权限和执行动作

找某个用户创建的文件,用 find /home -user tom -type f;找权限不对的配置,用 -perm 644。目录太深怕漏,就限定 -maxdepth 3,先看三层。

find 还能找到就处理,比如 find . -name '*.tmp' -delete。执行前把 -delete 换成 -print 看一遍,确认列出来的都是废文件再动手。

新版系统里 fd 命令更短更好记,但很多老服务器没装,写脚本还是 find 稳。用完 locate 记得它的结果可能过期,急活别全信。

搜索范围越大,越要先缩小目录

从 / 开始搜整个硬盘,I/O 会明显变慢,线上服务器尽量避开业务高峰。知道大概在 /etc 还是 /var/log,就先圈定目录,再按时间、大小过滤,结果更准。

搜索挂载的网络盘时,先确认权限和挂载状态,否则 find 会卡在某个目录很久,看起来像死机。

日常记住一条 linux查找文件命令就够用:知道大概目录用 find,找命令位置用 which,别无脑全盘扫。