在 OS X 上,我认为通过运行以下命令来填充定位数据库:
sudo /usr/libexec/locate.updatedb
但定位似乎没有在 ~/ 中或下面找到任何东西
默认情况下,locate.updatedb 是否应该索引我的主文件夹?如果是这样,有什么建议或想法为什么不索引?如果它默认不索引 ~/,有什么理由不索引此文件夹层次结构?如果不是,我该如何配置它来执行此操作?
此外,当我从 ~/(以非 root 身份)运行locate.updatedb时,它可以正常工作。当我从下面的任何位置(例如,~/Desktop/)运行它时,我收到以下错误:
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
find: .: Permission denied
答案1
Locate 以“nobody”用户身份运行,以防止其他用户能够在定位数据库中看到“您的”文件。你的帐户是唯一有权浏览您的文件的人,locate 无法看到它们。即使您的帐户是唯一的本地用户,此限制也适用。当您使用sudo
locate.updatedb脚本时,find
它生成的命令会以非特权方式启动。虽然您可以修改脚本以防止出现此问题,但我不能说这是推荐的。
此外,locate 默认不启用,因为它认为 Spotlight/MDS 对大多数人来说更好。我建议尝试 mdfind 命令。如果您决定定期运行locate,请执行sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
以加载其启动的作业以进行定期重新索引。
答案2
通过修改,我们可以使定位器搜索几乎所有地方/usr/libexec/locate.updatedb
。
改变:
if [ "$(id -u)" = "0" ]; then
比如说,
if [ "$(id -u)" = "1" ]; then
安全性有所降低。仅可在个人电脑上使用。