「locate」または「find」で「makeinfo」が見つからないのはなぜですか?

「locate」または「find」で「makeinfo」が見つからないのはなぜですか?

私がする時:

locate makeinfo

または

find / -name "*makeinfo*"

何も得られません。

しかし、そうするとmakeinfo --help、適切なヘルプ出力が表示されます。

これはどうして可能なのでしょうか?makeinfo実行ファイルの場合は、どこか、正しいですか? または、エイリアスである可能性もありますが、そうではありません。.bashrc.bash_aliasesおよびすべてのファイルを確認しました。どうしてこのようなことが起こるのか想像できません。

この奇妙な動作の理由は何でしょうか?

編集:両方とも出力しtype makeinfoます。which makeinfo/usr/bin/makeinfo

答え1

問題を見つけました。

locateが高速なのは、検索を高速化するために構築したデータベースに依存しているからと思われます。このデータベースは毎日更新されます。updatedbコマンドはこれを実行します。 は 24 時間ごとに実行されることが判明しましたが、 を使用してファイルを検索しようとしたときには、ファイルが作成されてからupdatedb24 時間が経過していませんでした。 を実行した後、locate はファイルを見つけることができました。locatesudo updatedb

詳細についてはlocate、およびのマニュアルページを読むことをお勧めします。updatedb

に関してはfind、私はせっかちだったので、それが完了するのを待たずに実行してしまったようです。

答え2

私は 'locate(1)' についてあまり知りませんし、使用したこともありません。しかし、'find(1)' は、デフォルトではファイルシステムの境界を越えないため、コマンドを見つけられない可能性があります。makeinfo コマンドは /usr/bin (入力してwhich makeinfo見つけてください) にある可能性があり、'/usr' パーティションは別のファイルシステムにある可能性があります。

編集: ああ! 問題が分かりました! "*makeinfo*" は使用しないでください。'makeinfo' を使用してください。文字列 'makeinfo' がどこかにあるファイルを本当に検索したい場合は、次を使用します: find / -type f -name '*makeinfo*'。つまり、ファイルのみを比較し (ディレクトリではなく、はるかに高速です)、二重引用符ではなく一重引用符を使用します。

最終編集: 私の答えは完全に間違っていました。彼の問題は二重引用符とは無関係でした。

関連情報