跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Linux系统中怎么查找文件 常用find和locate命令

查单个文件名用 locate,查模糊名、按条件或需实时结果时用 find;locate 数据库默认每周更新,不手动运行 sudo updatedb 就查不到刚创建的文件。 直接说结论:查单个文件名用
locate
,查模糊名、按条件(大小/时间/权限)或需要实时结果时用
find
;别指望
locate
能返回刚创建的文件——它的数据库默认每周更新一次,不手动运行
sudo updatedb
就看不到新文件。 为什么
locate
查不到刚保存的文件
locate
不是实时扫描硬盘,而是查一个本地缓存的数据库(
/var/lib/mlocate/mlocate.db
)。这个库不会自动同步,必须人工触发更新。 首次使用前要装包:
sudo apt install mlocate
(Debian/Ubuntu)或
sudo yum install mlocate
(CentOS/RHEL) 更新命令是
sudo updatedb
,普通用户没权限执行 数据库默认每天由
cron
触发一次,但你刚写完的
config.yaml
不会出现在昨天的快照里 搜索时加
-i
可忽略大小写:
locate -i "readme.md"
find
的路径和匹配逻辑容易错在哪
find
从指定路径开始递归遍历,路径写错就白跑;匹配名默认区分大小写,且通配符需引起来,否则被 shell 提前展开。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 路径不能省略:写
find -name "*.log"
是错的,必须写
find . -name "*.log"
find /var/log -name "*.log"
-iname
替代
-name
避免大小写问题:
find /etc -iname "host*"
星号
*
必须加引号,否则当前目录下如果有
abc.log
,shell 会先把它替换成字面量,
find
实际收到的是
find . -name abc.log
想只查文件(排除目录),加
-type f
;查目录用
-type d
按修改时间或大小查文件,
find
怎么写才不翻车
find
的时间单位是「天」或「分钟」,不是秒;大小单位默认是「512 字节块」,不是 KB/MB,直接写
+100M
会报错。 查最近 3 天改过的文件:
find /home -mtime -3
(注意是
-3
,不是
3
) 查 10 分钟内访问过的文件:
find /tmp -amin -10
查大于 10MB 的文件:
find /var -size +20480
(10MB = 10 × 1024 × 2 ÷ 512 = 20480 块) 更直观写法(需 GNU find):
find /var -size +10M
,但 Alpine 或旧版 BusyBox 可能不支持
M
后缀 真正麻烦的是嵌套条件:比如「在
/opt
下找过去 7 天内修改、且大小超过 1MB 的
.conf
文件」,这时候
-and
、括号转义、操作符优先级全得盯紧——漏一个反斜杠或空格,
find
就静默失败,不报错也不输出。

相关文章