InfraAcademy

InfraAcademy Blog

nslookupコマンドが無い場合の対処方法解説「nslookup: command not found」

| #Linux #DNS #コマンド
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、InfraAcademyを運営しているryuです。

今回の記事では、LinuxやDockerコンテナで、

nslookup: command not found

と表示された場合の対処方法を解説します。

結論からいうと、多くの場合はnslookup コマンドを含むDNSツールのパッケージがインストールされていないことが原因です。

ただし、Linuxディストリビューションによってインストールするパッケージ名が違います。

例えば、

  • Ubuntu:dnsutils または bind9-dnsutils
  • Debian:bind9-dnsutils
  • RHEL系:bind-utils
  • Alpine Linux:bind-tools

です。

元の記事ではUbuntu / Debian系の dnsutils だけを紹介していましたが、DockerではAlpine Linuxなどの軽量イメージを使うことも多いため、OSごとに確認した方が早く解決できます。

この記事では、command not found の意味から、OS別のインストール方法、PATHの確認、dighost を使った代替方法まで順番に解説します。

nslookup: command not found とは?

まず、次のように実行したとします。

nslookup example.com

しかし、

bash: nslookup: command not found

または、

sh: nslookup: not found

のように表示されることがあります。

コマンドが無い場合のエラー

command not found は、シェルが実行しようとしたコマンドを見つけられなかったという意味です。

主な原因は次の3つです。

  1. nslookup がインストールされていない
  2. 実行ファイルはあるがPATHに含まれていない
  3. コンテナなどの最小構成OSを使っていてDNSツール自体が省かれている

実際には、1または3のケースが多いと思います。

まずLinuxの種類を確認する

いきなり、

apt install dnsutils

と実行する前に、どのLinuxを使っているか確認しましょう。

次のコマンドを実行します。

cat /etc/os-release

例えばUbuntuなら、

NAME="Ubuntu"

Debianなら、

NAME="Debian GNU/Linux"

Alpine Linuxなら、

NAME="Alpine Linux"

などと表示されます。

Dockerコンテナの場合は、ベースイメージによってパッケージ管理コマンドも変わるため、この確認が大切です。

Ubuntuでnslookupをインストールする

Ubuntuでは、次のコマンドでインストールできます。

sudo apt update
sudo apt install dnsutils

Ubuntuの現在のパッケージでは、dnsutilsbind9-dnsutils へつながるパッケージとして提供されています。

そのため、環境によっては直接、

sudo apt install bind9-dnsutils

としても構いません。

インストール後に、

nslookup example.com

を実行して確認します。

Debianでnslookupをインストールする

現在のDebianでは、nslookupbind9-dnsutils に含まれています。

sudo apt update
sudo apt install bind9-dnsutils

インストール後、

command -v nslookup

を実行すると、

/usr/bin/nslookup

のように実行ファイルの場所を確認できます。

RHEL / Rocky Linux / AlmaLinux系の場合

Red Hat系のLinuxでは、BINDのDNSユーティリティーをまとめた bind-utils を利用します。

環境に応じて、

sudo dnf install bind-utils

を実行します。

古い環境では yum が使われることもありますが、現在のRHEL系では dnf を利用するケースが一般的です。

インストール後に、

nslookup example.com

を確認します。

Alpine Linuxの場合

Dockerでよく使われるAlpine Linuxでは、Debian系の apt は使えません。

Alpineでは、

apk add bind-tools

を実行します。

bind-tools には、

nslookup
dig
host

などのDNSツールが含まれています。

Dockerコンテナ内で、

apk: command not found

ではなく、

apt: command not found

が出ている場合は、「Ubuntuだと思っていたけれど実はAlpineだった」ということもあります。

まず /etc/os-release を確認するのがおすすめです。

Dockerコンテナでnslookupが無いのは珍しくない

Dockerイメージは、ファイルサイズを小さくするために最低限のツールしか入っていないことがあります。

例えば、

FROM ubuntu:24.04

や、

FROM alpine:3.22

をベースにした環境でも、DNS調査用のコマンドが最初から全て入っているとは限りません。

そのため、

ホストPCではnslookupが使える
↓
Dockerコンテナではcommand not found

という状態は不思議ではありません。

デバッグ用に一時的に入れるだけならコンテナ内でインストールできますが、毎回必要ならDockerfileへ追加する方法もあります。

Ubuntu系なら例えば、

RUN apt-get update \
    && apt-get install -y --no-install-recommends dnsutils \
    && rm -rf /var/lib/apt/lists/*

です。

Alpineなら、

RUN apk add --no-cache bind-tools

とできます。

ただし、本番用コンテナには必要のないデバッグツールを大量に入れない方がよい場合もあります。

目的に応じて判断しましょう。

nslookupがインストール済みか確認する

まずは、

command -v nslookup

を実行します。

見つかれば、

/usr/bin/nslookup

などが表示されます。

見つからなければ何も表示されません。

次のようにバージョンを確認する方法もあります。

nslookup -version

環境によって表示形式は異なりますが、コマンド自体が動くかを確認できます。

PATHが原因か確認する

パッケージをインストールしたのに実行できない場合は、PATHを確認します。

echo $PATH

PATHの確認

PATHは、シェルがコマンドを探すディレクトリの一覧です。

例えば、

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

のように表示されます。

nslookup の場所を確認できている場合は、

command -v nslookup

や、

find /usr -name nslookup 2>/dev/null

などで実行ファイルを確認できます。

ただし、通常のパッケージマネージャーから nslookup をインストールした場合、標準的なPATHに配置されるため、PATHを手作業で追加しなければならないケースはそれほど多くありません。

元記事ではPATH変更を主要な対処方法としていましたが、まずは正しいパッケージをインストールできているか確認する方がよいでしょう。

nslookup の基本的な使い方

インストールできたら、実際にDNSへ問い合わせてみましょう。

nslookup example.com

Aレコードなどを確認できます。

DNSサーバーを指定する場合は、

nslookup example.com 8.8.8.8

のように指定できます。

環境で設定されているDNSサーバーを確認するだけでなく、「特定のDNSサーバーへ問い合わせた場合はどうなるか」を比較する際に便利です。

dig を使う方法

DNSを詳しく調査するなら、dig も便利です。

dig example.com

DNSサーバーを指定するなら、

dig @8.8.8.8 example.com

です。

レコード種別を指定することもできます。

dig example.com A
dig example.com MX
dig example.com TXT

トラブルシューティングでは、nslookup よりも dig の出力の方が詳しく、確認しやすい場合があります。

host を使う方法

簡単に名前解決を確認したい場合は host も利用できます。

host example.com

表示がシンプルなので、

「このドメイン名がどのIPアドレスへ名前解決されるかだけ見たい」

という場合に使いやすいです。

nslookupdighost はすべてDNSを調べるコマンドですが、表示内容や用途が少し違います。

command not found とDNSエラーを混同しない

ここは重要です。

次のエラーは、

nslookup: command not found

なので、コマンド自体を実行できていません。

一方、

server can't find example.invalid: NXDOMAIN

のようなエラーは、nslookup 自体は動いています。

そのうえでDNSから「その名前は存在しない」という応答を受けています。

つまり、

command not found
→ Linux環境・パッケージの問題

NXDOMAIN / SERVFAIL / timeout
→ DNS問い合わせの問題

です。

ここを切り分けられるだけでも、トラブルシューティングがかなりしやすくなります。

DNSのトラブルは「どこで失敗しているか」を切り分ける

DNSで問題が起きた場合、いきなり設定ファイルを変更するのではなく、順番に確認しましょう。

例えば、

1. nslookupコマンドは存在する?
2. DNSサーバーへ問い合わせできる?
3. 特定のドメインだけ失敗する?
4. 別のDNSサーバーなら成功する?
5. ネットワーク自体には接続できている?

という流れです。

command not found は1番目で止まっている状態です。

まずツールを実行できる状態にしてから、DNSそのものを調査します。

Linuxとネットワークはセットで学ぶと分かりやすい

nslookup は単なるコマンドではなく、

ドメイン名
↓
DNSサーバーへ問い合わせ
↓
IPアドレス

という名前解決の仕組みを確認するツールです。

そのため、コマンドだけ暗記するより、

  • DNSとは何か
  • IPアドレスとは何か
  • /etc/resolv.conf は何を設定しているのか
  • AレコードやMXレコードとは何か

までつなげて学ぶと理解しやすくなります。

InfraAcademyでは、Linuxだけでなくネットワークやサーバー構築など、インフラエンジニアに必要な基礎を体系的に学習できます。

「コマンドは打てるけど、なぜその結果になるのか分からない」という方は、Linuxとネットワークを一緒に学んでみてください。

InfraAcademyでLinux・ネットワークを学ぶ

nslookup: command not found のまとめ

今回は、

nslookup: command not found

と表示された場合の対処方法を解説しました。

まず、

cat /etc/os-release

でLinuxの種類を確認してください。

そのうえで、環境に合ったパッケージをインストールします。

Ubuntu        → dnsutils / bind9-dnsutils
Debian        → bind9-dnsutils
RHEL系        → bind-utils
Alpine Linux  → bind-tools

インストール後は、

command -v nslookup
nslookup example.com

で確認します。

また、dighost もDNS調査で便利なコマンドです。

command not found とDNSの名前解決失敗は別の問題なので、まず「コマンドが実行できるのか」「DNS問い合わせが失敗しているのか」を切り分けることが大切です。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る