Linux which コマンド:コマンドの場所を特定する

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、TechCorp の新米開発者として、新しい開発環境のセットアップを担当することになります。あなたの使命は、システムの PATH 内で実行可能ファイルを見つけるための重要なツールである which コマンドを習得することです。このスキルは、ソフトウェア開発とシステム管理の複雑な世界を歩む上で非常に役立つでしょう。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") subgraph Lab Skills linux/echo -.-> lab-215210{{"Linux which コマンド:コマンドの場所を特定する"}} linux/which -.-> lab-215210{{"Linux which コマンド:コマンドの場所を特定する"}} end

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 つの新しい概念を紹介します。

  1. echo コマンド:これは、ターミナルにテキスト/文字列の行を表示するために使用されます。
  2. > 演算子:これは、出力をファイルにリダイレクトするために使用されます。

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 変数内のディレクトリの順序が、デフォルトで使用されるコマンドのバージョンを決定すると説明されました。あなたの 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 コマンドを使用する方法を学びました。以下のことができるようになりました。

  1. インストールされたプログラムの場所を見つける
  2. 存在しないコマンドを扱う
  3. 同じコマンドの複数のインストールを見つける
  4. PATH の優先順位を理解する
  5. カスタムコマンドを作成して見つける

また、echo コマンドや > を使った出力のリダイレクトなどの新しい概念も学びました。

この実験ではカバーされていない which コマンドの追加オプションには、以下のものがあります。

  • -i: コマンド名と PATH 検索の両方で大文字と小文字を区別しない
  • -p: 現在の PATH ではなくデフォルトの PATH を使用する
  • -v: 詳細モード。コマンドが見つからない場合はエラーメッセージを表示する

これらのスキルは、TechCorp での開発者としての旅を続ける上で、そしてそれ以降も非常に役立つでしょう。