Linux「command not found」エラーの原因と解決方法|PATH・シェル設定を徹底解説
- 作成日 2026.06.19
- その他
Linuxを使っていれば誰もが遭遇するエラーです。原因はシンプルですが、「コマンドがインストールされていない」以外にもいくつかのパターンがあり、状況によって対処法が変わります。
本記事では以下の疑問に答えます。
- 「command not found」が出る原因はどれか
- インストール済みなのに出る場合の対処法
- PATH の設定方法と仕組み
sudo時だけ出る場合の対処法- シェル別(bash・zsh・fish)の設定ファイルの場所
- よく使うコマンド別の解決策
結論:先に答えを出す
# ① まずコマンドの場所を探す
which コマンド名
whereis コマンド名
type コマンド名
# ② 見つからなければインストールされているか確認
dpkg -l | grep コマンド名 # Debian/Ubuntu
rpm -qa | grep コマンド名 # RHEL/CentOS/Fedora
# ③ インストールされていなければインストール
sudo apt install コマンド名 # Debian/Ubuntu
sudo dnf install コマンド名 # RHEL/CentOS/Fedora
# ④ インストール済みなのに出る場合はPATHを確認
echo $PATH
which コマンド名 # フルパスを探す
# ⑤ PATHに追加(一時的)
export PATH="$PATH:/追加するディレクトリ"
# ⑥ PATHに追加(恒久的・bash の場合)
echo 'export PATH="$PATH:/追加するディレクトリ"' >> ~/.bashrc
source ~/.bashrc
「command not found」が出る原因
大きく分けると5つのパターンがあります。
パターン1:コマンドがそもそもインストールされていない
→ インストールすれば解決
パターン2:インストール済みだがPATHが通っていない
→ PATH に追加すれば解決
パターン3:コマンド名やオプションのタイポ
→ 正しいコマンド名を確認すれば解決
パターン4:sudo 時だけ出る
→ sudo の PATH 設定の問題
パターン5:シェルの設定ファイルが読み込まれていない
→ source または再ログインで解決
それぞれ順に解説します。
パターン1:コマンドがインストールされていない
まずインストール状況を確認する
# コマンドの場所を探す(インストール済みかどうかの確認)
which git
# /usr/bin/git ← パスが返れば使える
# (何も返らなければインストールされていない)
whereis git
# git: /usr/bin/git /usr/share/man/man1/git.1.gz
# (バイナリ・ソース・マニュアルのパスを全部表示)
type git
# git is /usr/bin/git ← パスが返れば使える
# git: not found ← 見つからない
# パッケージとしてインストールされているか確認(Debian/Ubuntu)
dpkg -l git
dpkg -l | grep git
# パッケージとしてインストールされているか確認(RHEL/CentOS/Fedora)
rpm -qa | grep git
dnf list installed | grep git
どのパッケージをインストールすればいいか調べる
# コマンド名からパッケージを調べる(Debian/Ubuntu)
apt search コマンド名
apt-file search bin/コマンド名 # ファイルからパッケージを検索
# 例:jq コマンドが欲しい
apt search jq
sudo apt install jq
# 例:netstat コマンドが欲しい
apt search netstat
# → net-tools パッケージに含まれる
sudo apt install net-tools
# コマンドがどのパッケージに含まれるか調べる(Ubuntu)
sudo apt install apt-file
sudo apt-file update
apt-file search /usr/bin/コマンド名
# RHEL/CentOS/Fedora でコマンドからパッケージを調べる
dnf provides コマンド名
dnf provides "*/bin/コマンド名"
# 例
dnf provides netstat
# → net-tools パッケージ
sudo dnf install net-tools
よく「command not found」になるコマンドとインストール方法
ネットワーク系
# netstat(ss コマンドが現代的な代替)
sudo apt install net-tools # Ubuntu/Debian
sudo dnf install net-tools # RHEL系
# ss はほぼ必ず使える(iproute2 パッケージ)
ss -tnp
# ifconfig(ip コマンドが現代的な代替)
sudo apt install net-tools
# または
ip addr show # 代替コマンド
# nmap
sudo apt install nmap
# dig / nslookup
sudo apt install dnsutils # Ubuntu/Debian
sudo dnf install bind-utils # RHEL系
# traceroute
sudo apt install traceroute
# または
tracepath ホスト名 # 代替コマンド(多くの環境でデフォルト)
# curl / wget
sudo apt install curl wget
# nc(netcat)
sudo apt install netcat-openbsd # Ubuntu/Debian
sudo dnf install nmap-ncat # RHEL系
テキスト処理系
# jq(JSON処理)
sudo apt install jq
# awk(通常はプリインストール済み)
sudo apt install gawk
# sed(通常はプリインストール済み)
sudo apt install sed
# tree(ディレクトリ構造表示)
sudo apt install tree
# pv(パイプの進捗表示)
sudo apt install pv
# ripgrep(rg)
sudo apt install ripgrep # Ubuntu 18.10以降
# それ以前のUbuntuはバイナリを直接取得
# fzf(ファジーファインダー)
sudo apt install fzf
開発系
# git
sudo apt install git
# make
sudo apt install make
# または開発ツール一式
sudo apt install build-essential # Ubuntu/Debian
sudo dnf groupinstall "Development Tools" # RHEL系
# gcc / g++
sudo apt install gcc g++
# python3 / pip3
sudo apt install python3 python3-pip
# node / npm
# nvm(Node Version Manager)経由が推奨
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
# docker
# 公式インストールスクリプトを使う
curl -fsSL https://get.docker.com | sh
# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
システム管理系
# htop(プロセスモニタ)
sudo apt install htop
# lsof(開いているファイルの確認)
sudo apt install lsof
# strace(システムコールのトレース)
sudo apt install strace
# tcpdump(パケットキャプチャ)
sudo apt install tcpdump
# vim / neovim
sudo apt install vim
sudo apt install neovim
# tmux
sudo apt install tmux
# zip / unzip
sudo apt install zip unzip
# rsync
sudo apt install rsync
# sponge(moreutils)
sudo apt install moreutils
パターン2:インストール済みだがPATHが通っていない
PATH の仕組み
# PATH の確認
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
# コマンドを入力すると、PATH の左から順にディレクトリを探す
# 見つかったら実行、最後まで見つからなければ "command not found"
コマンドの場所を探す
# フルパスを指定して実行できるか試す
/usr/local/bin/コマンド名
/opt/homebrew/bin/コマンド名 # macOS Homebrew
~/.local/bin/コマンド名 # ユーザーローカルインストール
# find でバイナリを探す
find /usr -name "コマンド名" 2>/dev/null
find /opt -name "コマンド名" 2>/dev/null
find $HOME -name "コマンド名" 2>/dev/null
# locate で探す(インデックスが必要)
sudo apt install mlocate
sudo updatedb
locate コマンド名 | grep bin
PATH に追加する
一時的に追加(現在のセッションのみ)
# PATH の末尾に追加
export PATH="$PATH:/usr/local/myapp/bin"
# PATH の先頭に追加(優先度を高くしたい場合)
export PATH="/usr/local/myapp/bin:$PATH"
# 確認
echo $PATH
which コマンド名
恒久的に追加
bash の場合:
# ~/.bashrc に追記(インタラクティブシェル用)
echo 'export PATH="$PATH:/usr/local/myapp/bin"' >> ~/.bashrc
# 即時反映
source ~/.bashrc
# または
. ~/.bashrc
zsh の場合:
# ~/.zshrc に追記
echo 'export PATH="$PATH:/usr/local/myapp/bin"' >> ~/.zshrc
# 即時反映
source ~/.zshrc
全ユーザーに適用(システム全体):
# /etc/environment(推奨:シンプルで確実)
sudo vi /etc/environment
# PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/myapp/bin"
# /etc/profile.d/ にファイルを追加(スクリプト形式)
sudo vi /etc/profile.d/myapp.sh
# export PATH="$PATH:/usr/local/myapp/bin"
sudo chmod +x /etc/profile.d/myapp.sh
よくある PATH 問題のパターン
Homebrew(macOS)
# Homebrew でインストールしたコマンドが見つからない
brew install コマンド名
# → command not found
# Homebrew の PATH を確認
brew --prefix
# /opt/homebrew (Apple Silicon Mac)
# /usr/local (Intel Mac)
# ~/.zshrc または ~/.bashrc に追加
eval "$(/opt/homebrew/bin/brew shellenv)" # Apple Silicon
eval "$(/usr/local/bin/brew shellenv)" # Intel
pipx / pip でインストールしたコマンド
# pip でインストールしたコマンドが見つからない
pip install black
black --version
# zsh: command not found: black
# pipx でインストールしたコマンドの場所
~/.local/bin/black
# PATH に追加
export PATH="$PATH:$HOME/.local/bin"
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
# pipx を使う方が管理しやすい
sudo apt install pipx
pipx ensurepath # 自動で PATH を設定してくれる
pipx install black
nvm / rbenv / pyenv などのバージョンマネージャ
# nvm のコマンドが見つからない
nvm install 20
# command not found: nvm
# nvm は関数としてシェルに読み込む必要がある
# ~/.bashrc または ~/.zshrc に追記
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
source ~/.bashrc
# rbenv の場合
eval "$(rbenv init -)"
# pyenv の場合
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
/usr/local/bin にインストールしたバイナリ
# 手動でバイナリを配置したが見つからない
sudo cp myapp /usr/local/bin/
myapp
# command not found
# 実行権限が付いているか確認
ls -la /usr/local/bin/myapp
chmod +x /usr/local/bin/myapp
# PATH に /usr/local/bin が含まれているか確認
echo $PATH | grep local
パターン3:コマンド名のタイポ・違い
よくある間違い
# ❌ よくある間違い → ✅ 正しいコマンド
python # → python3
pip # → pip3
vi # → vim(環境による)
cls # → clear(Windowsのクセ)
ipconfig # → ip addr / ifconfig(Windowsのクセ)
netstat -ano # → ss -tnp(新しいLinuxでは netstat が廃止)
# タイポ例
whcih git # → which git
sl # → ls(打ち間違い)
gut status # → git status
dokcer ps # → docker ps
シェルが提供する候補表示
# bash:bash-completion が入っていると Tab補完で候補が出る
sudo apt install bash-completion
# zsh:デフォルトで強力な補完
# コマンド名を入力して Tab を押すと候補表示
# コマンドが曖昧な場合に似たコマンドを提案してくれる機能(zsh)
setopt CORRECT
sl
# zsh: correct 'sl' to 'ls' [nyae]? y
コマンドの正式名称を調べる
# apt search でパッケージとコマンド名を調べる
apt search "network statistics"
# man ページで関連コマンドを確認
man -k keyword # keyword に関連するマニュアルを検索
apropos keyword # man -k と同じ
# 例:ネットワーク関連のコマンドを調べる
man -k network | grep -i socket
パターン4:sudo 時だけ「command not found」が出る
原因:sudo はデフォルトで PATH をリセットする
# 一般ユーザーでは動く
which node
# /home/user/.nvm/versions/node/v20.0.0/bin/node
node --version
# v20.0.0
# sudo では動かない
sudo node --version
# sudo: node: command not found
sudo はセキュリティ上の理由から、デフォルトで PATH を /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin などの安全なパスにリセットします。
解決方法
方法1:フルパスで指定する(最も確実)
# which でフルパスを確認
which node
# /home/user/.nvm/versions/node/v20.0.0/bin/node
# フルパスで sudo 実行
sudo /home/user/.nvm/versions/node/v20.0.0/bin/node --version
方法2:sudo -E で環境変数を引き継ぐ
# -E オプションで現在の環境変数(PATH含む)を引き継ぐ
sudo -E node --version
# ただし sudoers の env_reset が有効だと制限される
方法3:sudo env でPATHを明示指定
sudo env PATH="$PATH" node --version
方法4:/etc/sudoers で secure_path を変更
# sudoers を安全に編集(visudo を使う)
sudo visudo
# 以下の行を探して編集
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 必要なパスを追加
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/.nvm/versions/node/v20.0.0/bin"
# またはシステム全体の PATH を引き継ぐ(セキュリティリスクあり)
Defaults env_keep += "PATH"
方法5:/usr/local/bin にシンボリックリンクを作る
# sudo の PATH に含まれる場所にシンボリックリンクを貼る
sudo ln -s $(which node) /usr/local/bin/node
sudo node --version # 動くようになる
パターン5:シェルの設定ファイルが読み込まれていない
設定ファイルを変更したのに反映されない
# よくある状況
echo 'export PATH="$PATH:/usr/local/myapp/bin"' >> ~/.bashrc
myapp
# command not found ← まだ反映されていない
# 解決:設定ファイルを再読み込み
source ~/.bashrc
# または
. ~/.bashrc
# zsh の場合
source ~/.zshrc
シェル別の設定ファイルの読み込みタイミング
bash:
ログインシェル時に読み込まれる:
/etc/profile
~/.bash_profile (なければ ~/.bash_login → ~/.profile の順)
インタラクティブシェル時に読み込まれる:
/etc/bash.bashrc
~/.bashrc
ログアウト時:
~/.bash_logout
# ログインシェルか確認
echo $0
# -bash ← 先頭の - がログインシェルの印
# bash ← 通常のインタラクティブシェル
# .bash_profile から .bashrc を呼び出す(統一するため)
# ~/.bash_profile に追記
[ -f ~/.bashrc ] && source ~/.bashrc
zsh:
~/.zshenv # 常に読み込まれる
~/.zprofile # ログインシェル時
~/.zshrc # インタラクティブシェル時
~/.zlogin # ログインシェル時(zprofileの後)
fish:
~/.config/fish/config.fish # メイン設定
~/.config/fish/conf.d/*.fish # 追加設定
# fish での PATH 追加
fish_add_path /usr/local/myapp/bin
# ~/.config/fish/config.fish に追記することなく恒久的に設定される
SSH ログイン時に設定が読み込まれない
# SSH 非インタラクティブシェルでは .bashrc が読み込まれないことがある
ssh user@host 'echo $PATH'
# → 最小限の PATH しかない
# 解決策1:.bash_profile から .bashrc を呼び出す
# ~/.bash_profile
[ -f ~/.bashrc ] && source ~/.bashrc
# 解決策2:SSH コマンド内で明示的に読み込む
ssh user@host 'source ~/.bashrc && mycommand'
# 解決策3:~/.bashrc の先頭に以下を削除(非インタラクティブ時の早期リターンをなくす)
# 削除または変更が必要な行:
# [ -z "$PS1" ] && return ← この行が原因のことがある
シェル別のエラーメッセージと対処
bash
bash: foo: command not found
# bash の場合、command_not_found_handle 関数でカスタマイズできる
command_not_found_handle() {
echo "コマンド '$1' が見つかりません"
echo "apt search $1 でパッケージを探せます"
return 127
}
Ubuntu では command-not-found パッケージが入っていると自動的にインストール候補を提案してくれます:
sudo apt install command-not-found
sudo update-command-not-found
# 試してみる
foo
# No command 'foo' found, did you mean:
# Command 'foo' from package 'foo' (universe)
zsh
zsh: command not found: foo
# zsh でもコマンド候補表示を有効化
# ~/.zshrc に追記
source /etc/zsh_command_not_found # Ubuntu の場合
fish
fish: Unknown command: foo
# fish は command_not_found_handler 関数で対処
function fish_command_not_found
echo "コマンド '$argv[1]' が見つかりません"
end
環境別のよくある原因
Docker コンテナ
# コンテナ内でコマンドが見つからない場合
# 必要なパッケージをインストール
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
curl \
git \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 実行中のコンテナに入って確認
docker exec -it コンテナ名 bash
which コマンド名
echo $PATH
CI/CD(GitHub Actions など)
# GitHub Actions でコマンドが見つからない場合
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y jq curl
- name: Use jq
run: jq --version
# PATH の追加が必要な場合
- name: Add to PATH
run: echo "/usr/local/myapp/bin" >> $GITHUB_PATH
macOS(zsh デフォルト)
# Homebrew でインストールしたコマンドが見つからない
brew install コマンド名
コマンド名
# zsh: command not found: コマンド名
# ~/.zshrc に Homebrew の初期化を追加
eval "$(/opt/homebrew/bin/brew shellenv)" # Apple Silicon
eval "$(/usr/local/bin/brew shellenv)" # Intel Mac
source ~/.zshrc
Windows WSL
# Windows 側のパスが WSL の PATH に混入していることがある
echo $PATH | tr ':' '\n' | grep Windows
# Windows パスを除外(/etc/wsl.conf で設定)
sudo vi /etc/wsl.conf
[interop]
appendWindowsPath = false
デバッグの手順まとめ
「command not found」が出たときに順番に試す手順です。
# Step 1: コマンド名を確認(タイポがないか)
# ↓
# Step 2: コマンドの場所を探す
which コマンド名
whereis コマンド名
find / -name "コマンド名" -type f 2>/dev/null | head -10
# ↓ 見つかった場合
# Step 3: PATH を確認
echo $PATH | tr ':' '\n'
# フルパスで実行できるか試す
/見つかったパス/コマンド名
# ↓ フルパスで動く場合
# Step 4: PATH に追加
export PATH="$PATH:/見つかったディレクトリ"
echo 'export PATH="$PATH:/見つかったディレクトリ"' >> ~/.bashrc
source ~/.bashrc
# ↓ 見つからなかった場合
# Step 5: インストールされているか確認
dpkg -l | grep コマンド名 # Debian/Ubuntu
rpm -qa | grep コマンド名 # RHEL系
# ↓ インストールされていない場合
# Step 6: インストール
sudo apt search コマンド名 # パッケージ名を調べる
sudo apt install パッケージ名
# ↓ sudo 時だけ出る場合
# Step 7: sudo のPATHを確認
sudo env | grep PATH
sudo which コマンド名
# フルパスで sudo 実行 or /usr/local/bin にリンク
よくある質問(FAQ)
Q1. which コマンド自体が使えない場合は?
# which がない環境では type を使う(bash/zsh に組み込み)
type コマンド名
# または command -v
command -v コマンド名
# whereis は通常プリインストール済み
whereis コマンド名
Q2. インストールしたのにすぐ使えない場合は?
多くの場合、新しいシェルセッションを開くか source すれば解決します。
# 設定ファイルを再読み込み
source ~/.bashrc # bash
source ~/.zshrc # zsh
# それでも動かない場合は新しいターミナルを開く
# またはログアウト→ログインし直す
Q3. alias で設定したコマンドが sudo で使えない場合は?
# sudo は alias を展開しない
alias ll='ls -la'
sudo ll
# sudo: ll: command not found
# 解決策1:alias の末尾にスペースを付けると次の単語も alias として解釈
alias sudo='sudo '
sudo ll # 動くようになる
# 解決策2:bash function を使う
ll() { ls -la "$@"; }
# ただし sudo では function も使えないため、フルパスか sudo bash -c を使う
sudo bash -c 'ls -la'
Q4. スクリプト内でコマンドが見つからない場合は?
#!/bin/bash
# スクリプト内では .bashrc が読み込まれないことがある
# 解決策1:フルパスで指定
/usr/local/bin/mycommand
# 解決策2:スクリプト内で PATH を設定
export PATH="$PATH:/usr/local/myapp/bin"
mycommand
# 解決策3:スクリプトの先頭で設定ファイルを読み込む
source ~/.bashrc # ただし環境への依存が生まれるため注意
# スクリプト内でコマンドの存在を確認する書き方
if ! command -v jq &>/dev/null; then
echo "jq がインストールされていません"
exit 1
fi
Q5. python コマンドが使えず python3 しかない場合は?
# python3 が python として呼べるようにする
sudo apt install python-is-python3 # Ubuntu
# または
sudo ln -s /usr/bin/python3 /usr/local/bin/python
# update-alternatives で管理する
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
python --version
Q6. pip が見つからない場合は?
# pip3 を使う
pip3 install パッケージ名
# または pip を pip3 として設定
sudo apt install python3-pip
python3 -m pip install パッケージ名
# pip が python3 を指すようにする
sudo ln -s /usr/bin/pip3 /usr/local/bin/pip
Q7. 存在するコマンドが急に動かなくなった場合は?
# PATH が壊れていないか確認(完全に空になっている場合など)
echo $PATH
# PATH が壊れている場合はデフォルト値でリセット
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# .bashrc / .zshrc の構文エラーを確認
bash -n ~/.bashrc
zsh -n ~/.zshrc
# 直前の変更を元に戻す
# ~/.bashrc をエディタで開いて最近追加した行を確認・削除
まとめ
「command not found」が出たときは以下の順で確認します。
1. タイポがないか確認 2. which / whereis でコマンドの場所を探す 3. 見つかれば PATH に追加(~/.bashrc や ~/.zshrc) 4. 見つからなければ apt install / dnf install でインストール 5. sudo 時だけ出るならフルパス指定か /usr/local/bin にリンク 6. 設定を変えたら source ~/.bashrc で反映
# 困ったときの基本コマンド
which コマンド名 # どこにあるか
type コマンド名 # シェルがどう解釈するか
echo $PATH # PATH の確認
apt search コマンド名 # パッケージを探す(Ubuntu/Debian)
dnf provides コマンド名 # パッケージを探す(RHEL系)
原因のほとんどは「インストールされていない」か「PATH が通っていない」の2つです。落ち着いて順番に確認すれば必ず解決できます。
参考リンク
公式ドキュメント
関連記事(本サイト)
- apt vs apt-get 徹底比較 – パッケージ管理の使い分け
- bash vs zsh 徹底比較 – シェルの選び方
- Linux grep オプション一覧 – grepコマンドリファレンス
- Linux「Too many open files」エラーの解決方法 – よくあるLinuxエラー
本記事は2026年6月時点の情報をもとに、Ubuntu 24.04 LTS・bash 5.2・zsh 5.9 での動作確認に基づき作成しています。ディストリビューションやバージョンによって挙動が異なる場合があるため、最新情報は各公式ドキュメントをご確認ください。
-
前の記事
【完全リファレンス】jqコマンドのオプション一覧と使い方|実用例80超で徹底解説 2026.06.19
-
次の記事
【完全版】Linux「No such file or directory」エラーの原因と確認方法まとめ 2026.06.19
コメントを書く