ipコマンドとは
ip command(アイピー・コマンド)は、Linuxでアドレス、経路、インターフェースなどを表示・変更する標準的なコマンドです。iproute2(アイピー・ルート・ツー)パッケージに含まれ、カーネルのネットワーク状態をオブジェクト別に扱います。
基本構造はip [options] OBJECT COMMANDです。OBJECTへリンク、アドレス、経路、近隣機器、規則、netns、トンネル等を置き、その対象をshow・add・削除・replace・設定・監視等で操作します。
ipは「IPアドレスだけを見るコマンド」ではありません。ネットワーク機器から方針経路制御、近隣表、名前空間、トンネルまでを、関連するオブジェクトの集合として扱うLinuxの管理ツールです。

主要オブジェクトを役割で選ぶ
インターフェースのup・停止状態、MTU、MAC、マスター、機器種別、統計等を扱います。
IPv4・IPv6アドレス、プレフィックス、適用範囲、ラベル、preferred・有効有効期間等を扱います。
経路表の経路、ゲートウェイ、機器、指標、ソース等を表示・変更します。
IPv4 ARPとIPv6 NDPで得たIP・リンク層アドレスの対応と状態を扱います。
ソース、マーク、優先度等の方針から、どの表を調べるかを決めます。
機器、経路、ソケット等を分離したネットワーク表示を作り、対象名前空間でコマンドを実行します。
方式別トンネルオブジェクトを作成・表示し、エンドポイントや鍵等を管理します。
リンク・アドレス・経路・近隣機器等のNetlinkイベントを変化時に表示します。
showと変更コマンドを分ける
ip link show、ip address show、ip route showのような表示は通常、ネットワークを変更しません。最初にshowで対象名、現在値、関係する経路を保存します。
add、削除、replace、設定、フラッシュ等は状態を変更します。特にリンク停止状態、アドレス・デフォルトルート削除、近隣機器フラッシュ、名前空間移動は通信を失わせます。リモート管理中は復旧コンソールと自動切り戻しを用意します。
リンクとアドレスは別オブジェクト
linkは機器の存在、管理状態、通信事業者、MTU、ハードウェアアドレス、master-slave関係等を扱います。addressはその機器へ割り当てたIPv4・IPv6アドレスとプレフィックス・適用範囲・有効期間を扱います。
インターフェースがUPでもアドレスがない、アドレスが残っていてもlower層がDOWNという状態があります。二つを分けると「設定値はあるのにつながらない」を説明できます。
経路はアドレス一覧では分からない出口を示す
経路表は宛先プレフィックスに対し、ゲートウェイ、機器、指標等を持ちます。デフォルトルートはより具体的な経路がない宛先へ使う候補です。複数既定がある場合、指標だけでなく方針規則や表が関係します。
ip route get 宛先は、その宛先に対してカーネルが選ぶ経路、機器、ゲートウェイ、送信元アドレス等を照会できます。実際にパケットを送って到達性を測るコマンドではなく、現在の経路制御decisionを問い合わせるものです。
アドレスの適用範囲と有効期間を読む
IPv6アドレスにはグローバル・リンク等の適用範囲、一時的な・deprecated等のフラグ、preferred・有効有効期間が表示されます。preferred有効期間を過ぎたdeprecatedアドレスは既存通信へ使える場合があっても、新規送信元としては優先されにくくなります。
一インターフェースの最初の一個だけを抜き出さず、送信先、経路、ソース選択を合わせます。コンテナーや名前空間ごとに同じインターフェース名が別オブジェクトとして存在する場合もあります。
近隣機器はARPだけでなくNDPも扱う
ip neighbourは、IPv4のARPキャッシュとIPv6のNeighbour Discoveryキャッシュを共通の近隣オブジェクトとして表示します。REACHABLE、STALE、DELAY、PROBE、FAILED、INCOMPLETE等の状態から到達確認の進み方を見られます。
遠隔宛先のMACアドレスを保持する表ではありません。オンリンクでない宛先へは、経路で選ばれたゲートウェイのリンク層アドレスを解決します。
Netlinkを介してカーネルとやり取りする
iproute2ツールは主にNetlink(ネットリンク)ソケットを使い、カーネルからオブジェクトを取得し、変更要求を送ります。古いツールがprocファイルやioctlへ分散していた機能を、現代のカーネルインターフェースから扱えます。
表示中にもネットワーク状態は変わり得ます。一回のshowはスナップショットであり、変化を追うときは監視を使い、時刻とイベント順を記録します。
スクリプトでは省略形と人向け出力へ依存し過ぎない
オブジェクト・コマンド名は短縮できる場合がありますが、将来別名と曖昧になる可能性があるため、スクリプトでは完全な語を使います。human-readableな色・一行表示は閲覧向けで、フィールド位置の文字列切り出しはバージョン差に弱くなります。
対応バージョンではJSON等の構造化された出力を使い、フィールド名と型を処理します。それでもカーネル・iproute2バージョンでフィールド追加はあり得るため、未知フィールドを拒絶しない解析器にします。
実行時変更と永続設定は別
ipコマンドで加えたアドレスや経路は、再起動やNetworkManager・systemd-networkd等の再適用で消える、または上書きされます。調査のための一時変更と、起動時に再現する設定を分けます。
設定管理サービスが管理中のインターフェースへ手動変更すると、サービスが元へ戻すことがあります。現在値、管理者、永続設定、次回起動結果を一組で記録します。
ipコマンドはLinuxネットワークをオブジェクト単位で観測・変更する入口です。リンク、アドレス、経路、近隣機器等を一つの一覧へ混ぜず、showから始め、変更範囲と永続化の責任を確認します。
iproute2版ipのOBJECT・COMMAND構造、link・address・route・neighbour・rule・namespace・tunnel等:ip(8) manual page