在FreeBSD 12 中,在新创建的虚拟机( DigitalOcean ) 上,我尝试使用该locate
命令。
$ locate java
我收到一个错误。
定位:数据库太小:/var/db/locate.database
运行 /usr/libexec/locate.updatedb
于是我跑了locate.updatedb
。
$ /usr/libexec/locate.updatedb
收到一条消息,抱怨权限。
/usr/libexec/locate.updatedb:无法创建 /var/db/locate.database:权限被拒绝
好的。作为 sudo 运行。
$ sudo /usr/libexec/locate.updatedb
我收到了安全警告。
警告
以root身份执行updatedb。这将显示所有文件名
在您的机器上对所有登录用户,这是一个安全风险。
Unix 太有趣了。
➥ 在 FreeBSD 系统上按名称查找文件或目录的正确安全方法是什么?
locate
是一种快速搜索文件的简单方法,因为它有自己的数据库。但是,我总是只使用find(1)
. 结果将返回给运行它的用户,运行它的用户只能找到他们具有相应文件系统权限的文件。find
递归搜索,因此/
如果要搜索每个文件系统,可以指定搜索路径。查找所有名为的文件和目录
foo
:仅查找名为的文件
foo
:仅查找名为的目录
foo
:有很多有用的选项。查看手册页。
run periodic
正如您所了解的,该
locate
命令使用一个数据库来存储您的文件和文件夹名称的索引集合。因为您安装的 FreeBSD 是全新的,所以该数据库尚未构建。什么时候建数据库?当 FreeBSD 执行它的日常家务时。每天、每周和每月都会自动完成一批此类杂务。见
periodic
命令。您可能希望在创建虚拟机后立即执行这些家务活。跑:
或者在一行中运行所有三个。
根据我的经验,这些大约需要一分钟。
➥ 特别是,
weekly
似乎创建/更新locate
数据库。当您找不到您知道存在的东西时,请执行run periodic weekly
.如果好奇,您可以
locate
在运行前后检查数据库的存在和大小periodic
。可能在这里找到:/var/db/locate.database
您现在应该能够
locate
成功使用该命令。