ツールをインストールしましたが、それがどこにあるかわかりません /usr/bin、 /usr/local/bin または他の場所。 バイナリファイル、ソースコード、マニュアルページを取得することはできます。しかし、介入を行う前に最も重要な質問、つまりシェルが実際にどのファイルを実行するのかという質問には答えてくれません。
不具合のある設置箇所を修正せずに済むよう、祈るばかりです。 どこですか と コマンド -v そして 親切これらのコマンドは同じものを検索しません。この違いは、プログラムの複数のバージョン、エイリアス、またはBash関数が同じ名前を持っている場合にすぐに役立ちます。

Whereisが本当に求めているもの
最もシンプルな使用例は、オプションを指定せずにコマンド名を指定することです。
バッシュはどこですか
whereis ssh
nginxはどこにあるのか
出力には、同じ行に複数のパスが含まれる場合があります。 どこですか バイナリ、ソースコード、マニュアルドキュメントの 3 種類のファイルを検索します。既知の Linux の場所を調べ、さらに以下の点も考慮します。 パス そしての マンパスしたがって、単にシェルが起動できる実行可能ファイルをスキャンするだけではありません。
検索対象を、興味のあるタイプに絞り込むことができます。
whereis -m bash
whereis -s bash
-bバイナリを検索します。-mマニュアルページと情報ファイルを検索します。-s情報源を探してください。
ソースコード検索で何も表示されない場合でも、必ずしもプログラムのインストールが間違っているとは限りません。多くの場合、配布パッケージにはバイナリファイルとマニュアルのみがインストールされ、ソースコードは含まれていないことがあります。 /usr/srcお使いのマシンで実際に検査されたファイルを確認するには、以下を使用してください。
ここで -l
そこには マニュアルページはどこですか これらのパスと利用可能なオプションの詳細を示します。このコマンドは再帰的なファイル検索ではありません。ディレクトリツリー内の任意のファイルを検索するには、ガイドを参照してください。 Linux で探す。
シェルによって実際に実行されたコマンドを確認してください。
入力した内容が何に表示されるかを知ることが目的であれば python3、 nginx または モンツール、から始めます コマンド -v :
コマンド -v python3
コマンド -v mytool
このコマンドはシェルの解決に従います。指定された名前に応じて、実行可能ファイル、組み込み関数、関数、またはエイリアスの定義へのパスを表示できます。また、戻り値によってスクリプト内にコマンドが存在するかどうかを適切に確認することもできます。
コマンド -v mytool >/dev/null 2>&1 の場合;
echo "mytool が利用可能です"
それ以外
echo "mytool が見つかりません" >&2
フィ
使用しないでください どこですか このテストの場合、一致するファイルが見つからない場合は、ファイル名の後にコロンを表示し、最後にnullの戻りコードを返すだけで済みます。すると、スクリプトはコマンドが存在すると誤って判断してしまいます。
親切
CDタイプ
ls タイプ
type -a ls
タイプ -P ls
ことを示しますCD内部シェルコマンドです。ls タイプ最初に使用された定義を示します。type -a lsその名前を持つエイリアス、関数、組み込み関数、実行可能ファイルを表示します。タイプ -P ls実行可能ファイルの検索を強制しますパス。
そこには GNU Bash タイプのドキュメント これはこれらの結果を正確に説明しています。Zsh、Fish、またはその他のシェルを使用している場合は、それぞれのドキュメントを確認してください。エイリアスと関数の解決方法は、シェルによって異なる場合があります。
「どれ」だけでは全体像が分からない理由を理解する
どれの チュートリアルでは依然としてよく見られる:
どのPython3
どのnginx
通常は実行可能ファイルを探す場所 パス問題は、多くの場合、現在のシェルの正確な状態を知らない外部プログラムであるということです。実装と配布によっては、エイリアス、関数、または組み込み関数を無視する可能性があります。シェルスクリプトでのテストの場合、 コマンド -v の方が適切です。対話型セッションでの名前の衝突を理解するには、 -a と入力します より詳しい情報を提供します。
簡単な例を挙げると、その違いがよくわかります。
alias ll='ls -lah'
どこですか
コマンド -v ll
タイプⅡ
どこですか という名前のファイルが見つかりません llなぜなら、エイリアスはバイナリではないからです。 コマンド -v そして 親切 しかし、彼らはバッシュのよく知られた定義を見ている。 Linuxでのエイリアス 設定を削除せずに、それらを確認し回避する方法を説明します。
同じプログラムの複数のインストールを特定する
衝突は手動インストール後によく発生します /usr/local/bin追加 $HOME/.local/bin またはバージョンの展開 /オプトまずは結果を比較してみましょう。
python3はどこにあるのか
タイプ -a python3
コマンド -v python3
タイプ -P python3
readlink -f "$(type -P python3)"
どこですか -a と入力します Bashが見つけたバージョンを解決順に表示します。 コマンド -v 最初の選択肢を確認すると、 潜在的なシンボリックリンクをすべて解決します。最後に、ファイルのパッケージ所有者を確認します。
dpkg -S "$(type -P python3)"
rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"
Linuxにおけるtar.gzアーカイブ コピーが /usr/local/bin
Bashは既に解決済みの特定のパスも記憶しています。実行ファイルを移動または置換した後は、このキャッシュをクリアしてから再度確認してください。
ハッシュ -l
ハッシュ -r
コマンド -v python3
タイプ -a python3
間違ったファイルが最初に読み込まれた場合は、 パス ランダムなバイナリを削除するのではなく。 Linux 上のパス 一時的な試験と恒久的な変更について詳述する。
whereis を特定のフォルダに限定する
インストールされたソフトウェアを制御する /オプトバイナリまたはマニュアルの検索パスを置き換えることができます。 -f これはフォルダ一覧の終わりと、検索対象の名前の始まりを示します。
whereis -b -B /opt/mytool/bin /usr/local/bin -f mytool
whereis -m -M /opt/mytool/share/man -f mytool
このターゲット検索では、ディスク全体をスキャンすることなくインストール内容を確認できます。 パス
- 使用
コマンド -v能動的な定義を見つけるため。 - 打ち上げ
-a と入力します衝突を検出する。 - ~とのリンクを解決する
読み取りリンク -f; - 使用
どこですかバイナリファイルと関連ドキュメントを見つける。
これらのチェックにより、どのファイルが起動されるか、そのファイルの出所、およびマニュアルの場所がわかります。その後、インストールや…を修正できます。 パス 誤って正しいバージョンを削除してしまうことなく。