我编写了一个简单的 shell 脚本,它使用“find”命令,以便非技术用户可以通过 LAN 上的 Web 浏览器在文件服务器上进行搜索。它可以工作,但有时执行时间较长,而后续搜索则很快。
有没有办法强制缓存“查找”,或者在 CRON 中运行某些操作,每天或每天执行几次,以便用户不必等待很长时间才能获得第一个结果?
答案1
该locate
命令旨在执行您想要的操作。软件包包含一个(通常为每日) cron 作业,该作业会创建现有文件的数据库,然后该locate
命令将使用该数据库来搜索文件,而不是遍历文件系统树。
您的 Linux 发行版甚至可能为您提供几种实现locate
:除了 GNU 中包含的实现之外findutils
,可能还有更新的实现slocate
和/或mlocate
。
slocate
根据文件和目录权限,和都会mlocate
过滤掉运行搜索的用户无法访问的任何搜索结果。mlocate
还可以通过检测上次数据库更新后哪些目录没有发生变化来加快数据库更新速度。
答案2
@telcoM 提供的答案可能是您应该遵循的正确答案。但是,大约十年前,我曾经别无选择,只能将整个目录树保留在缓存中。
我当时的解决方案是
*/5 * * * * /usr/bin/find / 2>&1 >/dev/null
到我的 cron,因此目录树被频繁扫描并保持缓存。