我讀了一些關於“ifconfig”命令的文章/教程,其中大多數都包含一個常見的語句 -
“ip 指令不建議使用 ifconfig”
並建議學習ip命令。但他們都沒有解釋「ip」指令如何比「ifconfig」更強大。
他們兩者有什麼差別呢?
答案1
ifconfig
來自net-tools
,很長一段時間以來都無法完全跟上 Linux 網路堆疊的步伐。它也仍然用於ioctl
網路配置,這是一種醜陋且功能較弱的與核心互動的方式。
Linux 網路程式碼中的大量變更以及許多新功能無法使用net-tools
:多路徑路由、策略路由(請參閱 RPDB)來存取。route
允許您做一些愚蠢的事情,例如使用相同的度量添加到同一目的地的多個路由。
另外:
ifconfig
不報告某些設備的正確硬體位址。- 您無法設定
ipip
、sit
、gre
、l2tp
等核心內靜態隧道。 - 您無法建立
tun
或tap
裝置。 - 向給定介面添加多個地址的方式語義也很差。
- 您也無法使用
net-tools
其中任何一個來設定 Linux 流量控制系統。
也可以看看ifconfig
糟透了。
編輯:刪除了有關net-tools
開發停止的斷言,到目前為止我已經忘記了這篇文章的來源。 ' 自發布net-tools
以來一直在努力,儘管它主要是錯誤修復和較小的增強和功能,例如國際化。iproute2
答案2
ifconfig
是顯示有關網路介面的資訊並更改某些設定的傳統命令。特別是,它可以打開和關閉介面。它存在於大多數 Unix 變體中。
在 Linux 上,該ifconfig
命令已經很長時間沒有發展了。它的功能仍然非常好。如果您正在使用ifconfig
某些東西,就沒有理由停止。
Linux 也提供了ip
來自ip路由2工具套件。該ip
指令結合了多個經典指令及更多指令,包括ifconfig
、route
和arp
。ip
可以做的比 多很多ifconfig
。另一方面,ip
它並不總是存在,特別是在嵌入式系統上(並且在除 Linux 之外的 UNIX 變體上永遠不會出現)。
Parsingifconfig
的輸出有點糟糕。 Parsingip
的輸出有點糟糕。那裡沒有贏家。
答案3
只是為了在 pilona 的答案中添加一些內容。 2005 年左右,引入了控制網路堆疊的新機制 -網路連結套接字。
設定網路介面iproute2
利用全雙工netlink套接字機制,同時ifconfig
依賴ioctl
系統呼叫。這裡有 2 篇主要論文netlink 背後的動機和rtnetlink的使用。
答案4
根據我的經驗,我發現了輸出如果配置相比之下更容易消化ip-*命令,IMO 在視覺上還有一些不足之處。在我的典型使用中,我只需要所給內容的子集,例如介面、狀態、IP 位址以及在這方面如果配置更容易閱讀。
如果配置:
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