`plocate`は私のホームディレクトリに結果を見つけることはできませんが、 `mlocate`はそれを探します。ホームディレクトリから結果を検索するには?

`plocate`は私のホームディレクトリに結果を見つけることはできませんが、 `mlocate`はそれを探します。ホームディレクトリから結果を検索するには?

mlocate現在から移行しようとしていますplocate

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

この万座でスレッドポジショニングの使用方法は?著者はplocate次のようにコメントします。

まず、データベースが最近更新されたことを確認してください。ほとんどのユーザーは、plocateのupdatebを使用したいと思います。 plocate 1.1.0以降、plocate-build(mlocateのデータベースから変換)は通常望ましくありません。 [...]

ファイルが表示されないもう1つの理由は、通常、権限によるものです。ルートとしてファイルが見つかることを確認してください(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わかりません。plocateusrhome

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つの結果など)を表示できます。

私が望むもの

plocateuseと同じことができるようにしたいです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の下のUpdateb.confのマニュアルページを参照してfstabを確認してください。

私は実際にbtrfs(確認するためにlsblk -f:)を使用しています。

相談内容はman updatedb.conf以下の通りです。

PRUNE_BIND_MOUNTS

文字列 0、no、1、または yes のいずれかです。 PRUNE_BIND_MOUNTSが1またはyesの場合、updateb(8)はバインドマウントを検索しません。バインドマウントサブツリーにマウントされているすべてのファイルシステムは、バインドマウントされていない場合でもスキップされます。例外として、ディレクトリ自体のバインドマウントはスキップされません。 Btrfsサブボリュームのマウントはカーネル内でバインドマウントとして扱われます(btrfs-subvolume(8)を参照)、ファイルシステムのルート自体もマウントしている場合はスキップできます。この問題を解決するには、ルートディレクトリもBtrfsサブボリュームにします。

デフォルトでは、バンドルマウントはスキップされません。

回避策については、上記のTL; DRを参照してください。

関連情報