「ifconfig」コマンドと「ip」コマンドの違い

「ifconfig」コマンドと「ip」コマンドの違い

私は「ifconfig」コマンドに関する記事やチュートリアルをいくつか読みましたが、そのほとんどには共通の記述が含まれていました -

「ifconfig は ip コマンドによって非推奨になりました」

ip コマンドを学ぶことを提案しました。しかし、'ip' コマンドが 'ifconfig' よりも強力である理由を説明しているものはありませんでした。

両者の違いは何でしょうか?

答え1

ifconfigは からのものですnet-toolsが、長い間 Linux ネットワーク スタックに完全に追いつくことができませんでした。また、ioctlネットワーク設定に をまだ使用していますが、これはカーネルと対話する方法としては見苦しく、あまり強力ではありません。

Linux ネットワーク コードに多くの変更が加えられ、多くの新機能がnet-tools、マルチパス ルーティング、ポリシー ルーティング (RPDB を参照) を使用してアクセスできなくなりました。route同じメトリックを使用して、同じ宛先に複数のルートを追加するなどの愚かな操作を実行できるようになります。

さらに:

  • ifconfig一部のデバイスの適切なハードウェア アドレスが報告されません。
  • ipip、、、sitなどgrel2tpカーネル内静的トンネルを構成することはできません。
  • tunデバイスを作成することはできませんtap
  • 特定のインターフェースに複数のアドレスを追加する方法も意味が不十分です。
  • また、どちらを使用しても Linux トラフィック制御システムを構成することはできませんnet-tools

参照ifconfig最悪だ

編集: 開発が停止するという主張を削除しnet-toolsました。今ではこの投稿の根拠がどこにあるか忘れてしまいました。net-tools' はリリースされてから作業が行われていますiproute2が、ほとんどはバグ修正と、国際化などのマイナーな機能強化と機能追加です。

答え2

ifconfigは、ネットワーク インターフェイスに関する情報を表示し、いくつかの設定を変更するための従来のコマンドです。特に、インターフェイスを起動したり停止したりできます。ほとんどの Unix バリアントに存在します。

Linux では、このifconfigコマンドは長い間進化していません。その機能については今でもまったく問題ありません。ifconfig何かに使用しているのであれば、使用をやめる理由はありません。

Linuxではipiproute2ツール スイート。コマンドは、、ipおよびを含むいくつかの従来のコマンドとその他を組み合わせたものです。は、よりもはるかに多くのことを実行できます。 一方、 は、特に組み込みシステムでは常に存在するわけではありません (Linux 以外の Unix バリアントでは決して存在しません)。ifconfigroutearpipifconfigip

Parsingifconfigの出力はちょっとひどいです。 Parsingipの出力はちょっとひどいです。 勝者はいません。

答え3

pilonaさんの回答に少し補足します。2005年頃にネットワークスタックを制御するための新しいメカニズムが導入されました。ネットリンクソケット

ネットワークインターフェースを設定するには、iproute2全二重ネットリンクソケットメカニズムを利用しますが、システムコールifconfigに依存しますioctlネットリンクの背後にある動機そしてrtnetlink の使用法

答え4

私の経験では、ifconfig消化しやすいip-*コマンドは、見た目が少し物足りないと思います。私の通常の使用では、インターフェース、ステータス、IPアドレスなど、提供されているもののサブセットだけが必要なので、この点ではifconfig読みやすくなります。

ifconfig:

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 297454  bytes 14872700 (14.1 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 297454  bytes 14872700 (14.1 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.10  netmask 255.255.255.0  broadcast 10.0.0.255
    ether aa:aa:aa:aa:aa:aa  txqueuelen 1000  (Ethernet)
    aa:aa:aa:aa:aa:aabytes 596277 (582.3 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 9083  bytes 738309 (721.0 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 10.0.0.20  netmask 255.255.255.0  broadcast 10.0.0.255
    ether aa:aa:aa:aa:aa:aa  txqueuelen 1000  (Ethernet)
    aa:aa:aa:aa:aa:aabytes 596277 (582.3 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 9083  bytes 738309 (721.0 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

IPアドレスと比較:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
   valid_lft forever preferred_lft forever
3: eth1 <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff
inet 10.0.0.20/24 brd 10.0.0.255 scope global eth1
   valid_lft forever preferred_lft forever

関連情報