Mac + zsh 前提 初心者〜実務向け ターミナル / シェル / PATH / pyenv

ターミナルとシェルのまとめ

ここまでの会話内容をもとに、ターミナルで何が起きているのかを、実例つきで整理したまとめです。

特に cdpwdlsPATHpyenv の関係がわかるようにしてあります。

目次

1. ターミナルとシェルの違い

ターミナル(画面・アプリ) ↓ zsh や bash(シェル) ↓ コマンドを解釈して実行
ポイント:「ターミナルで実行している」と言うことは多いですが、正確にはシェルがコマンドを実行しているです。

ターミナル

文字を入力する画面・アプリです。Mac の「ターミナル」や VS Code のターミナルなどがこれにあたります。

シェル

入力された文字列を読み取り、どのコマンドをどう実行するか判断する本体です。Mac では zsh が標準です。

2. コマンドの種類

種類 意味
シェル内蔵コマンド cd echo export シェル自身が持っている機能。シェルの状態を変えられます。
外部コマンド ls grep python3 git 実行ファイルとして存在するコマンドです。PATH を使って探されます。
エイリアス alias ll='ls -la' 短い別名。実体ではなく置き換えルールです。
type cd
type pwd
type ls
cd is a shell builtin
pwd is a shell builtin
ls is /bin/ls

3. コマンド実行の流れ

たとえば ls と入力すると、シェルはだいたい次の順で確認します。

1. alias を探す 2. shell builtin を探す 3. PATH を上から順に探す 4. 見つかった実行ファイルを起動する
ls
↓
/bin/ls が見つかる
↓
/bin/ls を実行
重要:同じ名前のコマンドが複数あっても、PATH の上にあるものが優先されます。

4. cd が特別な理由

cd は単なる外部コマンドではありません。なぜなら、現在のシェル自身の作業場所を変える必要があるからです。

pwd
(cd /tmp)
pwd

このように () の中で実行すると、サブシェルで動くため、元のディレクトリは変わりません。

今のシェル ├─ cd /tmp → 今のシェルが変わる └─ (cd /tmp) → 一時的な子シェルだけ変わる
結論:cd は「シェルの状態を変える」ので、内蔵コマンドになっています。

5. type / which / PATH の見方

type

その名前が、内蔵なのか、外部コマンドなのかを確認できます。

type ls
# ls is /bin/ls

which

PATH から見つかった実行ファイルの場所を表示します。ただし、pyenv などの仲介が入っていると、本体ではなく仲介先が出ることがあります。

which python3

echo $PATH

コマンドを探すフォルダ一覧です。左から右へ優先されます。

echo $PATH
覚え方:PATH は「コマンド探索ルート」です。

6. サブシェルと source

サブシェル

() で囲むと、一時的な別シェルでコマンドが動きます。

pwd
(cd /tmp; pwd)
pwd

シェルスクリプトの実行

./script.sh

これは通常、別プロセスで実行されます。そのため、スクリプト内で cd しても、元のターミナルには反映されません。

source

source script.sh

これは今のシェルでそのまま読み込むので、環境変数の変更や cd などが反映されます。

7. pyenv と shim の仕組み

あなたの環境では python3 は直接本体を指しておらず、まず pyenv の shim を通っています。

which python3
type python3
/Users/user1/.pyenv/shims/python3
python3 is /Users/user1/.pyenv/shims/python3
python3 と入力 ↓ /Users/user1/.pyenv/shims/python3 ↓ pyenv が「今使うべき Python」を判定 ↓ 実際の Python 本体を実行

本体は次のコマンドで確認できます。

pyenv which python3
# /Users/user1/.pyenv/versions/3.10.13/bin/python3
重要:which python3 で見えた場所が、本物の Python とは限りません。shim は「受付係」で、本体ではありません。

8. あなたの環境の読み解き

あなたの PATH には、次のような開発環境向けの経路が含まれていました。

/Users/user1/.local/bin
/opt/homebrew/opt/postgresql@16/bin
/opt/homebrew/Cellar/pyenv-virtualenv/1.2.4/shims
/Users/user1/.pyenv/shims
/Users/user1/.pyenv/bin
/opt/homebrew/bin
/usr/bin
/bin
...
読み方の基本:PATH は上にあるほど優先です。設定の順番が、そのまま挙動の違いになります。

9. よく使う確認コマンド

コマンド 用途
echo $SHELL 今使っているシェルを確認する
type cd 内蔵コマンドか確認する
type ls 外部コマンドの実体を確認する
which python3 PATH 上で見つかる python3 を確認する
pyenv which python3 pyenv が実際に使う Python 本体を確認する
python3 -c "import sys; print(sys.executable)" 今まさに実行されている Python の実体を確認する
echo $PATH コマンド探索ルートを確認する
pwd 今の作業ディレクトリを表示する

まとめ

一番大事な理解:「見えているコマンド名」と「本当に動いている実体」は、必ずしも同じではありません。