はじめに (対象読者・この記事でわかること)
このブログは、Linux/macOS のターミナルで zsh を日常的に利用しているエンジニアや開発者、特に「コマンドが全く効かなくなった」「zsh: command not found が毎回出る」などの症状に遭遇した方を対象としています。
この記事を読むと、以下のことができるようになります。
- zsh がフリーズしたりコマンドが通らなくなる原因を特定できる
.zshrcや環境変数の破損をリセットし、シェルを復旧させる手順が分かる- 再発防止のためのベストプラクティスを理解し、安心して zsh を使い続けられる
執筆のきっかけは、私自身が作業中に突然 zsh が全く反応しなくなり、復旧に時間を取られた経験です。同じ悩みを抱える方の助けになれば幸いです。
前提知識
この記事をスムーズに読み進めるために、以下の知識があると望ましいです。
- 基本的な UNIX/Linux のシェル操作(cd、ls、echo など)
- zsh のインストールと
.zshrcの編集経験 - テキストエディタ(vim、nano、VS Code など)の基本操作
zsh が全く動かなくなる原因と概要
zsh が「全くコマンドが通らない」状態になる原因は大きく分けて 3 種類あります。
-
PATH 環境変数の破損
.zshrcで PATH を上書きした結果、標準的なコマンドが検索対象から外れてしまうケースです。たとえばexport PATH=/my/custom/binだけを書いてしまうと、/usr/binや/binが除外され、lsやgitが見つからなくなります。 -
シンタックスエラーや不正なコマンド
.zshrcに書いたスクリプトがシンタックスエラーを起こすと、zsh の起動時にエラーが発生し、以降のプロンプトが使えなくなることがあります。特にsourceで読み込んだ外部ファイルが壊れていると、全体に影響します。 -
プラグインやフレームワークの競合
Oh My Zshやzplug、antigenなどのプラグインマネージャを導入していると、プラグイン同士やテーマとの競合でシェルが正常に初期化できなくなる場合があります。特に更新時にバージョン不整合が起こると、意図しない挙動が出やすいです。
上記を踏まえて、まずは 環境変数と設定ファイルの状態を確認し、次に 安全な最小構成で zsh を立ち上げ、問題の切り分けを行います。
実際の復旧手順と詳細解説
以下の手順は、システム全体に影響を与えずに安全に問題を切り分け、復旧することを目的としています。順番に実行してください。
ステップ 1:安全モードで zsh を起動
Bashzsh -f
-f オプションは「フラグなし」で起動し、.zshrc などの設定ファイルを読み込みません。これにより、純粋な zsh が起動できるか確認します。もしこの状態で echo $SHELL や ls が動作すれば、設定ファイルに問題があることが確定します。
確認ポイント
- プロンプトが表示され、
echo testがtestと出力されるか which lsが/bin/lsなど正しいパスを返すか
ステップ 2:PATH の状態を検証
安全モードで以下を実行し、PATH が期待通りか確認します。
Bashprint -l $PATH | nl
リストに /usr/bin や /bin が含まれていない場合、PATH が壊れています。次に、デフォルトの PATH を一時的に設定します。
Bashexport PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
この状態で ls や git が動くか再度確認してください。動作すれば、問題は PATH の書き換えに起因していると判断できます。
ステップ 3:.zshrc のバックアップとリセット
現在の設定ファイルをバックアップします。
Bashcp ~/.zshrc ~/.zshrc.backup
次に、最小構成の .zshrc を作成します。
Bashcat > ~/.zshrc <<'EOF' # Minimal .zshrc for troubleshooting export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Uncomment the following line to enable Oh My Zsh (if needed) # source $HOME/.oh-my-zsh/oh-my-zsh.sh EOF
設定を反映させるため、zsh を再起動します。
Bashexec zsh
ここまででシェルが正常に動作すれば、.zshrc のどこかに問題があったことが分かります。
ステップ 4:段階的に設定を復元
バックアップした .zshrc.backup をテキストエディタで開き、以下の順序で 設定を一行ずつ(またはブロックごとに)復元し、都度シェルを再起動して問題が再発しないか確認します。
- PATH の設定:正しい形で再度追加
- エイリアス:
alias ll='ls -la'など簡単なものから - 関数:自作関数が原因になることもある
- プラグイン/テーマ:
source $ZSH/oh-my-zsh.shなど - 外部スクリプト:
source ~/.zshenvなど
この手順で問題の箇所を特定できれば、該当部分を修正または削除すれば復旧完了です。
ハマった点やエラー解決
-
エラー例 1:
zsh: command not found: source
原因:sourceが組み込みコマンドとしてロードできない状態(シェルが sh にフォールバックしている)
対策:zsh -fで起動し、sourceが利用可能か確認。bashからsourceを呼んでいないかもチェック。 -
エラー例 2:
zsh: no such file or directory: /usr/local/bin/custom.sh
原因:.zshrcで読み込んでいる外部スクリプトが削除またはパスが変わっている
対策:該当行をコメントアウトし、ファイルの存在をls -l /usr/local/bin/custom.shで確認。 -
エラー例 3:
zsh: segmentation fault (core dumped)
原因:Oh My Zsh のプラグインが古い Ruby バージョンと衝突
対策:プラグインのバージョンを更新、またはplugins=()で全プラグインを無効化し、徐々に追加。
解決策のまとめ
- 安全モードで起動し、設定ファイルの有無を確認
- PATH が正しく設定されているかを検証し、必要なら一時的にリセット
- .zshrc を最小構成に書き換えてシェルを復帰
- 段階的に設定を戻し、問題箇所を特定
- プラグインや外部スクリプトのバージョンを最新に保ち、互換性を確保
この手順を踏めば、ほとんどの「zsh が全くコマンドを受け付けない」ケースを自力で復旧できるはずです。
まとめ
本記事では、zsh が全くコマンドを受け付けなくなる典型的な原因と、安全モードでの起動 → PATH のリセット → .zshrc の最小化 → 段階的復元 という一連のトラブルシューティング手順を解説しました。
- 原因特定:PATH の破損・設定ファイルのシンタックスエラー・プラグイン競合
- 復旧手順:
zsh -f、PATH 再設定、.zshrc バックアップとリセット、段階的復元 - 再発防止:設定変更は小さくテストし、プラグインは定期的に更新
この流れを身につければ、今後同様のトラブルに遭遇しても迅速に復旧でき、安心して zsh を活用できるようになります。次回は「Oh My Zsh の安全なカスタマイズ方法」に焦点を当てた記事を予定しています。
参考資料
- zsh Manual – 7. Shell Startup Files
- Oh My Zsh GitHub Repository
- Unix & Linux: How to debug a broken $PATH
- 「Zsh Cookbook」 (著者: Michael D. Ernst) – 基本から高度な設定まで網羅
