A Proper Field Guide to iproute2; Fancy Shell History: No Platform Requireed; A Colon-oscopy You Likely Won’t Mind; 1,840 TILs And Counting
I’m aiming for a common thread around the need to have and retain deep understanding of the tools we use to get stuff done, while also ensuring we keep complexity to a desired minimum.
The clanker purveyors are trying to take our art, music, prose, and expertise away, but we don’t have to make it easy for them.
TL;DR
(This is an LLM/GPT-generated summary of today’s Drop. Ollama and ornith:35b.)
- Daniil Baturin’s task-centered iproute2 user guide organizes commands by use case with worked examples and production caveats, making it the best documentation for the iproute2 suite (https://baturin.org/docs/iproute2/)
- Atuin evolved from a shell-history tool into a full platform with sync, AI, and dotfiles management, while stinkpot offers a lightweight 400-line Go alternative for session-agnostic history searching (https://tangled.org/oppi.li/stinkpot)
- Filip Roséen’s article on the POSIX shell null-command demonstrates how
:enables concise patterns for argument validation, default values, file truncation, and signal handling (https://refp.se/articles/your-shell-and-the-magic-colon) - Josh Branchaud maintains a GitHub repository with over 1,840 “today I learned” entries spanning approximately 75 categories (https://github.com/jbranchaud/til/tree/master)
A Proper Field Guide to iproute2

Daniil Baturin’s “Task-centered iproute2 user guide” has been maintained for years, and it remains the best documentation the iproute2 suite has ever had — official or otherwise.
While traditional man pages enumerate flags, Baturin organizes topics by what you’re trying to do: “Add an address with a human-readable description,” “Create a point-to-multipoint GRE tunnel,” “Bind an interface to a VRF.” Each task gets the full command, a worked example, and the caveats that tend to bite folks in production )like net.ipv4.conf.*.promote_secondaries defaulting differently across distros, so deleting a primary IPv4 address can silently take all your secondaries with it). Or that virtual links are created in the DOWN state. Or that dev is the one word in an ip command you cannot abbreviate, even though every other word can be. (I’ll stop there.)
The scripting components of the suite receive equal care: --oneline, --brief, and --json output modes shown side by side, ready for piping into awk or jq:
$ ip --brief address show lolo UNKNOWN 127.0.0.1/8 ::1/128
Now, at this point in 2026 it may be fashionable (in some circles) to let an agent drive the terminal — ask, and it will happily emit ip link add name vxlan0 type vxlan id 42 .... But an agent that mis-predicts a flag, or picks gre when you needed gretap, leaves you in an undesired state.
Fundamentally, we humans cannot supervise a tool we don’t understand. And in many places (e.g., a wedged VM, a rescue shell, or an internet-less box) the console is all you have.
Knowing ip, bridge, and ss cold is table stakes for anyone touching Linux networking. That was true before LLMs and it stays true after.
Fancy Shell History: No Platform Required

Atuin started as a shell-history tool and somewhere accumulated a platform: a sync server, an AI assistant, a dotfiles manager, a script manager, and a KV store. If you run a fleet of interchangeable cloud instances, that sync story might make sense — any box is any other box, so your history follows you everywhere. But if you are anyting like me, your machines have distinct personalities — a work laptop, a home primary workstation, some diverse cloud VPS hosts, and honeypot or three — syncing history between them is actively wrong. The commands I run my Arkime server are just plain useless noise on my aging M1 MacBooK Pro Max.
stinkpot is the counter-argument: a sqlite-backed history searcher for Bash in about 400 lines of Go. It keeps the two highly useful atuin features: session-agnostic history (one shared store, so commands stop scattering across tmux panes and orphaned SSH sessions) and the ctrl+r searcher TUI:
> search history... 1s vim flake.nix 3m redis-server 3m jj l 788 matches · ↑/↓ move · enter accept · esc cancel
Setup is eval “$(stinkpot init)” in your .bashrc, then stinkpot import to seed it from your existing history. The database lives in ~/.local/share/stinkpot, and if an upgrade ever breaks it, you delete the file and re-import. That’s literally the entire ops manual.
If your fleet is homogeneous and you live in zsh, atuin may be the right call. But 400 LoC is tiny enough to read before you install it.
FWIW, though, I’m still doing fine with McFly.
A Colon-oscopy You Likely Won’t Mind

Filip Roséen actually made this curmudgeon smile this week when I discovered “A shell colon does nothing. Use it anyway.” In it, he walks us through the POSIX shell’s null-command — : — and opens with a trick that hopefully hooked you like it did me: collapsing the four-line “check for required argument” dance into a single line.
: "${1:?missing argument, aborting.}"
${name:?diagnostic} prints your message to stderr and exits non-zero if the variable is unset or empty; use a named variable, and the diagnostic even includes its name. The leading : exists because the expansion fires regardless — without it, the shell treats the expanded result as a command to run (zsh: command not found: 123). The colon evaluates its arguments and discards the result.
The “more colons in the limelight” section is where it gets super cool, with: : "${VAR:=default}" for defaults, : > error.log for truncation, ( : < dataset.json ) && echo YES as a readability probe, trap : INT, and pairing with set -u to assert several variables on one line.
The post links to the canonical source for all of it: POSIX.1-2017’s Shell Command Language, §2.6.2. :?, :=, :-, :+ and their colon-less siblings are all right there — specified, stable, and present on every conformant system.
Scripts using these colon “hacks” might not be as readable (initially) as their more verbose counterparts, but I am hoping they’ll cause other curious humans to dig into the details while the agents are busy burning token budgets with far more Bash blathering.
1,840 TILs And Counting

We’ll make this last section super quick.
Josh Branchaud maintains a GH repo that channels Daniil Baturin (see first resource) across over 1,800 “today I learned” entries across ~75 categories.
Drop me a note if you manage to come away from that resource not learning at least 10 new and useful things.
FIN
Remember, you can follow and interact with the full text of The Daily Drop’s free posts on:
- 🐘 Mastodon via
@dailydrop.hrbrmstr.dev@dailydrop.hrbrmstr.dev - 🦋 Bluesky via
https://bsky.app/profile/dailydrop.hrbrmstr.dev.web.brid.gy
☮️
Leave a Reply