はじめに
この実験では、TechCorp の新米開発者として、新しい開発環境のセットアップを担当することになります。あなたの使命は、システムの PATH 内で実行可能ファイルを見つけるための重要なツールである which
コマンドを習得することです。このスキルは、ソフトウェア開発とシステム管理の複雑な世界を歩む上で非常に役立つでしょう。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、TechCorp の新米開発者として、新しい開発環境のセットアップを担当することになります。あなたの使命は、システムの PATH 内で実行可能ファイルを見つけるための重要なツールである which
コマンドを習得することです。このスキルは、ソフトウェア開発とシステム管理の複雑な世界を歩む上で非常に役立つでしょう。
which
コマンドの基本を理解するTechCorp での新しい役割に慣れる中で、チームリーダーからいくつかの重要な開発ツールのインストールを確認するように依頼されました。このタスクには which
コマンドが最適なユーティリティです。
which
コマンドは、PATH 環境変数にリストされているディレクトリを検索し、指定されたコマンドに関連付けられた実行可能ファイルを見つけるために使用されます。
まずは gcc
コンパイラを見つけてみましょう。
which gcc
次のような出力が表示されるはずです。
/usr/bin/gcc
この出力は、gcc
の実行可能ファイルが /usr/bin
ディレクトリにあることを示しています。つまり、ターミナルで gcc
と入力すると、システムは /usr/bin/gcc
にあるファイルを実行します。
次に、もう 1 つの重要なツールである python
を見つけてみましょう。
which python
次のような出力が表示されるかもしれません。
/usr/local/bin/python
which
コマンドは、PATH 環境変数にリストされているディレクトリを検索し、最初に見つかった一致するものを返します。異なるパスが表示された場合は心配しないでください。これは、Python がシステム上の別の場所にインストールされていることを意味します。
チームリーダーから、TechCorp で以前は techbuild
というカスタムビルドツールを使用していたとのことです。まだインストールされているか確認してみましょう。
which techbuild
出力が何も表示されない場合(Bash Shell)や、techbuild not found
のようなエラーメッセージが表示される場合(Zsh Shell)があります。
これは、which
が PATH 内にコマンドを見つけられない場合、何も返さないためです。出力がないことを驚かないでください。これは、techbuild
が PATH 内のどのディレクトリにも見つからないことをコマンドが伝える方法です。
この動作をより明確にするために、簡単なシェルスクリプトを使用することができます。ここでは 2 つの新しい概念を紹介します。
echo
コマンド:これは、ターミナルにテキスト/文字列の行を表示するために使用されます。>
演算子:これは、出力をファイルにリダイレクトするために使用されます。techbuild
を確認するスクリプトを作成してみましょう。
echo '#!/bin/bash
if which techbuild >/dev/null 2>&1; then
echo "techbuild is installed"
else
echo "techbuild is not installed"
fi' > ~/check_techbuild.sh
このコマンドはいくつかのことを行います。
echo
を使用してシェルスクリプトを書き込みます。>
演算子は、echo
の出力をホームディレクトリ内の check_techbuild.sh
という名前の新しいファイルにリダイレクトします。このスクリプトを実行可能にして実行してみましょう。
chmod +x ~/check_techbuild.sh
~/check_techbuild.sh
このスクリプトは、コマンドが見つからない場合、「techbuild is not installed」と表示します。
開発環境のセットアップを続ける中で、TechCorp が異なるプロジェクトに複数のバージョンの Python を使用していることに気づきました。which
コマンドの -a
オプションを使うと、コマンドのすべてのインストール先を見つけることができます。
which -a python
次のような出力が表示されるかもしれません。
/usr/local/bin/python
/usr/bin/python
/bin/python
この出力は、システム上に複数の Python がインストールされていることを示しています。-a
オプションを指定すると、which
コマンドは PATH 内で見つかったすべての一致する実行可能ファイルを表示し、最初に見つかったものだけでなくなります。
これを理解することは重要です。なぜなら、PATH の設定に応じて実行される可能性のあるすべての Python 実行可能ファイルを確認できるからです。リストの最初に表示されるものが、ターミナルで python
と入力したときに実行されるものです。
チームリーダーから、PATH 変数内のディレクトリの順序が、デフォルトで使用されるコマンドのバージョンを決定すると説明されました。あなたの PATH を確認してみましょう。
echo $PATH
コロンで区切られたディレクトリのリストが表示されます。例えば、
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
順序は重要です。先にリストされているディレクトリほど優先順位が高くなります。つまり、異なるディレクトリに同じ名前の実行可能ファイルが 2 つある場合、PATH で最初に表示されるディレクトリ内のものが使用されます。
では、ls
コマンドのすべてのインスタンスを見つけてみましょう。
which -a ls
次のように表示されるかもしれません。
/usr/bin/ls
/bin/ls
/bin/ls
が最後にリストされていても、PATH の設定によっては、ls
と入力したときに実行されるのがこれになることがあります。これは、開発環境において PATH の優先順位を理解することが重要である理由を示しています。
チームリーダーから、which
コマンドが PATH とどのように相互作用するかを示すために、簡単なカスタムコマンドを作成することが提案されました。ホームディレクトリに hello
という名前のスクリプトを作成してみましょう。
echo '#!/bin/bash
echo "Hello from TechCorp!"' > ~/hello
chmod +x ~/hello
このコマンドは、ホームディレクトリ(~
はホームディレクトリのショートカット)に hello
という名前の新しいファイルを作成し、それを実行可能にします。このスクリプトは実行されると、単に「Hello from TechCorp!」と表示します。
では、実行してみましょう。
hello
ホームディレクトリが PATH に含まれていないため、「command not found」エラーが表示されます。PATH は、シェルが実行可能ファイルを探すディレクトリのリストです。
一時的にホームディレクトリを PATH に追加してみましょう。
export PATH=$PATH:$HOME
このコマンドは、ホームディレクトリを PATH の末尾に追加します。export
コマンドは、変更された PATH をすべてのサブプロセスで利用可能にします。
これで hello
を実行でき、which
コマンドもそれを見つけることができます。
hello
which hello
「Hello from TechCorp!」とスクリプトのパスが表示されるはずです。これは、which
コマンドが PATH にリストされた任意のディレクトリ内の実行可能ファイルをどのように見つけるかを示しています。
この実験では、システムの PATH 内の実行可能ファイルを見つけるために which
コマンドを使用する方法を学びました。以下のことができるようになりました。
また、echo
コマンドや >
を使った出力のリダイレクトなどの新しい概念も学びました。
この実験ではカバーされていない which
コマンドの追加オプションには、以下のものがあります。
-i
: コマンド名と PATH 検索の両方で大文字と小文字を区別しない-p
: 現在の PATH ではなくデフォルトの PATH を使用する-v
: 詳細モード。コマンドが見つからない場合はエラーメッセージを表示するこれらのスキルは、TechCorp での開発者としての旅を続ける上で、そしてそれ以降も非常に役立つでしょう。