私は「ifconfig」コマンドに関する記事やチュートリアルをいくつか読みましたが、そのほとんどには共通の記述が含まれていました -
「ifconfig は ip コマンドによって非推奨になりました」
ip コマンドを学ぶことを提案しました。しかし、'ip' コマンドが 'ifconfig' よりも強力である理由を説明しているものはありませんでした。
両者の違いは何でしょうか?
答え1
ifconfig
は からのものですnet-tools
が、長い間 Linux ネットワーク スタックに完全に追いつくことができませんでした。また、ioctl
ネットワーク設定に をまだ使用していますが、これはカーネルと対話する方法としては見苦しく、あまり強力ではありません。
Linux ネットワーク コードに多くの変更が加えられ、多くの新機能がnet-tools
、マルチパス ルーティング、ポリシー ルーティング (RPDB を参照) を使用してアクセスできなくなりました。route
同じメトリックを使用して、同じ宛先に複数のルートを追加するなどの愚かな操作を実行できるようになります。
さらに:
ifconfig
一部のデバイスの適切なハードウェア アドレスが報告されません。ipip
、、、sit
などgre
のl2tp
カーネル内静的トンネルを構成することはできません。tun
デバイスを作成することはできませんtap
。- 特定のインターフェースに複数のアドレスを追加する方法も意味が不十分です。
- また、どちらを使用しても Linux トラフィック制御システムを構成することはできません
net-tools
。
参照ifconfig
最悪だ。
編集: 開発が停止するという主張を削除しnet-tools
ました。今ではこの投稿の根拠がどこにあるか忘れてしまいました。net-tools
' はリリースされてから作業が行われていますiproute2
が、ほとんどはバグ修正と、国際化などのマイナーな機能強化と機能追加です。
答え2
ifconfig
は、ネットワーク インターフェイスに関する情報を表示し、いくつかの設定を変更するための従来のコマンドです。特に、インターフェイスを起動したり停止したりできます。ほとんどの Unix バリアントに存在します。
Linux では、このifconfig
コマンドは長い間進化していません。その機能については今でもまったく問題ありません。ifconfig
何かに使用しているのであれば、使用をやめる理由はありません。
Linuxではip
、iproute2ツール スイート。コマンドは、、ip
およびを含むいくつかの従来のコマンドとその他を組み合わせたものです。は、よりもはるかに多くのことを実行できます。 一方、 は、特に組み込みシステムでは常に存在するわけではありません (Linux 以外の Unix バリアントでは決して存在しません)。ifconfig
route
arp
ip
ifconfig
ip
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