Difference between 'ifconfig' and 'ip' commands
ifconfig
is from net-tools
, which hasn't been able to fully keep up with the Linux network stack for a long time. It also still uses ioctl
for network configuration, which is an ugly and less powerful way of interacting with the kernel.
A lot of changes in Linux networking code, and a lot of new features aren't accessible using net-tools
: multipath routing, policy routing (see the RPDB). route
allows you to do stupid things like adding multiple routes to the same destination, with the same metric.
Additionally:
ifconfig
doesn't report the proper hardware address for some devices.- You can't configure
ipip
,sit
,gre
,l2tp
, etc. in-kernel static tunnels. - You can't create
tun
ortap
devices. - The way of adding multiple addresses to a given interface also has poor semantics.
- You also can't configure the Linux traffic control system using
net-tools
either.
See also ifconfig
sucks.
EDIT: Removed assertion about net-tools
development ceasing that by now I forgot where I got for this post. net-tools
' has been worked on since iproute2
was released, though it's mostly bug fixing and minor enhancements and features, like internationalization.
ifconfig
is a traditional command to display information about network interfaces and change some settings. In particular, it can bring interfaces up and down. It exists on most unix variants.
On Linux, the ifconfig
command hasn't evolved in a long time. It's still perfectly fine for what it does. If you're using ifconfig
for something, there's no reason to stop.
Linux also provides the ip
command from the iproute2 tool suite. The ip
command combines several classical commands and more, including ifconfig
, route
and arp
. ip
can do a lot more than ifconfig
. On the other hand, ip
isn't always present, especially on embedded systems (and never on unix variants other than Linux).
Parsing ifconfig
's output kinda sucks. Parsing ip
's output kinda sucks. No winner there.
Just to add some bits to the answer by pilona. Around 2005 a new mechanism for controlling the network stack was introduced - netlink sockets.
To configure the network interface iproute2
makes use of that full-duplex netlink socket mechanism, while ifconfig
relies on an ioctl
system call. Here are 2 main papers on motivation behind netlink and usage of rtnetlink.