Linux

Linux基礎初心者が詰まりがちなPATHを通すについて

「PATHを通す」とは、コマンドを探しに行くディレクトリの一覧に自分のパスを追加することです。PATHの確認方法、whichでコマンドの実体を探す方法、環境変数との関係を順にたどります。

いろいろなところで詰まりがちなねこだくさんです。
このPATHを通すという作業、環境構築する際に言われるがままに意味もわからずやっていました。

なるほど(わからん)からチョットワカルになる程度まで勉強してみたいと思います。

おやくそく
コマンド行の頭についている$はプロンプトを表しているだけなのでまるごとコピペするとエラーになります。

$ echo $PATH
↓
echo $PATH

※環境変数の頭の$は削っちゃダメ

まずPATHって何

本来なら/bin/lsのように長いパス(長くないけど)をフルパスといますが、これをいちいち打っていたのではめんどくさいです。
lsと打つだけでコマンド発行するために「コマンドサーチパス」を設定することをパスを通すといいます。

全然意味わかりませんね。実際に仮想環境Envaderを利用してやってみます。

PATHの確認

まず$PATHってのは環境変数です。

環境変数って何?

OSが動いているときに使える変数のこと。
OS上の様々なプログラムやコマンドから使用することができます。

※プログラムの中で環境変数を変更した場合はそのプログラムを実行しているときのみ影響します。

続きです。
echoコマンドで$PATHを指定すると指定されているPATHが表示されます。

$ echo $PATH
/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games

それぞれのPATHは:で区切られていることがわかります。

whichコマンド

あれ?lsコマンドのフルパスってなんだっけ?というような場合、whichコマンドとコマンド名を指定することでそのコマンドのフルパスを表示します。
実行ファイルの場所を示しています。

$ which ls
/bin/ls

※オプションに-aをつけることでエイリアスを含む全てのパスを表示します。

いよいよPATHを通します

exportというコマンドを使用してPATHを通します。

export PATH=$PATH:/home/test
# echoコマンドで確認
echo $PATH
/sbin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/test

コード参考:PATHの使い方

末尾に'/home/test'が追加されました。
これでこのディレクトリにあるシェルスクリプトが認識されコマンドとして実行できるようになります。

※exportコマンド自体は環境変数やシェル変数を設定するものです。

【2026-08-15 追記】whichの説明の訂正と、exportが消える件

ここから下は2026年8月のterralienが後から足した追記です。当時の本文は直していません。この記事はPATHの通し方としては合っているのですが、読んだ人が実際にやると高確率でハマる穴が2つ空いていたので埋めます。

訂正: which -aはエイリアスを出しません

本文は「オプションに-aをつけることでエイリアスを含む全てのパスを表示します」と書いていますが、間違いです。-aはPATHの中に同名の実行ファイルが複数あるとき、それを全部出すオプションです。エイリアスは関係ありません。

そもそも/usr/bin/whichは外部コマンドなので、シェルの中にしか存在しないエイリアス・シェル関数・ビルトインは原理的に見えません。これが地味に効きます。

$ alias ls='ls --color=auto'
$ which ls
/bin/ls            # ← エイリアスは見えていない。実際に走るのはエイリアスのほう
$ type ls
ls is aliased to `ls --color=auto'    # ← シェルに聞けば分かる

「whichで出たパスと、実際に実行されるもの」は一致しないことがあります。「whichで見たのにオプションの挙動が違う」というハマり方をしたら、だいたいエイリアスかシェル関数です。

コマンド 正体 エイリアス/関数が見えるか
which 外部コマンド(zshではビルトイン) 見えない
type シェルビルトイン 見える(種類も答える)
command -v シェルビルトイン・POSIX規定 見える(スクリプト向き)

ちなみにDebianは2021年にwhichを非推奨にしてdebianutilsから消そうとし、実行するたび警告を出すようにしました。これは反発を受けて技術委員会が判断し、警告のほうを削除・whichは残すことで決着しています。とはいえPOSIXにあるのはcommand -vのほうなので、スクリプトに書くならこちらが安全です。

# スクリプトで「そのコマンドが入っているか」を調べる定番
if command -v docker >/dev/null 2>&1; then
  echo "dockerあります"
fi

本文のexportは、ターミナルを閉じると消えます

本文はexport PATH=$PATH:/home/testで「PATHを通しました」と書いて終わっていますが、これは今開いているシェルの中だけの話です。ターミナルを閉じたら元に戻ります。残したいなら設定ファイルに書きます。

シェル 書き足す先
bash ~/.bashrc(ログインシェルなら~/.bash_profile)
zsh(macOSの既定) ~/.zshrc

書くときは必ず$PATHを含めること。 export PATH=/home/testのように$PATH:を落として書くと、それまでのPATHを全部捨てて上書きします。lsもviも見つからないシェルができあがり、しかも設定ファイルに書いてあるので開き直しても直りません。その場は/bin/vi ~/.bashrcのようにフルパスで叩けば復旧できます。

あとPATHは前に書いたものが優先されます。同名のコマンドが複数あるとき、どれが勝つかはこの順番で決まります(which -aが本来出すのがこの一覧です)。

export PATH=/home/test:$PATH   # 自分のものを優先したいとき(前に置く)
export PATH=$PATH:/home/test   # システムを優先したいとき(後ろに置く・本文はこちら)

【2026-08-15 追記ぶんの出典】POSIX.1-2017 — command(command -vが標準であること)/bash(1) - Linux manual page(SHELL BUILTIN COMMANDS の節・typeの挙動)/Debian's which hunt(LWN.net)とDebian技術委員会の結論(Bug#994275)(非推奨警告を削除しwhichを残した経緯)

PATHを通すとは

  • 環境変数にコマンドを探すパスを設定することでコマンドを実行することができるようにすること。
  • コマンドのフルパスを調べるにはwhich

謎の儀式からそういう作業であるという認識にレベルアップしました。

猫たちはそのへんで転がっています。
が、今日のところは公園で撮った桜を上げときます。

参考資料

コース一覧 | エンベーダー
コース一覧に関するページです。Linuxを学べるLinux基礎・応用コースを始めとして、エンジニア必須の知識であるデータベースやセキュリティのコースもあります。
パスを通す - Linux技術者認定 LinuC | LPI-Japan
Linuxを学習する上で出てくる素朴な疑問や、便利なテクニックなどを紹介しています。LinuCは、クラウド・DX時代に活躍するエンジニアに求められるLinuxを中心とした技術や知識を身につけることができるLinux技術者認定試験。出題範囲に含まれる技術解説動画やサンプル問題、教科書ダウンロードなど、ITエンジニア向け学...
【Linux】PATHについて - Qiita
ターミナルのコマンドであるPATHについて記載していきます。 PATHとは コマンド検索パスを追加するコマンドです。 コマンド検索パスとは、コマンドの実行ファイルを探しにいくようなパスのことです。 $ ls /bin/ls 例えば上記のようにフォルダとファイルを参照する...
Linux入門 ~「パスを通す」とは~ - Qiita
概要 ある程度プログラミングの経験のあるかたなら、 「パスを通す」という作業をしたことあるのではないでしょうか? こんなコード export PATH="$PATH:/opt/local/bin" 今回は、パスを通すというのは一体なんなのか、なにをしているのか、というの...