In today’s landscape of bloated software stacks, automated dependency chains, and background services that consume memory and CPU without notice, Linux system administrators and enthusiasts alike benefit greatly from embracing digital minimalism of what is setup on the server and to reduce it to the absolute minimum.
Digital minimalism in the context of Linux servers means removing what you don't need, disabling what you don't use, and optimizing what remains — all with the goal of increasing performance, improving security, and simplifying further maintenance.
In this article, we’ll walk through practical steps to declutter your Linux server, optimize resources, and regain control over what’s running and why.
1. Identify and Remove Unnecessary Packages
Over time, many systems accumulate unused packages — either from experiments, dependency installations, or unnecessary defaults.
On Debian/Ubuntu
Find orphaned packages:
# apt autoremove --dry-run
Remove unnecessary packages:
# apt autoremove # apt purge <package-name>
List large installed packages:
# dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 20
On RHEL/CentOS/AlmaLinux:
Find orphaned packages:
# dnf autoremove
List packages sorted by size:
# rpm -qia --qf '%{SIZE}\t%{NAME}\n' | sort -n | tail -n 20
2. Audit and Disable Unused Services
Every running service consumes memory, CPU cycles, and opens potential attack surfaces.
List enabled services:
# systemctl list-unit-files --type=service --state=enabled
See currently running services:
# systemctl --type=service –state=running
Put some good effort to review and disable all unnecesssery
Disable unneeded services :
# systemctl disable --now bluetooth.service # systemctl disable --now cups.service # systemctl disable --now ModemManager.service
And so on
Useful services to disable (if unused):
| Service | Purpose | When to Disable |
|---|---|---|
| cups.service | Printer daemon | On headless servers |
| bluetooth.service | Bluetooth stack | On servers without Bluetooth |
| avahi-daemon | mDNS/Zeroconf | Not needed on most servers |
| ModemManager | Modem management | If not using 3G/4G cards |
| NetworkManager | Dynamic net config | Prefer systemd-networkd for static setups |
Simple Shell Script to List & Review Services
#!/bin/bash echo "Enabled services:" systemctl list-unit-files --state=enabled | grep service echo "" echo "Running services:" systemctl --type=service --state=running
3. Optimize Startup and Boot Time
Analyze system boot performance:
# systemd-analyze
View which services take the longest:
# systemd-analyze blame min 25.852s certbot.service 5min 20.466s logrotate.service 1min 29.748s plocate-updatedb.service 54.595s php5.6-fpm.service 43.445s systemd-logind.service 42.837s e2scrub_reap.service 37.915s apt-daily.service 35.604s mariadb.service 31.509s man-db.service 27.405s systemd-journal-flush.service 18.357s ifupdown-pre.service 14.672s dev-xvda2.device 13.523s rc-local.service 11.024s dpkg-db-backup.service 9.871s systemd-sysusers.service ...
Disable or mask long-running services that are not essential.
Why services masking is important?
Simply because after some of consequential updates, some unwanted service daemon might start up with the system boot.
Example:
# systemctl mask lvm2-monitor.service
4. Reduce Memory Usage (Especially on Low-RAM VPS)
Monitor memory usage:
# free -h # top # htop
Use lightweight alternatives:
| Service | Heavy | Lightweight Alternative |
|---|---|---|
| Web server | Apache | Nginx / Caddy / Lighttpd |
| Database | MySQL | MariaDB / SQLite (if local) |
| Syslog | rsyslog | busybox syslog / systemd journal |
| Shell | bash | dash / ash |
| File manager | GNOME Files | mc / ranger (CLI) |
5. Configure Swap (Only If Needed)
Having too much or too little swap can affect performance.
Check if swap is active:
# swapon --show
Create swap file (if needed):
# fallocate -l 1G /swapfile # chmod 600 /swapfile # mkswap /swapfile # swapon /swapfile
Add to /etc/fstab for persistence:
/swapfile none swap sw 0 0
6. Clean Up Cron Jobs and Timers
Old scheduled tasks can silently run in the background and consume resources.
List user cron jobs:
crontab -l
Check system-wide cron jobs:
# ls /etc/cron.* # ls -al /var/spool/cron/*
List systemd timers:
# systemctl list-timers
Disable any unneeded timers or outdated cron entries.
7. Optimize Logging and Log Rotation
Logs are essential but can grow large and fill up disk space quickly.
Check log size:
# du -sh /var/log/*
Force logrotate:
# logrotate -f /etc/logrotate.conf
Edit /etc/logrotate.conf or specific files in /etc/logrotate.d/* to reduce retention if needed.
8. Check for Zombie Processes and Old Users
Old users and zombie processes can indicate neglected cleanup or the server is (cracked) hacked.
List users:
cat /etc/passwd | cut -d: -f1
Remove unused accounts:
# userdel -r username
Check for zombie processes:
# ps aux | awk '{ if ($8 == "Z") print $0; }'
9. Disable IPv6 (if not used)
IPv6 can add unnecessary complexity and attack surface if you’re not using it.
To disable IPv6 temporarily:
# sysctl -w net.ipv6.conf.all.disable_ipv6=1 # sysctl -w net.ipv6.conf.default.disable_ipv6=1
To disable permanently, add to /etc/sysctl.conf:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
10. Final Thoughts: Less Is More
Digital minimalism is not just a personal tech trend — it's a philosophy of clarity, performance, and security. Every running process is a potential vulnerability. Every megabyte of RAM consumed by a useless service is wasted capacity. Every package installed increases the system’s complexity.
By regularly auditing, pruning, and simplifying your Linux server, you not only improve its performance and reliability, but you also reduce future maintenance headaches.
As a sysadmin that have my own Open Xen Debian Hypervisor running on a Lenovo ThinkServer few months ago due to a human error I managed to mess up one of my virtual machines and rebuild the Operating System from scratch and restore files service and MySQl data from backup that really pissed me of and this brought the need for having a decent Virtual Machine OpenXen backup solution I can implement on the Debian ( Buster) 10.10 running the free community Open Xen version 4.11.4+107-gef32c7afa2-1. The Hypervisor is a relative small one holding just 7 VM s:














