DEV Community

Cover image for I Aliased 'syscheck' to 7 Lines of Bash and Now I Run It on Every Server I SSH Into
Anguishe
Anguishe

Posted on • Originally published at bashsnippets.xyz

I Aliased 'syscheck' to 7 Lines of Bash and Now I Run It on Every Server I SSH Into

Every time I SSH into a server, the first thing I want to know is: how's it doing?

Not a deep dive. Not a monitoring dashboard. Just the basics: how long has it been running, how much RAM is left, is the disk getting full, what's the IP. Five things that take five separate commands to check — hostname, uptime, free, df, hostname -I — and I'm tired of typing all five every single time.

So I put them in one script and aliased it to syscheck. Now I SSH in, type one word, and know the state of the machine in 2 seconds.


The Script

#!/bin/bash
# Quick System Info Report
# Prints key stats at a glance.
# Alias to 'syscheck' in your .bashrc for fast access.

echo "=== Quick System Check ==="
echo "Host    : $(hostname)"
echo "Uptime  : $(uptime -p)"
echo "RAM     : $(free -h | awk '/Mem/{print $3"/"$2}')"
echo "Disk /  : $(df -h / | awk 'NR==2{print $3"/"$2}')"
echo "IP      : $(hostname -I | awk '{print $1}')"
echo "========================="
Enter fullscreen mode Exit fullscreen mode

Output looks like:

=== Quick System Check ===
Host    : my-server
Uptime  : up 3 days, 4 hours
RAM     : 1.2G/2.0G
Disk /  : 8.3G/25G
IP      : 192.168.1.42
=========================
Enter fullscreen mode Exit fullscreen mode

Seven lines. No dependencies. Every command used here ships pre-installed on every Linux distribution I've ever touched.


What Each Line Actually Does

hostname — prints the machine name. Obvious, but when you're managing 4 servers with different roles, seeing "staging-web" vs "prod-db" at the top saves you from running the wrong command on the wrong box.

uptime -p — the -p flag gives you human-readable output like "up 3 days, 4 hours" instead of the default uptime output which includes load averages and the current time and is harder to parse at a glance.

free -h | awk '/Mem/{print $3"/"$2}'free -h shows memory in human-readable format (GB instead of bytes). The awk part grabs the "used" and "total" columns from the "Mem:" line and formats them as 1.2G/2.0G. You see at a glance whether you're at 60% RAM or 95%.

df -h / | awk 'NR==2{print $3"/"$2}' — same idea but for disk. df -h / checks the root partition, and awk pulls used and total. If this says 23G/25G you know you need to clean up soon.

hostname -I | awk '{print $1}' — prints the machine's IP address. The awk grabs just the first one in case there are multiple network interfaces.


The Alias Setup (The Part That Makes It Worth It)

The script is useful. The alias is what makes you actually use it.

nano ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Add at the bottom:

alias syscheck='/home/user/syscheck.sh'
Enter fullscreen mode Exit fullscreen mode

Or if you want the whole thing inline without a separate file:

alias syscheck='echo "=== Quick System Check ===" && echo "Host    : $(hostname)" && echo "Uptime  : $(uptime -p)" && echo "RAM     : $(free -h | awk '"'"'/Mem/{print $3"/"$2}'"'"')" && echo "Disk /  : $(df -h / | awk '"'"'NR==2{print $3"/"$2}'"'"')" && echo "IP      : $(hostname -I | awk '"'"'{print $1}'"'"')" && echo "========================="'
Enter fullscreen mode Exit fullscreen mode

Then reload:

source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Now type syscheck on any terminal session on that machine and you get the full report instantly. I put this in .bashrc on every server I set up. It's the first thing I configure after SSH key access.


Extending It

Add CPU load:

echo "CPU     : $(top -bn1 | grep 'Cpu(s)' | awk '{print $2}')% used"
Enter fullscreen mode Exit fullscreen mode

Add the top 3 processes by memory:

echo "Top RAM : $(ps aux --sort=-%mem | awk 'NR<=4{print $11}' | tail -3 | tr '\n' ' ')"
Enter fullscreen mode Exit fullscreen mode

Add the OS version:

echo "OS      : $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
Enter fullscreen mode Exit fullscreen mode

I keep the base version minimal on purpose. When I need deeper visibility, I have separate scripts for CPU and RAM monitoring and disk space warnings. syscheck is the quick glance. Those are the deep dive.


Where This Fits in the Workflow

I SSH into a server. I type syscheck. If everything looks normal, I do whatever I came to do. If RAM is at 95% or disk is nearly full, I investigate before touching anything else.

It's the 2-second sanity check that prevents the "oh no, why is everything slow" surprise 20 minutes into a debugging session when you finally think to check resources and realize the disk filled up an hour ago.


Full script, alias setup, and more extension ideas:

bashsnippets.xyz/snippets/quick-system-info-report.html

Top comments (0)