What are Self-Reports?
Printers have it figured out. Push a button or two → get a neat printed summary of ink, alignment, and IP address.
I wanted the same for my machines. Jumping between machines on SSH can get disorienting as you try to remember how each is configured and what is going on with it. I thought about how nice it would be to have printer test-page style reports for my servers.
So I wrote a small set of self-report scripts—Bash and Python tools I keep in /usr/local/bin
—that generate clean, colorful status reports. They don’t try to be full monitoring systems; they’re quick checkups I can run over SSH or right after login. It gives me a familiar, nice report from that machine’s point of view. Simple scripts—powerful concept.
Features
The family so far:
disk_report.sh
→ Disk usage & mount pointsmem_report.sh
→ Memory & swap snapshotlan_report.sh
→ Interfaces, routes, DNS, public IP, open portspi-health.sh
→ Hardware report specific to Raspberry Pi and PironMan5 hardwarepy_report.py
→ Python environment snapshot (sys.path
, pip packages,-m
modules, etc.)
The scripts are designed with consistency in mind. Some highlights:
- Consistent formatting across reports (emoji + color)
- Runs on Linux, macOS, and WSL
- Zero dependencies (optional: prettier output with
eza
) - Drop-in friendly → just copy into
/usr/local/bin
- Focused: each report covers one domain (disk, memory, LAN, etc.)
- Safe: read-only reports, no risk of changing config
QuickStart
You can grab a copy of my report scripts to use or modify from GitHub:
git clone https://github.com/forfaxx/self-reports.git
cd self-reports
sudo cp *.sh *.py /usr/local/bin/
sudo chmod +x /usr/local/bin/*
Optional: strip .sh
when installing if you prefer shorter command names:
sudo cp disk_report.sh /usr/local/bin/disk_report
sudo cp mem_report.sh /usr/local/bin/mem_report
sudo cp lan_report.sh /usr/local/bin/lan_report
sudo cp pi-health.sh /usr/local/bin/pi-health
sudo cp py_report.py /usr/local/bin/py_report
Tip: You should now be able to run any of the reports. The real power in my experience has been in having these on each of my machines with public key based ssh authentication to make it easy to run them from anywhere:
ssh user@host mem_report
🖥️ Sample Output
See the README.md on GitHub for detailed output examples for each script.
Basically what you get from each is a consistent, on-demand report from that machine’s perspective. Read-only and with minimal dependencies so you can run it anywhere, anytime you need to refresh your memory.
Here is a taste of the output for mem_report.sh (I remove the .sh extensions in my examples. it’s up to you).
🧠 Memory Report for: server.example.com
🕒 Date: Mon 18 Aug 20:44:57 CDT 2025
🧬 OS: Linux
----------------------------------------
📊 Memory Summary:
total used free shared buff/cache available
Mem: 7.9Gi 2.9Gi 425Mi 21Mi 5.1Gi 5.0Gi
Swap: 17Gi 1.4Gi 16Gi
📈 Load Averages:
20:44:57 up 32 days, 23:49, 2 users, load average: 1.30, 1.36, 1.51
🔁 Swap Usage:
NAME TYPE SIZE USED PRIO
/dev/zram0 partition 2G 1.4G 100
/swapfile file 16G 0B 10
SwapCached: 6656 kB
SwapTotal: 18874336 kB
SwapFree: 17425664 kB
Zswap: 0 kB
Zswapped: 0 kB
🌀 ZRAM Status:
zram0:
disksize : 2147483648
compr_data_size : (missing)
mem_used_total : (missing)
🐘 Top Memory Consumers:
PID PPID CMD %MEM %CPU
1001 999 /usr/bin/sync-daemon 4.0 64.8
2048 2000 /usr/local/bin/webapp 2.3 0.2
3001 2988 homebridge: bridge-addon 2.0 0.0
325 1 /lib/systemd/systemd-journa 2.0 0.0
1111 888 /usr/bin/db-service 1.7 0.3
4000 3990 node app/server.js 1.6 0.4
4020 4010 /usr/bin/dns-resolver 1.5 0.5
4500 4400 background-service 1.1 0.0
5000 1 /usr/bin/containerd-shim 0.7 0.2
Conclusion
That’s the whole idea: quick, colorful self-reports you can run on any machine.
Not a monitoring system, not a dashboard—just a friendly check-in, like a printer test page for your servers.
I’ve already found these scripts handy when I ssh into a box I haven’t touched in a while, or when I want to sanity-check a Pi on the shelf. They’re small, portable, and don’t step on anything else.
💡 Got an idea for another kind of report? Found a bug? Or maybe you’ve written your own flavor?
I’d love to see it: