Разница между командами «ifconfig» и «ip»

Разница между командами «ifconfig» и «ip»

Я прочитал несколько статей/руководств по команде «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Команда объединяет несколько классических команд и многое другое, включая ifconfig, routeи arp. ipможет делать гораздо больше, чем ifconfig. С другой стороны, ipне всегда присутствует, особенно во встраиваемых системах (и никогда в вариантах unix, отличных от Linux).

Вывод Parsing ifconfig- отстой. ipВывод Parsing - отстой. Победителя нет.

решение3

Просто добавлю немного к ответу pilona. Около 2005 года был представлен новый механизм управления сетевым стеком -сокеты netlink.

Для настройки сетевого интерфейса iproute2используется механизм полнодуплексного сетевого сокета, при этом ifconfigопирается на ioctlсистемный вызов. Вот 2 основные статьи помотивация netlinkииспользование rtnetlink.

решение4

По моему опыту я обнаружил, что выходifconfigлегче усваивается по сравнению сip-*команды, которые IMO визуально оставляют желать лучшего. В моем типичном использовании мне нужно только подмножество того, что дано, например интерфейс, статус, 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

Связанный контент