Locate / whereis / whichの違いは何ですか


13

locate whereiswhichコマンドの基本的な違いは何ですか。

私が観察した基本的な違いlocateは、ファイルシステム全体で関連するすべてのファイル名を見つけるのに対し、whereisand whichコマンドはインストールされたアプリケーションの場所(ファイルのシステム/ローカルアドレス)だけを与えることです。私の観察はどれくらい正確ですか?

これらのコマンドは内部でどのように実装されていますか。ファイルシステム階層全体でターゲット文字列に一致する特定のファイル名を検索する必要があるのにlocate、なぜダッシュ検索に比べて非常に高速に動作するのlocateですか?


2
そしてどうtype?:P
ジェームスストーン

@jamesmstoneどういう意味ですかtype、詳しく説明してください
チンマヤB

2
申し訳ありませんが、質問に追加しようとしていました。type(私の目には)あなたが言及したものと同様のことをするように見える別のコマンドです。
ジェームスストーン

@jamesmstone私のシステムで動作するタイプのコマンドがあるとは思わない。typeコマンドのマニュアルまたは情報ページが見つかりません。私が試したman typeinfo type
チンマヤB

うーん、なぜ... bashを使用していますか?
ジェームスストーン

回答:


17

whichプログラムのバイナリ実行可能ファイルを検索します(PATHにある場合)。man whichより明確に説明します:

現在の環境で実行されるファイル(またはリンク)のパス名を返します。引数が厳密にPOSIX準拠のシェルでコマンドとして指定されていた場合。これは、引数の名前に一致する実行可能ファイルのPATHを検索することにより行います。シンボリックリンクをたどりません。

whereisプログラムのバイナリ、ソース、およびマニュアルページファイルを検索します。例えば

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

これらのコマンドの出力を引数として渡すls -lか、またはfile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locate実際、パス内のどこかに指定されたパターンを持つすべてのファイルを検索します。(フルパスではなく)名前に-bオプションを含むパターンが含まれるファイルとディレクトリのみを検索するように指示できます。これは通常、必要なものであり、扱いにくいリストを提供します。

locate定期的に(毎日1回cron)更新されるバイナリデータベースを使用するため、高速です。自分で更新して、最近追加したファイルが確実に見つかるように実行できますsudo updatedb

さらにもう1つlocate-ファイルがまだ存在するかどうかは関係ないので、最近削除されたファイルが見つからないようにするには、を使用します-elessリストが長くなる可能性があるため、私もしばしばパイプします。通常私は:

sudo updatedb && locate -b -e gimp | less

ユニティのダッシュ作品が説明されてどのようにここに -それは使用していますツァイトガイストをインデックス・システム・ファイルにし、使用パターンから学び、それはより多くの仕事をしているので、このデータを利用するために、他のアプリケーションを可能にしますlocate


ダッシュを比較して、コマンドのパフォーマンスと実装の詳細を見つけることができますか?バイナリデータベースの更新は、システムで新しいファイルを作成した後に実行する必要があります。そうすることで、期間が無期限に正確になりますか、それともシステムプロセスによって管理されますか。
チンマヤB

2
@Creatorは、1日に1回、cronによって自動的にデータベースを更新します。をインストールすると、すぐにファイルが見つからないものを確認できますlocate。遅く、それはより多くのものを行いますので、(私は私の答えを編集した) -ダッシュは完全に別のインデックスを使用しています
Zanna

1
つまり、locateは、whichまたはwhereisよりも便利で強力ですが、dashはより強力で、機械学習を実装しています。そして、sudo updatedbあなたのコマンドに感謝します-私は-eを定期的に使用しましたが、それを知りませんでした。
チンマヤB

@Creatorうん、あなたはそれをもっと上手に言いました:)それが助けてくれて幸せ
Zanna

0

単に

$ which samba

どのコマンドがPATH設定を介してリストされたプログラムのリストを検索します

$ whereis samba

whereisコマンドは、PATH設定に存在しないプログラムも検索します

$locate samba

また、ファイル名でファイルを検索しますが、ディレクトリ構造自体は検索せず、updatedbによって準備されたデータベースのみを検索します。そのため、検索は検索よりも高速ですが、精度は低くなります。例:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.