{
  "$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"
}