Kenapa Command Linux Harus Dipahami Bertahap?
Linux server itu bukan cuma soal hafal command. Yang lebih penting adalah tahu kapan sebuah command dipakai, apa risikonya, dan bagaimana membaca hasilnya. Di server production, satu perintah kecil bisa membantu troubleshooting cepat, tapi bisa juga merusak data kalau dijalankan tanpa konteks.
Artikel ini dikembangkan dari catatan pustaka internal: linux-commands-guide.md. Isinya saya susun ulang menjadi tutorial operasional yang lebih enak diikuti: mulai dari dasar, naik ke monitoring, service, log, backup, security, sampai command advanced yang sering dipakai admin server.
Target akhirnya sederhana: setelah membaca ini, Anda bisa login ke Linux server, mencari file, membaca log, cek resource, mengelola service, cek jaringan, backup data penting, dan melakukan troubleshooting awal tanpa panik.
Prinsip Aman Sebelum Menjalankan Command
- Baca dulu output command sebelum mengambil tindakan.
- Hindari
rm -rf,chmod -R, danchown -Rkalau path belum benar-benar pasti. - Untuk file konfigurasi, backup dulu sebelum edit.
- Di production, gunakan
nginx -t,apachectl configtest, atau validasi serupa sebelum reload service. - Kalau command butuh sudo, pahami dulu efeknya. Jangan asal copy paste.
# Contoh pola aman sebelum edit config
sudo cp /etc/nginx/sites-available/app.conf /etc/nginx/sites-available/app.conf.bak.$(date +%Y%m%d-%H%M)
sudo nano /etc/nginx/sites-available/app.conf
sudo nginx -t
sudo systemctl reload nginx
1. Navigasi Dasar di Server
Command paling dasar dipakai untuk tahu sedang berada di mana, pindah folder, dan melihat isi direktori.
pwd # Melihat direktori saat ini
cd /var/log # Pindah ke direktori tertentu
cd .. # Naik satu level
cd ~ # Kembali ke home user
cd - # Kembali ke direktori sebelumnya
ls # List file sederhana
ls -la # Detail lengkap termasuk hidden file
ls -lh # Ukuran file human-readable
ls -lt # Urut berdasarkan waktu modifikasi
Contoh pemakaian nyata: saat login ke server dan ingin cek log Nginx, biasanya alurnya seperti ini:
cd /var/log/nginx
ls -lh
tail -n 80 error.log
2. Membaca Informasi Sistem
Bagian ini dipakai untuk mengenali server: kernel, hostname, user aktif, uptime, RAM, disk, dan block device.
uname -a # Detail kernel dan sistem
hostname # Nama hostname server
whoami # User saat ini
id # UID, GID, dan group user
date # Tanggal dan jam server
uptime # Lama server hidup dan load average
lscpu # Informasi CPU
free -h # Pemakaian memory
df -h # Pemakaian filesystem
lsblk # Daftar disk dan partisi
lspci # Perangkat PCI
lsusb # Perangkat USB
Kalau aplikasi terasa lambat, tiga command awal yang sering saya jalankan adalah:
uptime
free -h
df -h
Dari situ biasanya terlihat apakah masalahnya CPU load, RAM habis, atau disk penuh.
3. Membuat, Membaca, Copy, Move, dan Hapus File
File operation adalah pekerjaan harian admin server. Gunakan command ini dengan hati-hati, terutama saat menghapus file.
touch file.txt
echo "Hello World" > file.txt
cat file.txt
less file.txt
head -n 20 file.txt
tail -n 20 file.txt
tail -f /var/log/nginx/error.log
cp source.txt dest.txt
cp -r /src/dir /backup/dir
mv old.txt new.txt
rm file.txt
rm -rf directory
Untuk production, biasakan cek target sebelum hapus:
pwd
ls -lah directory
du -sh directory
Kalau masih ragu, rename dulu daripada langsung hapus:
mv cache cache.old.$(date +%Y%m%d-%H%M)
4. Search File dan Isi File
Saat troubleshooting, Anda sering mencari file konfigurasi, log error, atau string tertentu di dalam source code.
find /home -name "*.log"
find /var -type f -size +100M
find /etc -name "*.conf" -mtime -7
grep "error" /var/log/syslog
grep -i "failed" /var/log/auth.log
grep -n "listen" /etc/nginx/nginx.conf
grep -r "DB_HOST" /var/www/app
Untuk mencari error di semua log Nginx:
sudo find /var/log/nginx -name "*.log" -exec grep -i "error" {} \;
Kalau server punya rg atau ripgrep, pencarian di source code biasanya lebih cepat:
rg "APP_ENV|DB_HOST|REDIS_HOST" /var/www/app
5. Archive dan Kompresi
Command tar dan zip sering dipakai untuk backup, pindah folder aplikasi, atau mengirim log ke tim lain.
tar -czf backup.tar.gz /home/admin
tar -xzf backup.tar.gz
tar -tzf backup.tar.gz
zip -r archive.zip /path/to/directory
unzip archive.zip
gzip file.txt
gunzip file.txt.gz
Contoh backup folder aplikasi sebelum deploy manual:
sudo tar -czf /backup/app_$(date +%Y%m%d-%H%M).tar.gz /var/www/app


