`plocate` 在我的主目录中找不到结果,但 `mlocate` 可以。如何在主目录中搜索结果?

`plocate` 在我的主目录中找不到结果,但 `mlocate` 可以。如何在主目录中搜索结果?

目前我正在尝试从 迁移mlocateplocate.

mlocate在我的脚本中使用(注意:locate别名为mlocate或 ,plocate具体取决于我安装的那个)。

成功搜索主目录mlocate

以下是运行后的前 10 个输出locate home(locate 的别名为mlocate):

/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/home/username
/home/username/.bash_history
/home/username/.bash_profile
/home/username/.bashrc
/home/username/.cache
/home/username/.cargo

正如您所看到的,我可以成功地在我的主目录中找到带有mlocate.

未能成功搜索主目录plocate

但是,安装后,我得到了来自等plocate的结果,而我得到的只是一个:/etc//usr//home

运行后locate homelocate别名为plocate):

/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/usr/bin/addgnupghome
/usr/bin/homectl

如您所见,plocate在我的主目录中找不到文件和目录。

我尝试过的

1.作者的评论plocate

这个 manjaro 线程如何使用定位?作者plocate评论如下:

首先,检查数据库最近是否已更新。大多数用户会想要使用 plocate 的 updatedb;自 plocate 1.1.0 以来,plocate-build(从 mlocate 的数据库转换)通常不是您想要的。 [...]

不显示文件的另一个原因通常是权限。检查您是否可以以 root 身份找到这些文件(sudo plocate test);如果可以的话,问题很可能是您没有从根目录一直到目录的访问权限。 plocate 应该找到任何找到 / -name 的内容测试确实如此,但仅此而已。

我跑了sudo updatedb

我的主目录访问权限:

/ 
➜ ll
drwxr-xr-x - root 17 Jul  2022 home/
drwxr-xr-x - root 16 Apr 21:44 usr/

/home 
➜ ll
drwxr-xr-x - username 16 Apr 21:51 username/

看起来确实plocate无法访问我的主目录下的文件和目录,但它具有与usr.我不明白为什么plocate可以看到usr但看不到 下的文件和目录home

2.运行时结果不同sudo

plocate当我运行时,结果是不同的sudo

下面是常规的locate

➜  locate ranger
/usr/bin/ranger
/usr/lib/python3.10/site-packages/ranger
/usr/lib/python3.10/site-packages/ranger_fm-1.9.3-py3.10.egg-info
/usr/lib/python3.10/site-packages/ranger/__init__.py
/usr/lib/python3.10/site-packages/ranger/__pycache__

下面运行为sudo

➜  sudo locate ranger
/root/.config/ranger
/root/.local/share/ranger
/root/.local/share/ranger/bookmarks
/root/.local/share/ranger/history
/root/.local/share/ranger/tagged
/usr/bin/ranger
/usr/lib/python3.10/site-packages/ranger
/usr/lib/python3.10/site-packages/ranger_fm-1.9.3-py3.10.egg-info

我可以在我的主目录中看到结果(即前 5 个结果)。

我想要的是

我希望能够像plocate使用mlocate.换句话说,我期望使用时来自主目录的结果plocate

$ locate home
/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/home/username
/home/username/.bash_history
/home/username/.bash_profile
/home/username/.bashrc
/home/username/.cache
/home/username/.cargo

答案1

TL:DR:如果您使用的是btrfs,请执行以下操作:

  1. 编辑/etc/updatedb.conf
  2. PRUNE_BIND_MOUNTS = "yes"用。。。来代替PRUNE_BIND_MOUNTS = "no"
  3. 保存文件
  4. 更新数据库sudo updatedb
  5. 再次测试以locate home查看目录中的任何输出home

解释

我联系了plocate作者,他善意地将我带到了正确的方向,并回复如下:

其中 90% 的问题似乎是 btrfs 配置错误。您没有说明您正在运行哪个文件系统,但如果是这样,请参阅 PRUNE_BIND_MOUNTS 下的 Updatedb.conf 手册页并检查您的 fstab。

我确实正在使用btrfs(来检查lsblk -f:)。

咨询man updatedb.conf给出以下内容:

PRUNE_BIND_MOUNTS

字符串 0、no、1 或 yes 之一。如果 PRUNE_BIND_MOUNTS 为 1 或 yes,updatedb(8) 不会扫描绑定安装。挂载在绑定挂载的子树中的所有文件系统也会被跳过,即使它们不是绑定挂载。作为例外,不会跳过目录自身的绑定安装。请注意,Btrfs 子卷挂载在内核中作为绑定挂载进行内部处理(请参阅 btrfs-subvolume(8)),因此,如果您还挂载了文件系统根本身,则可能会被跳过。为了解决这个问题,请将您的根目录也设为 Btrfs 子卷。

默认情况下,不会跳过绑定安装。

解决方案请参见上面的TL;DR。

相关内容