
Linux SSH Terminal Komutları: VDS Sysadmin Rehberi
VDS aldınız, ssh ile bağlandınız, terminal açıldı — sonra ne? ls/cd/grep/find/sed/awk/tar/curl/systemctl/journalctl/df/ss/ufw/cron/screen/tmux/chmod/sudo: bağlandıktan sonra her gün kullanacağınız komutların pratik rehberi.
Linux SSH Terminal Komutları: VDS Sysadmin Pratik Rehberi (2026)
VDS aldınız, ssh [email protected] yazdınız, parolayı girdiniz — # prompt'u sizi bekliyor. Şimdi ne yapacaksınız? cPanel paylaşımlı hosting'den geçenler ilk kez "boş bir kara ekran"la karşılaşınca elleri klavye üzerinde donup kalır. Bu rehber tam o anı çözmek için yazıldı: SSH ile bağlandıktan sonra her gün kullanacağınız komutları kategorilere ayırıp pratik senaryolarla anlatıyoruz.
Not: Bu rehber bağlandıktan sonraki komutlara odaklanır. SSH bağlantısı kurma, anahtar tabanlı kimlik doğrulama ve PuTTY/OpenSSH kurulumu için ayrı rehberimiz: Linux Sunucuya SSH Bağlantısı Nasıl Yapılır.
Buyukweb perspektifi: VDS paketlerimiz (E5-V4 başlangıç ₺250/ay) tam root SSH erişimiyle gelir. AlmaLinux 9, Ubuntu 22.04, Debian 12 ve RHEL 9'da
coreutils,util-linux,procps,iproute2,systemdpaketleri default geldiğinden aşağıdaki komutların büyük çoğunluğu için kurulum gerekmez. cPanel paylaşımlı hosting'de cPanel UI'dan "Terminal" uygulaması açılır ama jailed shell olduğu içinsystemctl,iptables,useraddgibi sistem komutları çalışmaz. Unmanaged not: VDS'lerimiz unmanaged'dır; bu rehber tam da o sorumluluğu hafifletmek için var.
Komut Kategorileri — Yol Haritası
| Kategori | Komutlar | Ne için |
|---|---|---|
| Dosya/dizin | ls, cd, pwd, mkdir, cp, mv, rm, ln |
Disk üzerinde gezinme |
| İçerik | cat, less, head, tail, wc, cut, sort, uniq |
Dosya okuma, pipe |
| Arama | grep, find, locate, which |
Dosya/içerik bulma |
| Metin | sed, awk |
Toplu değiştirme, alan çıkarma |
| Sıkıştırma | tar, gzip, rsync |
Yedek, transfer |
| HTTP | wget, curl |
İndirme, API testi |
| Süreç | ps, top, htop, kill, nohup |
Süreç kontrolü |
| Servis | systemctl, journalctl |
Servis & log |
| Sistem | df, du, free, uname, uptime |
Kaynak izleme |
| Ağ | ss, ping, mtr, dig |
Bağlantı testi |
| Güvenlik | ufw, iptables, fail2ban-client |
Firewall |
| Kullanıcı | id, useradd, sudo, chmod, chown |
Kimlik & yetki |
| Zamanlama | crontab, systemd timer |
Periyodik görev |
| Verimlilik | screen, tmux |
Kalıcı oturum |
Dosya ve Dizin Yönetimi
ls -la /etc/nginx/ # Detaylı liste: izin, sahip, boyut
ls -lhS /var/log/ # En büyükten küçüğe (insan-okur)
ls -lt /var/log/nginx/ # En yeni en üstte
pwd # Mevcut dizini öğren
cd /var/www/html # Mutlak yol
cd .. # Bir üst / cd - önceki dizin
mkdir -p /opt/yedek/2026/05 # Alt dizinleri de oluştur
touch /tmp/test.txt # Yeni dosya / zaman damgası
cp -av nginx.conf nginx.conf.bak # Tüm metadata + verbose
cp -r /opt/site/ /opt/site-yedek/
mv eski.conf yeni.conf # Taşı / yeniden adlandır
rm -rf /tmp/eski-yedek/ # Recursive + force — DİKKAT
ln -s /opt/uygulama/v2 /opt/uygulama/current # Sembolik link
rm -rf /uyarısı: Modernrm(GNU coreutils 8.x+)/dizinini silmeyi reddeder, amarm -rf $YOL/*yazıp$YOLboş kalmışsa kök dizin silinmeye başlar. Silme öncesilsile yolu doğrulayın.
Dosya İçeriği ve Pipe (Kanal)
Linux'un gerçek gücü, küçük komutları | ile zincirlemekte saklıdır.
cat /etc/os-release # Toplu yazdır
less /var/log/nginx/access.log # Sayfalanmış (q=çık, /=ara)
head -n 20 /var/log/syslog # İlk 20 satır
tail -n 50 /var/log/nginx/error.log # Son 50 satır
tail -f access.log error.log # Canlı, çoklu dosya
# Pipe ile zincir — en çok 502 üreten 10 IP
grep " 502 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
du -sh /var/log/* | sort -h # Boyuta göre sırala
wc -l /var/log/syslog # Satır sayısı
cut -d: -f1 /etc/passwd # 1. alan (kullanıcı adı)
Arama: grep, find, locate
grep -i "error" /var/log/syslog # -i: büyük/küçük harfsiz
grep -n "Fatal" /var/log/php-fpm/error.log # -n: satır numarası
grep -v "200" /var/log/nginx/access.log # -v: eşleşmeyenler
grep -E "502|503|504" /var/log/nginx/access.log # -E: extended regex
grep -r "DB_PASSWORD" /var/www/html/ # -r: recursive
grep -A 3 -B 1 "Segfault" /var/log/messages # 1 önce + 3 sonraki satır
find /var/log -name "*.log" -mtime -7 # Son 7 günde değişen .log
find /tmp -type f -mtime +30 -delete # 30 günden eski sil
find /var/log -size +100M # 100 MB üstü
find /var/www -name "*.php" -exec grep -l "eval(" {} \;
find -execvsxargs:-exec cmd {} \;her dosya için ayrı süreç başlatır (yavaş).-print0 | xargs -0 cmdtoplu çalışır (hızlı). Boşluklu dosya adları için-print0+-0şart. Modernfindile-exec cmd {} +da xargs gibi toplu çalışır.
Metin İşleme: sed ve awk
sed -i 's/eski.com/yeni.com/g' site.conf # Yerinde değiştir
sed -i.bak 's/Port 22/Port 2222/' /etc/ssh/sshd_config # .bak yedek
sed -i '/^#/d' /etc/nginx/nginx.conf # Yorum satırlarını sil
awk '{print $1}' /var/log/nginx/access.log # 1. alan (IP)
awk -F, '{print $2}' urunler.csv # CSV: virgül ayraç
awk '$9 == 502 {count++} END {print count}' /var/log/nginx/access.log
Daha derin sed/awk: Detaylı bayrak ve regex senaryoları için ayrı grep, sed, awk ve cut rehberimiz bulunuyor.
Sıkıştırma ve Transfer: tar, gzip, rsync
tar czvf yedek.tar.gz /var/www/html/ # c=create, z=gzip, v=verbose, f=file
tar xzvf yedek.tar.gz # x=extract
tar tzvf yedek.tar.gz | head # t=list (içeriği göster)
tar czvf full.tar.gz --exclude='*.log' /var/www/
gzip buyuk.sql # buyuk.sql.gz / gunzip ters yönü
rsync -avz /var/www/html/ /opt/yedek/ # Incremental: sadece değişenler
rsync -avz --delete html/ uzak:/yedek/ # --delete: hedeften silinmişleri kaldır
rsync -avz -e "ssh -p 2222" html/ kullanici@uzak:/yedek/ # SSH üstünden
rsync flagleri:
-aarchive (metadata),-vverbose,-zsıkıştırma,--deletekaynaktan silinenleri hedeften de siler (dikkatli).
HTTP: wget, curl
wget https://nginx.org/download/nginx-1.27.0.tar.gz
wget -O nginx.tar.gz https://.../nginx-1.27.0.tar.gz # Belirli isimle kaydet
curl -I https://www.buyukweb.com # Sadece header
curl -X POST https://api.ornekdomain.com/v1/login \
-H "Content-Type: application/json" -d '{"user":"admin"}'
curl -H "Authorization: Bearer eyJ..." https://api.ornekdomain.com/v1/profil
curl -o /dev/null -s -w "HTTP %{http_code} %{time_total}s\n" https://www.buyukweb.com
Süreç Yönetimi: ps, top, htop, kill
ps aux # Tüm süreçler (BSD stili)
ps fauxx # Ağaç yapısı
ps aux --sort=-%cpu | head # CPU'ya göre sırala (-%mem RAM)
top -c # Canlı + tam komut satırı
htop # Renkli alternatif (paket gerekir)
kill 12345 # SIGTERM (nazik)
kill -HUP 12345 # SIGHUP — config reload
kill -9 12345 # SIGKILL — son çare
pkill -f "python3 server.py" # İsme göre öldür
nohup ./uzun-betik.sh > cikti.log 2>&1 & # SSH koparsa da yaşar
jobs / fg %1 / bg %1 # Arka plan iş kontrolü
Sinyal seçimi: Önce
SIGTERM(kill PID) — süreç düzgün kapanma şansı bulur. 5-10 sn sonra hâlâ duruyorsaSIGKILL(kill -9).SIGHUP(kill -HUP) bazı servislerde (nginx, sshd) konfig yeniden yükleme tetikler.
Servis Yönetimi: systemctl, journalctl
Modern Linux dağıtımlarında (Ubuntu 22.04, AlmaLinux 9, Debian 12, RHEL 9) servisler systemd ile yönetilir.
systemctl status nginx
systemctl start|stop|restart nginx
systemctl reload nginx # Servis durmadan config tazele
systemctl enable|disable nginx # Boot'ta otomatik
systemctl list-units --type=service --state=running
systemctl --failed # Başarısız üniteler
systemctl daemon-reload # Yeni unit dosyası eklendiyse
journalctl -u nginx -f # Belirli servis, canlı
journalctl --since "1 hour ago"
journalctl --since "2026-05-08 09:00" --until "11:00"
journalctl -p err -u nginx # Sadece hata seviyesi
journalctl -b # Şu anki boot / -b -1 önceki
journalctl --vacuum-time=7d # 7 günden eski log'u sil
tail -fvsjournalctl -f: Klasik metin logu (rsyslog) okumakla yapılandırılmış journal okumak farklıdır. journal'da metadata (servis adı, PID, priority) yapısaldır;-p errgibi filtrelerle sadece error mesajları canlı görebilirsiniz.
Disk, Bellek ve Sistem Bilgisi
df -h # Disk (insan-okur) / -hT FS türü
du -sh /var/log/ # Dizin boyutu / -d 1 -h derinlik 1
du -sh /var/log/* | sort -h # En şişen dizinleri bul
free -h # RAM + swap / -hs 2 her 2 sn
uname -a # Çekirdek + dağıtım
cat /etc/os-release # Dağıtım detayı
hostnamectl # systemd özet
uptime # Çalışma süresi + load average
lsblk # Disk cihazları
lscpu / nproc # CPU bilgisi / çekirdek sayısı
Ağ Komutları: ss, ping, dig, mtr
netstat artık deprecated; iproute2'den ss daha hızlı. ip komutu ifconfig ve route'un yerini almıştır.
ss -tulpn # TCP+UDP dinleyen, PID + program
ss -tnp | grep :443 # 443'e bağlı istemciler
ip -4 addr show # IPv4 adresleri / ip route
hostname -I # IP'ler
ping -c 4 buyukweb.com
mtr buyukweb.com # Traceroute + kayıp oranı
dig +short buyukweb.com A
dig MX buyukweb.com
dig @1.1.1.1 buyukweb.com # Belirli DNS sunucusunu sorgula
Firewall: ufw, iptables, fail2ban
Ubuntu/Debian'da ufw öne çıkar; AlmaLinux/RHEL'de firewalld standarttır. Alttaki katman iptables ya da nftables.
ufw status
ufw allow 22/tcp # SSH'a izin
ufw allow from 1.2.3.4 to any port 22 # Belirli IP'den SSH
ufw deny from 5.6.7.8 # IP'yi blokla
ufw enable
iptables -L -n -v --line-numbers # Tüm kuralları göster
iptables-save > /etc/iptables/rules.v4 # Kalıcı yap
fail2ban-client status sshd
fail2ban-client set sshd unbanip 1.2.3.4
Buyukweb VDS notu: Tüm VDS paketlerimizde L3 + L4 + L7 DDoS koruması altyapı seviyesindedir.
ufw/fail2banek savunmadır. Detay: Linux firewalld yapılandırma.
Kullanıcı, Yetki ve İzin: id, sudo, chmod, chown
whoami / id # Mevcut kullanıcı / uid+gid+gruplar
useradd -m -s /bin/bash deniz # home dizini ile, bash shell
passwd deniz
usermod -aG sudo deniz # Ubuntu/Debian (wheel: AlmaLinux/RHEL)
userdel -r deniz # -r: home'u da sil
sudo komut # Tek seferlik root
sudo -u www-data komut # Belirli kullanıcı olarak
sudo -i # Root shell'e geç
# Sayısal izin: r=4, w=2, x=1; sahip/grup/diğer
chmod 755 betik.sh # rwxr-xr-x — script
chmod 644 .env # rw-r--r-- — config
chmod 600 ~/.ssh/id_rsa # rw------- — özel anahtar (şart)
chown -R www-data:www-data /var/www/html/
NOPASSWD sudo: Otomasyon (CI/CD, deploy script) için ayrı hizmet kullanıcısı oluşturup sadece gerekli komutlara NOPASSWD verin (örn.
deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx). Production kişisel hesaplarında parolasız sudo kullanmayın — parola ele geçirilirse saldırgana doğrudan root verilmiş olur. Düzenleme her zamanvisudo -f /etc/sudoers.d/deployile.
Görev Zamanlama: cron ve systemd Timer
crontab -l # Mevcut tabloyu görüntüle
crontab -e # Düzenle
# Alanlar: dakika saat ay-günü ay haftanın-günü komut
30 3 * * * /usr/local/bin/yedek.sh >> /var/log/yedek.log 2>&1 # Her gece 03:30
*/15 * * * * /usr/local/bin/sentinel.sh # Her 15 dk
0 9 * * 1-5 /usr/local/bin/rapor.sh # Pzt-Cuma 09:00
ls /etc/cron.{hourly,daily,weekly,monthly} # Sistem cron dizinleri
echo "/restart.sh" | at 22:00 # Tek seferlik gelecek görev
systemctl list-timers --all # Modern alternatif
systemctl enable --now yedek.timer
cron vs systemd timer: cron basit ve evrensel; systemd timer logu journalctl'e gider, retry/randomized delay/dependency desteği vardır. Yeni kuracağınız periyodik servisler için systemd timer tercih edin.
Verimlilik: screen ve tmux
SSH oturumu kopunca uzun komutunuz da yarıda kalır mı? Hayır — screen ya da tmux kullanırsanız.
# screen
screen -S yedek # Yeni oturum
# Ctrl+A, D ile detach
screen -ls # Oturumları listele
screen -r yedek # Geri dön
# tmux (daha modern, daha popüler)
tmux new -s deploy
# Ctrl+B, D ile detach
tmux ls
tmux attach -t deploy
# Pencere: Ctrl+B, C — bölme: Ctrl+B, % (dikey) / Ctrl+B, " (yatay)
Vim Mini Girizgah — Sadece Çıkmayı Öğrenin
vim ile karşılaşmadan VDS yönetimi yapamazsınız (en azından /etc/ssh/sshd_config düzenlemek için). Hayat kurtaran komutlar:
i -> insert moduna gir (yazmaya başla)
Esc -> normal moda dön
:w -> kaydet
:q -> çık
:wq -> kaydet ve çık
:q! -> kaydetmeden zorla çık
/aranan -> arama (n sonraki, N önceki)
Daha fazlası için: Linux vim Metin Editörü Hızlı Başlangıç Rehberi. İlk başta nano da çalışır — Ctrl+O kaydet, Ctrl+X çık.
Pratik Senaryolar
Senaryo 1: "Disk doldu"
df -h # Hangi filesystem doldu?
du -sh /* 2>/dev/null | sort -h # Kim yer kaplıyor?
du -sh /var/log/* | sort -h # Genelde /var/log şişer
journalctl --vacuum-time=7d # 7 günden eski journal'ı sil
find /var/log -name "*.gz" -mtime +30 -delete # Eski sıkıştırılmış log
Senaryo 2: "Hangi süreç CPU yiyor?"
top -c # Canlı (P=CPU, M=RAM sıralama)
ps aux --sort=-%cpu | head # Tek komutla
ps aux --sort=-%mem | head # Bellek için
top -H -p 12345 # Sürecin tüm thread'leri
Senaryo 3: "Web server 502 veriyor"
tail -f /var/log/nginx/error.log # Nginx error canlı
systemctl status nginx php-fpm # Servisler ayakta mı?
curl -I http://localhost # Network mi backend mi?
grep " 502 " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Senaryo 4: "Düzenli yedek"
# Incremental rsync (uzak sunucuya)
rsync -avz --delete -e "ssh -p 2222" \
/var/www/html/ \
[email protected]:/yedek/site/
# MySQL/MariaDB dump
mysqldump -u root -p --all-databases | gzip > /opt/yedek/db-$(date +%F).sql.gz
# Cron'a günlük çalıştır (her gece 03:30)
30 3 * * * /usr/local/bin/yedek.sh >> /var/log/yedek.log 2>&1
Buyukweb yedek altyapısı: VDS paketlerimizde Veeam tabanlı günlük otomatik yedekleme standart olarak gelir. Yine de uygulama-seviyesinde rsync/mysqldump yedeği almak hızlı geri-dönüş senaryolarında size avantaj sağlar.
Sık Sorulan Sorular
rm -rf / ne yapar?
Modern rm (GNU coreutils 8.x+) varsayılan olarak / dizinini silmeyi reddeder. Ama rm -rf $YOL/* yazıp $YOL boş kalmışsa kök dizin gerçekten silinmeye başlar — sistem kullanılamaz hale gelir. Pratik tavsiye: silme öncesi ls ile yolu doğrulayın, script'lerinizde set -u ile tanımsız değişkenleri yakalayın.
Sudo şifre sormadan çalışsın istiyorum, güvenli mi?
Kişisel hesaplar için önerilmez. NOPASSWD eklerseniz hesap parolası ele geçirildiğinde saldırgan doğrudan root yetkisine erişir. Otomasyon için ayrı bir hizmet kullanıcısı oluşturup sadece gerekli komutlara NOPASSWD vermek daha doğrudur (örn. deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx).
screen mi tmux mı?
Yeni başlıyorsanız tmux. Aktif geliştiriliyor, pencere/bölme yönetimi sezgisel. screen minimum kurulumlarda zaten yüklüdür ama özellik açısından geride. apt install tmux veya dnf install tmux yeter.
SSH key authentication mı parola mı?
Mutlaka anahtar tabanlı. Parola brute-force'a açık; Ed25519 ya da RSA-4096 anahtar çok daha güvenli. /etc/ssh/sshd_config içinde PasswordAuthentication no ayarlayıp ~/.ssh/authorized_keys üzerine public key koyun. Detay: Linux Sunucuya SSH Bağlantısı Nasıl Yapılır.
tail -f ile journalctl -f farkı ne?
tail -f /var/log/nginx/access.log klasik metin dosyasının yeni satırlarını izler. journalctl -u nginx -f systemd journal'daki yapılandırılmış kayıtları izler — metadata yapısaldır, -p err gibi filtreler kullanılabilir. systemd ile yönetilen servisler için journalctl daha güçlüdür.
find -exec vs xargs?
İkisi de aynı işi yapar ama find ... -exec cmd {} \; her dosya için ayrı süreç başlatır (yavaş), find ... -print0 | xargs -0 cmd toplu çalışır (hızlı). Boşluk ya da özel karakter içeren dosya adları için -print0 + -0 şart. Modern find ile -exec cmd {} + da xargs gibi toplu çalışır.
netstat neden artık kullanılmıyor?
netstat (net-tools paketi) deprecated; iproute2'den ss daha hızlı ve tutarlı. netstat -tulpn yerine ss -tulpn, route yerine ip route, ifconfig yerine ip addr kullanın.
chmod 777 neden kötü?
777 "herkes okusun, yazsın, çalıştırsın" demek. Bir saldırgan ya da hatalı betik bu dosyayı kolayca değiştirebilir. Web dizinleri için doğru pratik: dosyalar 644, dizinler 755. /var/www/html altında chown -R www-data:www-data + 644 standarttır.
Cron ile script çalışmıyor, neden?
En sık nedenler: (1) cron minimal PATH ile çalışır — mutlak yol kullanın (/usr/bin/python3); (2) >>logfile 2>&1 eklemediğiniz için hata kaybolur; (3) script'in execute izni yok (chmod +x); (4) shebang yanlış (#!/bin/bash); (5) env değişkenleri yok — crontab başına SHELL=/bin/bash, PATH=... ekleyin.
;, &&, || farkı?
A; B — A bitince (başarı/başarısızlık fark etmez) B çalışır. A && B — sadece A başarıyla biterse B çalışır. A || B — sadece A başarısız olursa B. Örnek: apt update && apt upgrade -y.
Buyukweb VDS ile Bu Komutları Çalıştırma
Bu rehberdeki komutların tamamı root SSH erişimi gerektirir. Buyukweb E5-V4 VDS paketlerimiz (₺250/ay başlangıç) tam root SSH ile gelir; KVM sanallaştırma sayesinde komşu müşterilerden izole bir ortamda systemctl, iptables, useradd gibi sistem komutlarını özgürce kullanırsınız. Tüm VDS paketlerimizde:
- AlmaLinux 9, Ubuntu 22.04, Debian 12, RHEL 9 (tercihinize göre)
- Tam root SSH (anahtar tabanlı kimlik doğrulama desteği)
- L3 + L4 + L7 DDoS koruması
- Bursa Tier 3 veri merkezi, %99.8 uptime SLA
- Veeam tabanlı günlük otomatik yedekleme
- 7/24 Türkçe destek
cPanel paylaşımlı hosting paketlerimizde de cPanel UI üzerinden "Terminal" uygulaması açılır (jailed shell); bu rehberdeki dosya yönetimi, grep/find, tar/gzip ve curl/wget komutları çalışır. Tam yetkili sysadmin deneyimi için VDS önerilir.
17 yıllık deneyim: Buyukweb 2009'dan beri Türkiye lokasyonlu hosting hizmeti veriyor. Sorularınız için 0850 302 60 70 numaralı destek hattımıza ya da [email protected] adresine yazabilirsiniz.
İlgili Büyükweb Hizmetleri
- E5-V4 VDS Sunucu — Tam root SSH erişimi, ₺250/ay başlangıç
- VDS Sunucu paketleri
- cPanel Web Hosting — Terminal app dahil
- Linux Hosting
- İletişim — 0850 302 60 70
Sonuç
Linux SSH terminal komutları öğrenmek, "bir gün otururum öğrenirim" işi değildir; her komut kendi senaryosuyla cebinizde olmalıdır. Bu rehberi yer imine ekleyip ihtiyaç duydukça başvurabilirsiniz. ls, grep, find, tail -f, systemctl, journalctl, ss -tulpn, df -h, tmux — bu dokuz komut, bir VDS sysadmin'inin günlük hayatının yüzde sekseninde çağırdığı komutlardır. Önce bunlara hakim olun; gerisi pratikle gelir.
Bağlantı kurma adımları için Linux Sunucuya SSH Bağlantısı Nasıl Yapılır, vim'de takılırsanız Linux vim Metin Editörü, log analizi için grep, sed, awk ve cut yazılarımıza bakın.
Linux & Komut Satırı İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:

