【Linux】コマンドのパスをwhichコマンドで調べる方法

Linuxを勉強したい人向け シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】

今回は、linuxについての解説記事です。

Linuxの隠しファイルについて調べる人

Linuxコマンドのパスについて調べる人
「Linuxコマンドのパスがわからなくなってしまいました。/binとか/usr/binとか/usr/local/binとかいっぱいパスがあって、どこに何があるかわかりません。コマンドのパスを表示する方法を具体的に教えてください。」

こんな悩みを解決します。

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事で扱うのはLinux/Macのwhichコマンドです

本記事では、LinuxまたはMac環境を前提にしています。それ以外のUNIX環境では一部の動作が異なることがあります。

本記事の内容

1.コマンドのパスを調べたい時はwhichコマンドを使います

構文は以下の通りです。

which 《コマンド名》

whichコマンドでパスを調べる方法

まずは例として、findコマンドのパスを調べてみます。

$ which find
/usr/bin/find

サーバ内にfindコマンドがどこにいくつあるかは別として、findと打つと/usr/bin/findが実行されることがわかります。

whichコマンドの使い方はこれだけ。簡単ですね。

2.【エンジニア向け】どういう時に使う?

以降は少し深掘りしてみます。

まずwhichでコマンドを調べる必要があるのはどういう時でしょうか、いくつか例を示します。

ケース1:シェルスクリプト開発時のパスが
想定通り通っているか確認したい

例えばシェルスクリプトを開発する場合、.bashrc等の共通の環境設定ファイルの他に、ミドルウェアやアプリケーション固有のパスを別の環境設定ファイルも用いて通したい場合があります。

そうした場合、正しくパスが通っているか確認する上でwhichコマンドを利用すると有用です。対象の環境設定ファイルをsourceし、whichコマンドを使ってパスが通っているか確認します。

ケース2:複数バージョンの同一コマンドが別ディレクトリに
入っている場合、どれが使われるか確認したい

例えば①/binと②/usr/binに異なるバージョンの同じコマンドが入っているとします。

whichコマンドを使うと、①/binのパスが表示されているけど、使いたいのが②/usr/binというケースを検出できます。

なお、対処方法は以下の2つのどちらかです。

  • 対処法1:フルパス指定(/usr/bin/XXX)で使いたいコマンドを実行する。
  • 対処法2:①/binに配置されているコマンドは使わないのなら、
    アンインストールする
  • 対処法3:パスの読み込み順位を変更する
    (/bin→/usr/binの順から、/usr/bin→/binに変更する)

サーバエンジニア視点でサーバへの影響を鑑みると、対処法1が無難で、対処法2は他の人や他のプログラムに影響が無いかの確認が必要、対処法3は影響範囲が①/binと②/usr/bin全体に及ぶため、まず避けるべき最終手段です。

3.【エンジニア向け】注意点

コマンドのパスが正しく通っているかを確認することはシェルスクリプトの開発時や環境構築を行うサーバエンジニアにとって大変重要です。

環境構築時のテストや、アプリケーション・テスト前の環境確認、インフラエンジニアからアプリケーションエンジニアへの環境受け入れなどのシーンでwhichコマンドを活用し、設定誤りが無いことの確認を行うと良いでしょう。

おわりに

今回は以上です。whichコマンド使い方と利用ケースについて解説しました。実務等で利用する場合の参考になりますと幸いです。