You do not need to know Linux to run a website. You need about twenty commands and the habit of reading what they print. These are the ones we type most on a normal day, grouped by what you are trying to do.
Finding your way around
pwd, ls, cd — where am I, what is here, go there.
ls -lah # long format, hidden files, human sizes
cd - # back to the previous directoryfind — locate files by name, size, age or owner.
find /var/www -name "*.log" -size +100M
find . -mtime -1 # changed in the last 24 hours
find . -user root -type f # files root created in the web treeReading files and logs
cat, less, tail, head — show a file, page through it, show the end or the start.
tail -f /var/log/nginx/error.log # follow live
tail -n 200 /var/log/syslog | less # last 200 lines, pagedgrep — search text. The single most useful command on the list.
grep -i "error" /var/log/php-fpm.log
grep -rn "DB_PASSWORD" /var/www/ # recursive, with line numbers
grep -v "200 " access.log | tail # everything that is not a 200Resources and what is running
top / htop — live view of CPU, memory and processes. Press M to sort by memory, P by CPU, q to quit.
free -m — memory in megabytes. Look at available, not free; Linux uses spare RAM as cache and gives it back.
df -h and du -sh — disk usage per filesystem, and size of a directory.
df -h
du -sh /var/www/* | sort -h | tail # biggest sites lastps — list processes.
ps aux --sort=-%mem | head # hungriest by memory
ps aux | grep php-fpm | wc -l # how many PHP workersss — what is listening on which port (replaces netstat).
sudo ss -tulpnServices
systemctl — start, stop, restart, enable, and see status.
sudo systemctl restart nginx
sudo systemctl status mariadb
sudo systemctl enable --now redisjournalctl — logs for anything systemd runs.
sudo journalctl -u nginx -n 100 --no-pager
sudo journalctl -p err -b # all errors since bootMoving things
cp, mv, rm, mkdir — copy, move/rename, delete, create directory.
cp -a site/ site-backup-$(date +%F)/ # -a keeps permissions and timestamps
rm -rf cache/* # careful: no undo
mkdir -p a/b/c # create the whole pathrsync — copy that only transfers changes, local or over SSH.
rsync -avz --delete /var/www/ user@backup:/srv/www/scp — copy a single file over SSH.
scp backup.sql.gz user@203.0.113.10:/tmp/tar — archive and compress.
tar -czf site-$(date +%F).tar.gz /var/www/example.com
tar -xzf site-2026-09-15.tar.gzPermissions and users
chmod, chown — mode and owner. Full guide: Linux file permissions explained.
sudo — run one command as root. sudo -i opens a root shell; sudo -u www-data php artisan … runs as another user.
Network
curl — fetch a URL, see headers, test an API.
curl -I https://example.com # headers only
curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://example.comdig — DNS lookups. dig example.com A +short, dig example.com MX.
ping and traceroute / mtr — is it reachable, and where does the path slow down.
Text editing
nano — the editor that does what you expect. Ctrl+O save, Ctrl+X exit. Use vim if you already know it; do not learn it on a production server at 2 a.m.
The habits that matter more than the commands
- Press Tab to complete file names; you will make fewer typos.
history | grepfinds the command you ran last month.- Before
rm -rf, runlson the same path first. - Read the whole error message. The answer is almost always in it.
Every one of these works on any VPSPioneer managed VPS and on shared plans with SSH enabled. If a command's output does not make sense, paste it into a ticket — that is the fastest way we can help.