Official Deprecation Status of ifconfig in Linux: Migration Guide to ip Command


2 views

The ifconfig command, part of the net-tools package, was the de facto standard for network interface configuration on Unix-like systems for decades. However, it hasn't been actively maintained since around 2001. The Linux kernel community officially marked net-tools as deprecated in favor of the iproute2 suite (which includes ip) many years ago.

While there isn't a single "deprecation notice" document, several authoritative sources confirm the status:

1. The Linux Kernel Archives no longer include net-tools in their source tree
2. Major distributions like Red Hat and Debian have marked net-tools as "legacy"
3. The iproute2 documentation states it's the "current" network configuration toolset
4. The net-tools GitHub repository shows minimal maintenance activity

ifconfig lacks support for modern networking features:

• No native support for network namespaces
• Limited IPv6 functionality  
• Can't manage advanced routing policies
• Doesn't support multiple address families simultaneously
• Missing modern interface types like bridges and VLANs

Here's a comparison of common operations:

# Show interfaces
ifconfig -a
ip address show   # or ip a

# Bring interface up/down
ifconfig eth0 up
ip link set eth0 up

# Assign IP address
ifconfig eth0 192.168.1.100 netmask 255.255.255.0
ip address add 192.168.1.100/24 dev eth0

More advanced use cases with ip:

# Add multiple IP addresses
ip address add 192.168.1.101/24 dev eth0 label eth0:1
ip address add 192.168.1.102/24 dev eth0 label eth0:2

# Show routing table
ip route show   # vs route -n

# Add default gateway
ip route add default via 192.168.1.1

The ip command offers several architectural advantages:

• Unified interface for all network operations
• Better scripting support with JSON output option
• More consistent syntax across operations
• Future-proof for new networking features
• Better integration with network namespaces

To verify which tools are installed:

# Check ifconfig availability
which ifconfig

# Check iproute2 version
ip -V

# Verify net-tools package status (Debian/Ubuntu)
dpkg -l net-tools

# Verify net-tools package status (RHEL/CentOS)
rpm -q net-tools

Some legacy scenarios might require ifconfig:

• Older embedded systems with limited packages
• Certain network monitoring tools that parse ifconfig output
• Scripts that can't be immediately updated
• Some container images that exclude iproute2 for size

The ifconfig command has been a staple of Unix-like systems since the 1980s, originally part of the BSD net-tools package. For decades, it was the primary tool for network interface configuration:


# Traditional ifconfig usage
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up

The Linux community began moving away from net-tools (including ifconfig) in the early 2000s. Key milestones:

  • 2001: iproute2 (containing ip command) introduced in Linux 2.2.x
  • 2009: Major distributions started marking net-tools as deprecated
  • 2011: Arch Linux removed net-tools from base installation
  • 2013: Red Hat announced deprecation in RHEL 7

The most authoritative statement comes from the net-tools project page itself: "This is the historical home of Linux net-tools... it is suggested to use iproute2 instead for all new work."

The ip command from iproute2 offers significant advantages:


# Modern equivalent using ip command
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
Feature ifconfig ip
IPv6 support Limited Full
Network namespaces No Yes
VLAN handling Basic Advanced
Output format Inconsistent Structured

While ifconfig still ships with many systems for backward compatibility:

  • Ubuntu: net-tools not installed by default since 18.04
  • RHEL/CentOS: Available but not in minimal installs
  • Debian: Marked as "optional" in standard installation

Common ifconfig commands and their ip equivalents:


# Show interfaces
ifconfig -a → ip addr show

# Set MTU
ifconfig eth0 mtu 9000 → ip link set eth0 mtu 9000

# Promiscuous mode
ifconfig eth0 promisc → ip link set eth0 promisc on

For scripting, the -json flag in modern ip versions provides machine-readable output:


ip -json addr show eth0 | jq '.[0].addr_info[0].local'

Some legacy systems or embedded environments may still require ifconfig, particularly when:

  • Working with ancient network drivers
  • Maintaining decades-old scripts
  • Debugging issues with obscure network hardware

However, for all new development and system administration tasks, the ip command should be your standard tool. The Linux kernel development team has made it clear that new networking features will only be exposed through iproute2 interfaces, not through the legacy net-tools API.