6. Melihat dan Mengontrol Proses
Kalau server lambat, cari proses yang memakan CPU/RAM. Kalau port dipakai service lama, cari PID-nya dulu sebelum kill.
ps aux
ps -ef
ps aux | grep nginx
top
htop
pstree -p
Urutkan proses berdasarkan CPU atau memory:
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
Menghentikan proses:
kill 1234
kill -9 1234
killall nginx
pkill -f "node app.js"
Gunakan kill -9 sebagai jalan terakhir. Coba kill PID dulu supaya proses punya kesempatan menutup file dan koneksi dengan rapi.
7. Background Job dan Session Panjang
Untuk command yang lama, jangan biarkan proses mati hanya karena koneksi SSH putus. Pakai nohup, tmux, atau screen.
command &
jobs
fg %1
bg %1
nohup long-command > output.log 2>&1 &
Untuk pekerjaan server yang serius, tmux lebih nyaman:
tmux new -s maintenance
# jalankan command panjang
# tekan Ctrl+B lalu D untuk detach
tmux attach -t maintenance
8. User, Group, dan Permission
Bagian ini penting untuk keamanan. Banyak masalah aplikasi muncul bukan karena source code rusak, tetapi karena owner file salah atau permission terlalu ketat/terlalu longgar.
sudo adduser username
sudo useradd -m -s /bin/bash username
sudo usermod -aG sudo username
sudo userdel username
sudo userdel -r username
passwd
sudo passwd username
sudo chage -l username
Group:
sudo groupadd developers
sudo usermod -aG developers username
groups username
getent group developers
Permission dan ownership:
ls -la file.txt
chmod 755 script.sh
chmod u+x script.sh
chmod g+w file.txt
chmod o-r file.txt
sudo chown user:group file.txt
sudo chown -R www-data:www-data /var/www/app/storage
sudo chgrp group file.txt
Contoh kasus Laravel:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R ug+rw storage bootstrap/cache
Hindari chmod -R 777. Itu memang terlihat cepat menyelesaikan error permission, tapi membuka risiko keamanan yang tidak perlu.
9. Networking Dasar Sampai Cek Port
Networking command dipakai untuk cek IP, route, DNS, koneksi keluar, port listening, dan proses yang memakai port.
ip addr show
ip a
ip route show
cat /etc/resolv.conf
nslookup google.com
dig google.com
host google.com
Test koneksi:
ping -c 4 8.8.8.8
ping -c 4 google.com
traceroute google.com
mtr google.com
Test port dan listening service:
nc -zv example.com 443
ss -tulpn
lsof -i :80
lsof -i :443
Contoh troubleshooting website tidak bisa dibuka:
dig example.com
curl -I https://example.com
nc -zv example.com 443
sudo ss -tulpn | grep ':443'
sudo journalctl -u nginx -n 80 --no-pager
10. Monitoring Resource dan Performance
Command monitoring membantu menjawab pertanyaan: server lambat karena apa?
top
htop
free -h
df -h
du -sh /path
vmstat 1
iostat 1
sar
Contoh mencari folder besar saat disk hampir penuh:
sudo du -xh / | sort -h | tail -n 30
Contoh cek proses paling boros RAM:
ps aux --sort=-%mem | head -n 15
Untuk disk test, hati-hati memakai dd. Jalankan di path yang aman dan hapus file test setelah selesai:
dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct
rm /tmp/testfile
11. Package Management: Ubuntu/Debian dan RHEL
Di Ubuntu/Debian gunakan APT:
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt install package
sudo apt remove package
sudo apt purge package
sudo apt autoremove
apt search package
apt show package
apt list --installed
apt-cache policy package
Di CentOS/RHEL/Rocky gunakan DNF/YUM:
sudo dnf update
sudo dnf install package
sudo dnf remove package
sudo dnf autoremove
dnf search package
dnf info package
dnf list installed
sudo dnf repolist
Catatan operasional: sebelum upgrade besar, baca changelog paket penting seperti Nginx, PostgreSQL, PHP, Docker, atau kernel. Untuk server production, upgrade sebaiknya punya jadwal maintenance dan rollback plan.
12. Systemd dan Service Management
Hampir semua service modern di Linux dikelola oleh systemd. Ini command yang paling sering dipakai:
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl status nginx
sudo systemctl enable nginx
sudo systemctl disable nginx
sudo systemctl is-enabled nginx
systemctl list-units --type=service
systemctl --failed
Bedakan restart dan reload. Restart mematikan lalu menyalakan ulang service. Reload biasanya hanya membaca ulang konfigurasi tanpa memutus proses utama. Untuk Nginx, reload lebih aman setelah nginx -t sukses.
13. Log Management dan Analisis Error
Log adalah tempat pertama saat aplikasi bermasalah. Gunakan journalctl untuk service systemd dan tail/grep untuk file log tradisional.
journalctl
journalctl -f
journalctl -p err
journalctl --since "1 hour ago"
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"
tail -f /var/log/syslog
tail -f /var/log/auth.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
Analisis cepat:
grep -i "failed" /var/log/auth.log
grep "404" /var/log/nginx/access.log
grep -c "error" /var/log/syslog
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
Untuk melihat log hari ini:
grep "$(date '+%b %e')" /var/log/syslog
journalctl --since today
14. Backup dan Recovery
Backup yang belum pernah dites restore belum bisa dianggap aman. Minimal pahami tiga pola: copy biasa, tar archive, dan rsync incremental.
cp -r /home/user /backup/user_backup_$(date +%Y%m%d)
tar -czf backup_$(date +%Y%m%d).tar.gz /important/files
rsync -av /source/ /destination/
rsync -av --delete /source/ /destination/
rsync -av -e ssh /source/ user@server:/destination/
Contoh backup aplikasi web:
sudo mkdir -p /backup/app
sudo tar -czf /backup/app/app_files_$(date +%Y%m%d-%H%M).tar.gz /var/www/app
sudo rsync -av /var/www/app/storage/ /backup/app/storage/
Restore:
tar -xzf backup_20260718.tar.gz -C /restore/location/
rsync -av /backup/storage/ /var/www/app/storage/
15. Security: Firewall, SSH, dan Hardening Dasar
Untuk Ubuntu, UFW cukup untuk banyak server kecil sampai menengah:
sudo ufw enable
sudo ufw status
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny 23
sudo ufw delete allow 80/tcp
Untuk firewalld:
sudo systemctl start firewalld
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
SSH hardening dasar:
ssh-keygen -t rsa -b 4096 -C "user@server"
ssh-copy-id user@server
sudo nano /etc/ssh/sshd_config
Setting yang umum dipakai:
PermitRootLogin no
PasswordAuthentication no
Setelah edit SSH, test konfigurasi dan jangan tutup sesi lama sebelum login baru berhasil:
sudo sshd -t
sudo systemctl reload sshd
Tambahkan tool keamanan dasar bila perlu:
sudo apt install fail2ban rkhunter chkrootkit
sudo systemctl enable --now fail2ban
16. Advanced: Sysctl, Limit, CPU Affinity, dan Network Namespace
Command advanced dipakai saat tuning performa atau isolasi network. Jalankan hanya kalau sudah tahu efeknya.
sysctl -a
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
ulimit -a
ulimit -n 65536
taskset -c 0,1 command
taskset -p 0,1 PID
Network namespace dan bridge:
sudo ip netns add test_ns
sudo ip netns exec test_ns ip addr show
sudo ip link add br0 type bridge
sudo ip link set eth0 master br0
Traffic control contoh:
sudo tc qdisc add dev eth0 root handle 1: htb default 30
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
17. Docker dan Container Command
Banyak server modern menjalankan aplikasi lewat Docker. Command dasar yang wajib dikuasai:
docker ps
docker ps -a
docker images
docker run -d nginx
docker exec -it container_id bash
docker logs container_id
docker logs -f container_id
docker inspect container_id
Contoh mencari container yang restart terus:
docker ps -a
docker logs --tail 100 container_id
docker inspect container_id | grep -i restart
18. One-Liner yang Berguna di Server
One-liner mempercepat pekerjaan, tapi tetap baca dulu sebelum menjalankan.
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
ss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
watch -d 'ls -la /path/to/directory'
openssl rand -base64 32
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done
19. Skenario Troubleshooting Praktis
Website 502 Bad Gateway
curl -I https://example.com
sudo systemctl status nginx
sudo nginx -t
sudo journalctl -u nginx -n 100 --no-pager
sudo ss -tulpn | grep -E ':80|:443|:9000|:8000'
Kalau backend memakai PHP-FPM, cek juga:
sudo systemctl status php8.3-fpm
sudo journalctl -u php8.3-fpm -n 100 --no-pager
Disk Penuh
df -h
sudo du -xh / | sort -h | tail -n 30
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d
Jangan langsung hapus folder besar tanpa tahu fungsinya. Untuk log, lebih aman gunakan logrotate atau vacuum journalctl.
SSH Ditolak
ping -c 4 server_ip
nc -zv server_ip 22
ssh -vvv user@server_ip
sudo tail -n 80 /var/log/auth.log
Kalau baru mengubah port SSH, pastikan firewall sudah mengizinkan port baru sebelum sesi lama ditutup.
Aplikasi Lambat
uptime
top
free -h
df -h
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
sudo iostat 1 5
Load tinggi tidak selalu berarti CPU habis. Bisa juga karena disk I/O lambat, swap aktif, query database berat, atau proses backup berjalan di jam sibuk.
20. Quick Reference Cheat Sheet
# File
ls -la
cd /path
cp src dest
mv old new
rm file
mkdir dir
# System
uname -a
uptime
df -h
free -h
lsblk
# Process
ps aux
top
kill PID
systemctl status service
# Network
ip addr show
ip route show
ping -c 4 host
ss -tulpn
curl -I https://domain.com
# Logs
journalctl -u service -f
tail -f /var/log/nginx/error.log
grep -i error /var/log/syslog
# Backup
tar -czf backup.tar.gz /path
rsync -av /source/ /dest/
Checklist Belajar dan Operasional
- Bisa navigasi folder dan baca file log.
- Bisa mencari file besar dan string error.
- Bisa membaca penggunaan CPU, RAM, disk, dan proses.
- Bisa cek port listening dan DNS.
- Bisa start, stop, reload, dan cek status service systemd.
- Bisa backup folder penting dan test restore sederhana.
- Bisa mengelola user, group, permission, dan ownership tanpa memakai
777. - Bisa membaca log SSH, Nginx, dan aplikasi saat troubleshooting.
- Bisa menjalankan command advanced hanya saat memang dibutuhkan.
Kalau command dasar sudah lancar, kemampuan berikutnya bukan menghafal lebih banyak perintah, tetapi membangun kebiasaan observasi: cek status, baca log, pahami konteks, backup dulu, lalu baru ubah sistem. Itu yang membedakan operator server yang rapi dengan sekadar pengguna command line.