Buyukweb
Linux SSH Terminal Komutları: VDS Sysadmin Rehberi

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.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü15 dakika okuma

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, systemd paketleri 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çin systemctl, iptables, useradd gibi 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
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ı: Modern rm (GNU coreutils 8.x+) / dizinini silmeyi reddeder, ama rm -rf $YOL/* yazıp $YOL boş kalmışsa kök dizin silinmeye başlar. Silme öncesi ls ile 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 -exec vs xargs: -exec cmd {} \; her dosya için ayrı süreç başlatır (yavaş). -print0 | xargs -0 cmd toplu çalışır (hızlı). Boşluklu dosya adları için -print0 + -0 şart. Modern find ile -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: -a archive (metadata), -v verbose, -z sıkıştırma, --delete kaynaktan 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â duruyorsa SIGKILL (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 -f vs journalctl -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 err gibi 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/fail2ban ek 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 zaman visudo -f /etc/sudoers.d/deploy ile.


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


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:

#Linux komutları#SSH terminal komutları#bash komutları#Linux yönetimi#terminal rehberi#ls#cd#grep#systemctl

Bu yazıyı paylaş