Linux系统中常见查找文件的方法

说白了,Linux找文件就靠这几个命令,find最全能但稍复杂,locate快但更新慢,which找可执行文件,whereis找三件套(二进制/源码/手册页)。

展开讲,find是核心武器,去年我们跑那个监控系统,要找过去一周内修改过且大于5 MB的日志文件,就用find /var/log -type f -size +5 M -mtime -7 ,这个组合用多了自然熟练。
另外一点,locate确实快,但记得它数据库是隔夜更新的,比如你刚删个文件用locate找不到,得等updatedb手动刷新,这个点很多人没注意。
还有个细节挺关键的,which和whereis的区别要分清——which找的是可执行路径,whereis找的是文件三件套,上次帮同事找vim时,他非用which找,结果卡半天,后来换whereis瞬间出来了。

我一开始也以为桌面搜索就是随便搜就行,后来发现有些系统用mlocate代替locate更快,而且不用手动更新,但数据可能没那么全。

建议先掌握find的基本选项,实在要快就先用locate试试,别忘数据库更新。
还有个事,如果你在虚拟机里找文件,路径别写错,/和~的区别能让你哭。

Linux如何查找特定名称的文件? find命令精准定位文件位置

上周 在Linux里用find找文件确实方便。

比如找当前目录下所有.py文件: find . -name ".py"
要是大小写不敏感: find . -iname ".py"
或者找最近3 天修改过的文件: find . -mtime -3 -name ".txt"
要是想删除找到的文件: find . -name "temp" -exec rm {} \;
不过注意,-exec后面命令要用{}代替文件名,结尾加分号。

有时候会卡在权限问题,加sudo解决: sudo find / -name "conf"
总之先定好路径,再用-name或-type缩小范围。
忘了说,-maxdepth可以限制深度,比如只找当前目录不递归: find . -maxdepth 1 -name ".sh"
这些够用了。
算了。