Linuxの「場所」キャッシュを更新する方法

Linuxの「場所」キャッシュを更新する方法

検索のキャッシュ/インデックスを更新するには?新しいパッケージをインストールしましたが、ファイルがまだインデックス化されていないようです。では、インデクサーをトリガーするためにどのコマンドを送信する必要がありますか?

私は現在debian jessie(テスト)を開発しています:Linux mbpc 3.13-1-amd64#1 SMP Debian 3.13.7-1(2014-03-25)x86_64 GNU / Linuxの使用

答え1

コマンドは次のとおりです。

sudo updatedb

バラよりman updatedb詳細については。

答え2

OSXでは、次のようになります。sudo /usr/libexec/locate.updatedb

以下に関連付けることができます:sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb

標準のUnixコマンドへのシンボリックリンクを作成する必要があるのは愚かなようですが、実際にはそうです。

答え3

答えは次のとおりです。

sudo updatedb

updatedb厳密に言えば、cronジョブもインストールされている場合は、コマンドラインでのみcronジョブを実行することはほとんど良い考えではありません。 Unix スタイルに応じて、cronjob にはロック条件とスタンドアロンupdatedbコマンドで処理されない多くの設定が含まれます。

ロケーションデータベースに頻繁に更新が必要な場合は、特定のホストの正しいクローンジョブを識別して手動で実行することを確実にする価値があります。

管理者によっては、cronjobがupdatedb他の場所に隠れることがあります。したがって、cronジョブを見つけるための簡単な無差別の試みは次のとおりです。

( sudo crontab -l > /tmp/crontab.root;
  ( echo /tmp/crontab.root; ls -1d /etc/*cron* /etc/*cron*/* ) \
  | tr '\n' '\0' \
  | xargs -0 -r -e grep -nH -e updatedb;
  rm -f /tmp/crontab.root
) 2>/dev/null

私のUbuntuシステムの1つに次の結果が表示されます。

/etc/cron.daily/mlocate:5:[ -x /usr/bin/updatedb.mlocate ] || exit 0
/etc/cron.daily/mlocate:21:flock --nonblock /run/mlocate.daily.lock $IONICE /usr/bin/updatedb.mlocate

したがって、この場合、ロケーションデータベースを更新する正しいコマンドは次のとおりです。

sudo /etc/cron.daily/mlocate

より体系的なアプローチは、およびlocateを提供するパッケージを識別することですupdatedb

たとえば、apt / dpkgパッケージングを使用するオペレーティングシステムでは、どの種類の検索がインストールされているかを確認できます。

dpkg -S locate | grep /bin/

私の場合は、次のようになります。

mlocate: /usr/bin/updatedb.mlocate

どのクローンジョブ(存在する場合)が担当しているかを確認するには、次の手順を実行します。

dpkg -L mlocate | grep cron

私の場合は、次のように表示されます。

/etc/cron.daily
/etc/cron.daily/mlocate

データベースを更新するには、rootとしてcronジョブを実行してください。

sudo /etc/cron.daily/mlocate

cronjobがなく、updateb自体が機能しない場合は、次のようにインストールされているバージョンを見つけてください。

dpkg -L mlocate | grep /bin/

返品:

/usr/bin/mlocate
/usr/bin/updatedb.mlocate

修正する

ワンショットsystemdサービスを使用して毎日Updatebを実行する別の方法があります。データベースサービスの更新mlocate-updatedb.service待つ。サービスは対応するタイマーによってトリガーされます。データベースタイマーの更新mlocate-updatedb.timer。以下は、リポジトリで見つかったサンプルサービスファイルです。

[Service]
Type=oneshot
ExecStart=/usr/bin/updatedb
IOSchedulingClass=idle

この場合は呼び出しのみを行いますがionice -c 3 /usr/bin/updatedb、更新中にシステムメンテナが導入した変更についてサービスファイルを再確認する必要なしにサービスを開始し、正しい環境で実行されていることを確認することをお勧めします。

sudo systemctl start updatedb.service

パッケージファイルのリストを確認するだけでなく、次のコマンドを使用してサービスを確認することもできます。

systemctl list-unit-files | grep 'updatedb\|locate'

答え4

"locate"パッケージは通常、毎日実行され、検索データベースを更新するcronjobが付属しています。

cronjobを手動で実行して、検索データベースを強制的に更新できます。

Debian では、次のことができます。

sudo /etc/cron.daily/locate

システムのパフォーマンスとスキャンしているファイルの量によっては、実行に時間がかかることがあります。

関連情報