“ifconfig”和“ip”命令之間的區別

“ifconfig”和“ip”命令之間的區別

我讀了一些關於“ifconfig”命令的文章/教程,其中大多數都包含一個常見的語句 -

“ip 指令不建議使用 ifconfig”

並建議學習ip命令。但他們都沒有解釋「ip」指令如何比「ifconfig」更強大。

他們兩者有什麼差別呢?

答案1

ifconfig來自net-tools,很長一段時間以來都無法完全跟上 Linux 網路堆疊的步伐。它也仍然用於ioctl網路配置,這是一種醜陋且功能較弱的與核心互動的方式。

Linux 網路程式碼中的大量變更以及許多新功能無法使用net-tools:多路徑路由、策略路由(請參閱 RPDB)來存取。route允許您做一些愚蠢的事情,例如使用相同的度量添加到同一目的地的多個路由。

另外:

  • ifconfig不報告某些設備的正確硬體位址。
  • 您無法設定ipipsitgrel2tp等核心內靜態隧道。
  • 您無法建立tuntap裝置。
  • 向給定介面添加多個地址的方式語義也很差。
  • 您也無法使用net-tools其中任何一個來設定 Linux 流量控制系統。

也可以看看ifconfig糟透了

編輯:刪除了有關net-tools開發停止的斷言,到目前為止我已經忘記了這篇文章的來源。 ' 自發布net-tools以來一直在努力,儘管它主要是錯誤修復和較小的增強和功能,例如國際化。iproute2

答案2

ifconfig是顯示有關網路介面的資訊並更改某些設定的傳統命令。特別是,它可以打開和關閉介面。它存在於大多數 Unix 變體中。

在 Linux 上,該ifconfig命令已經很長時間沒有發展了。它的功能仍然非常好。如果您正在使用ifconfig某些東西,就沒有理由停止。

Linux 也提供了ip來自ip路由2工具套件。該ip指令結合了多個經典指令及更多指令,包括ifconfigroutearpip可以做的比 多很多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

相關內容