Я прочитал несколько статей/руководств по команде «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