web-dev-qa-db-ja.com

どうしてlocateコマンドは明らかなファイルを見つけられないのですか?

位置特定コマンドは直感的に聞こえます。私はそれがファイルシステム上のファイルを見つけることを期待しています。ただし、実際に存在するシステム上のファイルはほとんど見つかりません。

$ locate ipsec.secrets

ファイルシステムのルートディレクトリ/から実行した場合でも、結果は得られません。ファイルは確かに存在します:

$ whereis ipsec.secrets
ipsec: /usr/sbin/ipsec /etc/ipsec.secrets /etc/ipsec.d /etc/ipsec.conf /usr/lib/ipsec /usr/share/man/man8/ipsec.8.gz

なぜlocateはこのファイルを見つけることができなかったのですか?

5
JohnMerlino

updatedbは1日に1回しか実行されません。最近のファイルを見つけるには、root権限で実行する必要があります。

9
Jan

明らかに存在するファイルをlocateできない場合、2つの可能性しかありません:

  1. ファイル(ディレクトリ)は、locateのデータベースが最後に更新された後に作成されました。デフォルトでは、1日に1回更新されます(/etc/cron.daily/mlocate)。
    十分な特権があれば、それを修正して強制的に更新することができます

    Sudo updatedb
    
  2. ファイル(ディレクトリ)は、updatedbによってスキャンされないパスの下に作成されました(よりまれなケース):構成内のプルーニングされたファイルのキーを見つけることができますファイル/etc/updatedb.conf。 PRUNENAMES、PRUNEPATHS、またはPRUNEFSを検索して結果を変更し、データベースを再度更新します。

    Sudo pico /etc/updatedb.conf
    Sudo updatedb
    

もちろん、特権がなくてもファイルを検索できます。たとえば、次のような位置から始まるすべてのディレクトリとサブディレクトリをスキャンします。

find . -name '*ipsec.secrets*'  # to start from the current directory
find / -name '*ipsec.secrets*'  # to start from the root # long long 

whereisにはハードコードされたパス(検索する場所)があるため、探しているものが常に見つかるとは限りません。

3
Hastur