Modern Linux networking dashboard for the terminal. Shows all IP / networking info in one view, with a basic and an advanced (--advanced) switch.
Built as a single Go binary — no Python, no pip — so the same file works on Ubuntu and Fedora 44.
curl -fsSL https://raw.githubusercontent.com/laneyweb/linux-ip/main/install.sh | bash
linux-ip # basic view
linux-ip --advanced # sysadmin detail (routes, DNS, ports, firewall)
linux-ip -i # fullscreen live dashboard (click/Enter copies IPs)
linux-ip --json # scriptable outputBasic (default): hostname, primary IPv4/iface, gateway, per-interface IPv4/MAC/state, DNS servers, WiFi SSID (if any). Public IP is hidden unless you opt in.
Advanced (-a, --advanced): everything in basic plus IPv4/IPv6 routing
tables, DNS detail (/etc/resolv.conf + resolvectl), all interfaces with
MTU/driver/duplex/IPv6, WiFi detail, listening ports (ss), firewall
detect-only (ufw/firewalld/nft/iptables), VPN/Docker/virtual flags.
| Flag | Description |
|---|---|
-a, --advanced |
sysadmin detail view |
-i, --interactive |
fullscreen live dashboard (btop-style, click/Enter to copy) |
--json |
JSON output (for scripts) |
--no-color |
plain text (also honors NO_COLOR) |
--ip6, --ipv6 |
include IPv6 addresses, v6 routes, v6 DNS (default: IPv4 only) |
--public-ip |
opt-in public IP lookup via https://api.ipify.org |
--copy <field> |
copy to clipboard: ip4|ip6|gateway|dns|public|mac|tailscale |
-v, --version |
print version |
DNS shows the effective uplink servers (e.g. 192.168.1.188 from the
default-route link), not the 127.0.0.53 systemd-resolved stub. VPN links
(NordVPN ~. catch-all, Tailscale 100.100.100.100) are listed too — see
--advanced → DNS DETAIL for the per-link breakdown.
Tailscale (when installed and logged in) gets a TAILSCALE: line in basic
and a full section in advanced (self 100.x IP, hostname, peer count).
Fullscreen btop-style dashboard with 2s auto-refresh and live per-interface
throughput (↓22KB/s ↑727B/s, sourced from sysfs — no root needed):
- Click any highlighted IP/DNS/gateway, or navigate with
↑↓/j/kand pressEnter/c, to copy it (wl-copy→xclip/xsel→ OSC52). atoggles basic/advanced,pfetches the public IP (opt-in),rrefreshes now,g/Gjump top/bottom,qquits.- Honors
--advanced(start advanced) and--ip6;--jsonis rejected with--interactive. Requires a terminal.
Clipboard backends: wl-copy (Wayland) → xclip/xsel (X11) → OSC52
(SSH). Prints the value with a hint when no backend is available.
linux-ip --no-color
linux-ip -a
linux-ip --json | jq .interfaces
linux-ip --copy ip4 # primary IPv4 to clipboard
linux-ip --public-ip # include public IP (external request)Example basic output:
linux-ip — basic ● myhost
PRIMARY 192.168.1.42 IFACE wlp2s0 GATEWAY 192.168.1.1
[up] wlp2s0 192.168.1.42/24 9c:6b:00:xx:xx:xx wifi
DNS: 1.1.1.1, 8.8.8.8 (systemd-resolved)
WIFI: HomeNet signal -52 dBm
PUBLIC: hidden (use --public-ip to opt in)
| Distro | Tested | Notes |
|---|---|---|
| Ubuntu 24.04 | ✅ | apt install iproute2 wireless-tools for full detail |
| Fedora 44 | ⏳ | uses NetworkManager + firewalld paths, see docs/TESTING.md |
Portable sources only: Go stdlib + /sys/class/net + iproute2.
nmcli/iw/ethtool/ss/resolvectl are best-effort. Never requires root.
- Script (recommended):
install.shpulls the latest GitHub release tarball for your arch into/usr/local/bin. - Manual: download
linux-ip_*_x86_64.tar.gzfrom Releases, extract, move toPATH. - From source:
go build -o linux-ip ./cmd/linux-ip(Go ≥ 1.23).
See docs/INSTALL.md and docs/TESTING.md. Man page: man/linux-ip.1.
No telemetry. LAN data never leaves the machine. The only network request
is the opt-in --public-ip lookup.
SemVer (v0.1.0, v0.2.0…). Tags + GitHub Releases + CHANGELOG.md.
Releases are published by CI — do NOT create them manually (GoReleaser
fails with already_exists if the release/assets exist):
# update CHANGELOG.md, then:
git tag -a v0.3.0 -m "v0.3.0 ..."
git push origin v0.3.0 # CI builds x86_64/arm64 + publishes the release