{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigdavypiea4ljrj44rcvipugxiys6rxymnvmufc74u5djbgzydnr4",
"uri": "at://did:plc:46ti67tc37qcmwp2vaynk6fq/app.bsky.feed.post/3mf5orakuedq2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreif76otfy5zorpvfp5liaumf2yccxbo2d5mfb45mhjotzhkinlueq4"
},
"mimeType": "image/png",
"size": 22729
},
"path": "/blog/2026-02-18-iproute2/",
"publishedAt": "2026-02-18T18:16:04.959Z",
"site": "https://anarc.at",
"tags": [
"net-tools",
"iproute2",
"in 2008",
"demoted in December 2016",
"in the release notes",
"a bug I have just filed"
],
"textContent": "This is also known as: \"`ifconfig` is not installed by default anymore, how do I do this only with the `ip` command?\"\n\nI have been slowly training my brain to use the new commands but I sometimes forget some. So, here's a couple of equivalence from the old package to `net-tools` the new `iproute2`, about 10 years late:\n\n`net-tools` | `iproute2` | shorter form | what it does\n---|---|---|---\n`arp -an` | `ip neighbor` | `ip n` |\n`ifconfig` | `ip address` | `ip a` | show current IP address\n`ifconfig` | `ip link` | `ip l` | show link stats (up/down/packet counts)\n`route` | `ip route` | `ip r` | show or modify the routing table\n`route add default GATEWAY` | `ip route add default via GATEWAY` | `ip r a default via GATEWAY` | add default route to `GATEWAY`\n`route del ROUTE` | `ip route del ROUTE` | `ip r d ROUTE` | remove `ROUTE` (e.g. `default`)\n`netstat -anpe` | `ss --all --numeric --processes --extended` | `ss -anpe` | list listening processes, less pretty\n\n# Another trick\n\nAlso note that I often alias `ip` to `ip -br -c` as it provides a much prettier output.\n\nCompare, before:\n\n\n anarcat@angela:~> ip a\n 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000\n link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\n inet 127.0.0.1/8 scope host lo\n valid_lft forever preferred_lft forever\n inet6 ::1/128 scope host noprefixroute\n valid_lft forever preferred_lft forever\n 2: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000\n link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff permaddr xx:xx:xx:xx:xx:xx\n altname wlp166s0\n altname wlx8cf8c57333c7\n 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000\n link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff\n inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0\n valid_lft forever preferred_lft forever\n 20: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000\n link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff\n inet 192.168.0.108/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0\n valid_lft 40699sec preferred_lft 40699sec\n\n\nAfter:\n\n\n anarcat@angela:~> ip -br -c a\n lo UNKNOWN 127.0.0.1/8 ::1/128\n wlan0 DOWN\n virbr0 DOWN 192.168.122.1/24\n eth0 UP 192.168.0.108/24\n\n\nI don't even need to redact MAC addresses! It also affects the display of the other commands, which look similarly neat.\n\nAlso imagine pretty colors above.\n\nFinally, I don't have a cheat sheet for `iw` vs `iwconfig` (from `wireless-tools`) yet. I just use NetworkManager now and rarely have to mess with wireless interfaces directly.\n\n# Background and history\n\nFor context, there are traditionally two ways of configuring the network in Linux:\n\n * the old way, with commands like `ifconfig`, `arp`, `route` and `netstat`, those are part of the net-tools package\n * the new way, mostly (but not entirely!) wrapped in a single `ip` command, that is the iproute2 package\n\n\n\nIt seems like the latter was made \"important\" in Debian in 2008, which means every release since Debian 5 \"lenny\" has featured the `ip` command.\n\nThe former `net-tools` package was demoted in December 2016 which means every release since Debian 9 \"stretch\" ships _without_ an `ifconfig` command unless explicitly requested. Note that this was mentioned in the release notes in a similar (but, IMHO, less useful) table.\n\n(Technically, the `net-tools` Debian package source still indicates it is `Priority: important` but that's a bug I have just filed.)\n\nFinally, and perhaps more importantly, the name `iproute` is hilarious if you are a bilingual french speaker: it can be read as \"I proute\" which can be interpreted as \"I fart\" as \"prout!\" is the sound a fart makes. The fact that it's called `iproute2` makes it only more hilarious.",
"title": "Antoine Beaupré: net-tools to iproute cheat sheet",
"updatedAt": "2026-02-18T16:30:46.000Z"
}