I remember the first time I had to troubleshoot a server that mysteriously lost network connectivity after a reboot. The interface name had changed from eth0 to enp3s0, and I spent twenty frustrating minutes wondering what the hell happened to my network card. That’s when I learned that knowing how to check network interfaces in Linux isn’t just a nice skill to have – it’s essential.
Whether you’re setting up a new server, diagnosing connectivity issues, or just trying to figure out why your Docker containers can’t reach the internet, understanding your network interfaces is where it all starts. Let me walk you through everything you need to know.
Why Network Interface Names Changed (And Why You Should Care)
If you’ve been working with Linux for a while, you probably remember the old days of eth0, eth1, and wlan0. Simple, predictable, and… completely unreliable.

Here’s the problem: those names were assigned based on the order the kernel detected your network cards. Add a new NIC, change a BIOS setting, or just get unlucky with driver loading order, and suddenly your carefully crafted firewall rules are protecting the wrong interface. I’ve seen production outages caused by exactly this scenario.
Modern Linux distributions use predictable network interface names from systemd. You get names like enp3s0 (Ethernet, PCI bus 3, slot 0) or wlp2s0 (Wireless, PCI bus 2, slot 0). They look weird at first, but they’re consistent across reboots and hardware changes. That consistency is worth the adjustment period.
The Quick Way: Using ip Command (My Go-To Method)
If you want to see all your network interfaces right now, this is the command I run first every single time:
ip link show
This displays every interface on your system with its current state. Here’s what typical output looks like:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP 3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN
Let me break down what matters here. The number at the start (1, 2, 3) is the interface index. The name (lo, enp3s0, wlp2s0) is what you’ll use in commands. The flags in angle brackets tell you the interface state – UP means it’s active, DOWN means it’s not.
The lo interface is your loopback adapter. It’s always there, always at 127.0.0.1, and it’s how your system talks to itself. If you’re running local services, they’re probably listening on lo.
For more detailed information including IP addresses, use:
ip addr show
This adds your IPv4 and IPv6 addresses, broadcast addresses, and subnet masks. It’s the command I use when I need to know not just what interfaces exist, but what addresses they’re using.
The ip command is part of the iproute2 suite, which replaced the older net-tools package. If you’re still using ifconfig, you’re not wrong – it works – but ip is faster, more powerful, and actually maintained. Switch now, thank me later.
When You Need More Detail: nmcli for NetworkManager Systems
Most modern desktop distributions and many servers use NetworkManager to handle network configuration. If that’s your setup, nmcli is incredibly useful.
nmcli device status
This shows every network device with its connection state, connection name, and type. What makes this valuable is seeing which connection profile is active. When you’re managing multiple networks or VPN connections, this clarity is gold.
For even more information about a specific interface:
nmcli device show enp3s0
You’ll get IP addresses, DNS servers, routing info, gateway addresses – everything NetworkManager knows about that interface. I use this constantly when troubleshooting network connectivity issues because it shows you the complete picture in one command.
If NetworkManager isn’t running or your device isn’t showing up, you can check the service status with systemctl. Understanding when to restart versus reload services becomes important here.
The Old Reliable: ifconfig (Still Works, But…)
Look, I’ll be honest. Sometimes I still type ifconfig out of muscle memory. It works on most systems, and if you’re comfortable with it, there’s no emergency to stop using it.
ifconfig -a
The -a flag shows all interfaces, even ones that are down. Without it, you only see active interfaces.
But here’s the thing: ifconfig is deprecated. It’s not installed by default on newer distributions. It uses older kernel interfaces that can’t access all the features modern networking provides. And critically, if you’re looking at recent documentation or asking for help online, people will assume you’re using ip.
Make the switch. Your future self will appreciate it.
Digging Deeper: Checking Physical Interface Details
Sometimes you need to know about the actual hardware, not just the configuration. Is your network cable plugged in? What speed is your link running at? Is the interface even a physical device or a virtual one?
For this, I reach for ethtool:
sudo ethtool enp3s0
This gives you the physical layer details. Ethtool shows link speed (1000 Mb/s, 100 Mb/s), duplex mode (full or half), whether a cable is detected, and auto-negotiation status.
I can’t count how many times I’ve troubleshot “network is down” issues only to discover with ethtool that the problem was a bad cable or a switch port negotiating at 10 Mb/s instead of gigabit speeds.
To check if a link is physically up:
sudo ethtool enp3s0 | grep "Link detected"
If it says “no,” check your cable first. It’s almost always the cable.
Understanding What You’re Looking At
When you check network interfaces, you’ll see several types. Here’s what they mean:
Physical interfaces like enp3s0 or wlp2s0 are actual hardware network cards. These connect to physical cables or wireless access points.
Virtual interfaces like docker0, veth, or tun devices are created by software. Docker creates bridge interfaces. VPNs create tunnel interfaces. Virtual machines create tap interfaces. They’re real interfaces from Linux’s perspective, even though there’s no physical hardware behind them.
Bridge interfaces connect multiple networks together at layer 2. If you’re running VMs or containers, you’ll have these.
VLAN interfaces like enp3s0.10 represent tagged virtual LANs on a physical interface. They let you segment network traffic on the same cable.
Understanding these types helps you make sense of what you see. When I check open ports or diagnose connectivity, knowing whether traffic should go through a physical interface or a bridge is critical.
Quick Troubleshooting with Interface Checks
Let me share my standard workflow when networking isn’t working. This is the process I follow every single time.
First: Is the interface up?
ip link show enp3s0
Look for the UP flag. If it’s not there, bring it up:
sudo ip link set enp3s0 up
Second: Does it have an IP address?
ip addr show enp3s0
No IP address means no network connectivity. Check if DHCP is running or if you need to assign a static address.
Third: Is the physical link active?
sudo ethtool enp3s0 | grep "Link detected"
No link means a cable problem, switch port issue, or hardware failure.
Fourth: Can you reach your gateway?
This is where ping becomes your best friend. Find your gateway IP with ip route, then ping it to verify layer 3 connectivity.
This systematic approach catches 95% of network issues. Start at layer 1 (physical), work up through layer 2 (link), then layer 3 (IP). Most problems are at layer 1 or 2.
Useful One-Liners I Actually Use
Here are some commands I run constantly. Consider these your network interface cheat sheet.
List all interfaces with their IP addresses, one per line:
ip -br addr show
The -br flag means “brief” and it’s perfect for quick checks. Color-coded output shows interface state at a glance.
Show only interfaces that are UP:
ip link show up
Find your default route interface:
ip route show default
This tells you which interface handles internet traffic. When you’re debugging why a server can’t reach external services, this is where you start.
Watch interface statistics update in real-time:
watch -n 1 'ip -s link show enp3s0'
The -s flag adds statistics – packets sent, received, errors, and drops. Watching these live shows you immediately if traffic is flowing. It’s similar to how I monitor system resources in real-time.
Common Mistakes I See (And How to Avoid Them)
After years of helping people debug network issues, I see the same mistakes repeatedly. Let me save you some time.
Forgetting to check if the interface is administratively down. Just because a cable is plugged in doesn’t mean the interface is enabled. Always verify with ip link show.
Assuming eth0 exists on modern systems. It probably doesn’t. Use ip link show to see your actual interface names, then use those names in your scripts and firewall rules.
Not checking both ends of the connection. If your server interface looks fine but you still can’t connect, check the switch port. Check the firewall. Check the routing table. Network problems are rarely isolated to one layer.
Ignoring error counters. Run ip -s link show and look at the error counts. Errors, drops, and collisions indicate hardware problems or configuration issues even if the interface appears up.
Forgetting about permissions. Some commands need root access. If you’re getting “Operation not permitted” errors, try with sudo. This is as fundamental as understanding user permissions in Linux.
The Bottom Line
Checking network interfaces in Linux isn’t complicated once you know the right commands. The ip command should be your default choice – it’s fast, comprehensive, and actively maintained. Add nmcli when you’re working with NetworkManager systems, and keep ethtool around for hardware-level diagnostics.
The real skill isn’t memorizing commands. It’s knowing what to look for and following a systematic troubleshooting process. Start with the physical layer, verify the link is up, confirm you have an IP address, then work your way up the stack. This approach will solve most network issues faster than any single command ever could.
And for what it’s worth? That server that lost connectivity after a reboot taught me more about Linux networking than a dozen tutorials. Sometimes the best way to learn is to break something and figure out how to fix it. Just maybe do it in a lab environment first.







