
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 root@vds.ornekdomain.com 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 dönüp 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.
Büyükweb 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 |
| Paket Yönetimi | apt, dnf, dpkg |
Kurulum, güncelleme, kaldırma |
| Sistem | df, du, free, uname, uptime |
Kaynak izleme |
| Ağ | ss, ping, mtr, dig |
Bağlantı testi |
| Güvenlik | ufw, iptables, fail2ban-client |
Firewall |
| SSH Erişimi | ssh-keygen, ssh-agent, sshd_config |
Anahtar yönetimi, sertleştirme |
| Kullanıcı | id, useradd, sudo, chmod, chown |
Kimlik & yetki |
| Zamanlama | crontab, systemd timer |
Periyodik görev |
| Verimlilik | screen, tmux, kısayollar |
Kalıcı oturum, hızlı komut satırı |
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.
Paket Yönetimi: apt, dnf
Debian/Ubuntu tabanlı sistemlerde paket yönetimi apt ile yapılır:
apt update # Paket listesini güncelle (kurulum yapmaz)
apt upgrade # Yüklü paketleri yükselt
apt full-upgrade # Bağımlılık değişikliği gerektiren yükseltmeler dahil
apt update && apt upgrade -y # Tek seferde, onaysız
apt install nginx # Kur
apt remove nginx # Kaldır (config dosyaları kalır)
apt purge nginx # Config dahil tamamen kaldır
apt autoremove # Artık gereksiz bağımlılıkları temizle
apt search redis # Paket ara
apt show nginx # Paket detayı
dpkg -L nginx # Paketin kurduğu dosyaların listesi
dpkg -S /etc/nginx/nginx.conf # Bir dosya hangi paketten geldi
apt-file search /usr/sbin/named # Kurulu olmayan bir paketin dosyasını ara
AlmaLinux / Rocky / RHEL tarafında aynı işler dnf ile yapılır: dnf install, dnf upgrade, dnf search, dnf info — mantık ve kullanım şekli apt'a çok benzer.
Disk, Bellek ve Sistem Bilgisi
df -h # Disk (insan-okur) / -hT FS türü
df -i # inode kullanımı — inode dolarsa disk boş görünse de "no space left" hatası alınır
du -sh /var/log/ # Dizin boyutu / -d 1 -h derinlik 1
du -sh /var/log/* | sort -h # En şişen dizinleri bul
ncdu /var # İnteraktif disk kullanım gezgini (paket gerekir)
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20 # En büyük 20 dosya
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ı
iostat -x 2 # I/O istatistikleri, 2 saniyede bir tekrar (sysstat paketi)
iotop # Process bazlı disk I/O (paket gerekir)
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
Büyükweb VDS notu: Tüm VDS paketlerimizde L3 + L4 + L7 DDoS koruması altyapı seviyesindedir.
ufw/fail2banek savunmadır. Detay: Linux firewalld yapılandırma.
SSH Erişimi: Anahtar Türleri, Config ve Sertleştirme
VDS'e bağlandıktan sonra günlük komutlara geçmeden önce, SSH erişiminin kendisini sağlamlaştırmak faydalıdır. Aşağıdaki dört alt başlık — anahtar seçimi, ~/.ssh/config ile kısayol, sshd_config sertleştirme ve agent kullanımı — bir VDS'in ilk gün rutini olmalı.
SSH Anahtar Türleri: Hangisini Seçmeli
ssh-keygen varsayılanı eski; ed25519 günümüzde standart tercih:
# Modern (önerilen) — ed25519: küçük, hızlı, güvenli
ssh-keygen -t ed25519 -C "kullanici@ornekdomain.com"
# Eski sistemlerle uyumluluk gerekiyorsa RSA 4096
ssh-keygen -t rsa -b 4096 -C "kullanici@ornekdomain.com"
| Anahtar | Boyut | Hız | Güvenlik | Uyumluluk |
|---|---|---|---|---|
| ed25519 | 256 bit | en hızlı | mükemmel | OpenSSH 6.5+ (2014 sonrası) |
| RSA 4096 | 4096 bit | daha yavaş | iyi | hemen hemen her sistem |
| ECDSA | 256/521 bit | hızlı | iyi | OpenSSH 5.7+ |
| RSA 2048 | 2048 bit | hızlı | artık zayıf kabul edilir | hemen hemen her sistem |
| DSA | 1024 bit | — | kullanılmamalı | OpenSSH 7.0+'ta devre dışı |
İzin notu:
~/.ssh/authorized_keysdosyası0600,~/.sshdizini0700olmalı — aksi halde sshd anahtarı reddedebilir.
~/.ssh/config ile Bağlantıları Sadeleştirme
Birden fazla sunucu yönetiyorsanız her seferinde uzun ssh -p 2222 -i ~/.ssh/proje.pem kullanici@123.45.67.89 yazmak yerine:
# ~/.ssh/config
Host buyukweb-vds
HostName 123.45.67.89
Port 2222
User uguro
IdentityFile ~/.ssh/buyukweb_ed25519
ServerAliveInterval 60
ServerAliveCountMax 3
Host buyukweb-*
User admin
IdentityFile ~/.ssh/admin_ed25519
# Jump host (bastion) üzerinden iç ağa erişim
Host ic-sunucu
HostName 10.0.1.10
ProxyJump bastion.ornekdomain.com
User deployer
Host *
AddKeysToAgent yes
ServerAliveInterval 30
Artık ssh buyukweb-vds yeterli; scp ve rsync de aynı alias'ı tanır.
SSH Sertleştirme (Hardening)
VDS teslim alındığındaki ilk sıkılaştırma adımları, /etc/ssh/sshd_config üzerinde:
# /etc/ssh/sshd_config
Port 2222 # Default 22 yerine — otomatik tarama gürültüsünü azaltır
PermitRootLogin no # Root direkt login kapalı, sudo'lu kullanıcı kullan
PasswordAuthentication no # Sadece anahtar
PubkeyAuthentication yes
ChallengeResponseAuthentication no
MaxAuthTries 3 # Deneme limiti
LoginGraceTime 30s
MaxSessions 5
MaxStartups 10:30:60
X11Forwarding no # Gerekmiyorsa kapalı
AllowUsers admin deployer # veya AllowGroups ssh-users
Banner /etc/issue.net # Yasal uyarı banner'ı
# Değişiklikten sonra
systemctl restart sshd
Kritik uyarı:
sshd_configdeğiştirdikten sonra mevcut SSH oturumunuzu kapatmayın — yeni bir terminalde bağlanmayı deneyin, hata varsa eski oturumdan geri alın. Aksi halde kendinizi sunucudan kilitleyebilirsiniz.
SSH Agent ve Forwarding
Anahtar parolasını her bağlantıda yeniden yazmamak için ssh-agent:
eval "$(ssh-agent -s)" # Agent'ı başlat
ssh-add ~/.ssh/buyukweb_ed25519 # Anahtarı ekle (parolayı bir kez sorar)
ssh-add -l # Ekli anahtarları listele
ssh-add -D # Tüm anahtarları çıkar (lockdown)
ForwardAgent dikkat:
ssh -Aveya config'teForwardAgent yesile bağlandığınız sunucu, sizin agent'ınızı kullanabilir hale gelir. Sunucu ele geçirilirse anahtarınız da risk altına girer — sadece güvendiğiniz jump host'larda açın. Daha güvenli alternatif: yukarıdakiProxyJump.
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)
Shell Verimlilik Kısayolları
Terminalde saatler geçirecekseniz aşağıdaki klavye kısayolları zaman kazandırır:
| Kısayol | İşlev |
|---|---|
Ctrl+R |
Komut geçmişinde arama (yazdıkça filtreler, tekrar Ctrl+R bir önceki eşleşme) |
Ctrl+A |
Satır başına git |
Ctrl+E |
Satır sonuna git |
Ctrl+W |
Bir önceki sözcüğü sil |
Ctrl+U |
Satırı temizle |
Ctrl+L |
Ekranı temizle (clear alternatifi) |
Tab |
Otomatik tamamlama (dosya, komut) |
Tab Tab |
Olası tüm tamamlamaları listele |
!! |
Son komutu tekrarla (sudo !! çok kullanışlı) |
!$ |
Son komutun son argümanını çağır |
Alt+. |
Önceki komutun son argümanını tek tek çağır |
Bu kısayollar bash ve zsh için geçerlidir; bash-completion paketi kurulu değilse Tab tamamlaması sınırlı çalışır (apt install bash-completion / dnf install bash-completion).
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: "Bellek (RAM) dolu görünüyor"
free -h # Kullanılan / boş / cache RAM
ps aux --sort=-%mem | head -10 # En çok RAM yiyen 10 process
sync && echo 3 > /proc/sys/vm/drop_caches # Sayfa/dentry/inode cache'i temizle (root)
journalctl --since "10 min ago" | grep -i "out of memory" # OOM killer tetiklendi mi?
Linux boşta kalan RAM'i disk cache olarak kullanır —
free -hçıktısında "used" yüksek görünse de "available" sütunu asıl boş kapasiteyi gösterir; panik etmeden önce ona bakın.
Senaryo 4: "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 5: "Düzenli yedek"
# Incremental rsync (uzak sunucuya)
rsync -avz --delete -e "ssh -p 2222" \
/var/www/html/ \
yedek@yedek-host.ornekdomain.com:/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
Büyükweb 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.
MFA / TOTP SSH'a eklenebilir mi?
Evet — Google Authenticator PAM modülü ile ikinci faktör eklenebilir:
apt install libpam-google-authenticator
google-authenticator # Kullanıcı bazlı QR kod üretir
Ardından /etc/pam.d/sshd içine PAM modülünü ekleyip /etc/ssh/sshd_config içinde AuthenticationMethods publickey,keyboard-interactive satırıyla ikinci faktörü zorunlu kılabilirsiniz.
Anahtarımı bilgisayarımda kaybedersem ne yapmalıyım?
Başka bir bağlantı yönteminiz varsa sunucudaki ~/.ssh/authorized_keys dosyasından ilgili public key satırını çıkarıp yeni bir anahtar ekleyin. Hiç erişiminiz kalmadıysa 0850 302 60 70 üzerinden destek talebi açarak erişim kurtarma isteyebilirsiniz. Önlem olarak anahtarınızı parola ile koruyun (ssh-keygen -p) ve ssh-agent kullanın.
"Permission denied (publickey)" hatası alıyorum, ne kontrol etmeliyim?
Sırayla: 1) ssh -v kullanici@host ile debug çıktısına bakın 2) ~/.ssh dizini 0700, authorized_keys dosyası 0600 mü kontrol edin 3) Sunucuda /var/log/auth.log (veya journalctl -u sshd) ne diyor bakın 4) sshd_config'te PubkeyAuthentication yes mi 5) Anahtar agent'a eklenmiş mi (ssh-add -l).
Port 22 yerine başka port kullanmak gerçekten güvenli mi?
Kısmen — bu security through obscurity'dir; otomatik tarama botlarının gürültüsünü azaltır ama hedefli bir saldırıyı durdurmaz. Log dosyalarını temiz tutmak için faydalıdır ama esas güvenlik fail2ban + sadece anahtar tabanlı kimlik doğrulama + MaxAuthTries 3 kombinasyonundan gelir.
Tab ile otomatik tamamlama çalışmıyor, neden?
Büyük olasılıkla bash-completion paketi kurulu değil: apt install bash-completion (veya dnf install bash-completion) kurup yeni bir terminal açın. Daha gelişmiş tamamlama isteyenler zsh + oh-my-zsh kombinasyonunu tercih edebilir.
SSH ile giriş için root parolamı unuttum, ne yapmalıyım?
Anahtar tabanlı bir oturumunuz hâlâ açıksa passwd ile yeni şifre belirleyebilirsiniz. Hiçbir erişiminiz kalmadıysa 0850 302 60 70 numaralı destek hattımızdan root reset talebi açılabilir.
VDS'i teslim aldığımda root şifresini değiştirmedim, risk var mı?
Evet, yüksek olasılıkla otomatik tarama botları birkaç dakika içinde parola denemeye başlar (grep "Failed password" /var/log/auth.log | wc -l ile kaç deneme yapıldığını görebilirsiniz — binlerce olması normaldir). Hemen yapılması gerekenler: 1) Yeni bir admin kullanıcı oluşturup sudo + anahtar tabanlı erişim tanımlayın 2) PermitRootLogin no 3) PasswordAuthentication no 4) fail2ban kurun 5) Ele geçirilme şüphesi varsa 0850 302 60 70 üzerinden destek hattımıza başvurup sunucunun yeniden hazırlanmasını talep edin.
Büyükweb VDS ile Bu Komutları Çalıştırma
Bu rehberdeki komutların tamamı root SSH erişimi gerektirir. Büyükweb E5-V4 VDS paketlerimiz (₺250/ay başlangıç) tam root SSH ile gelir; VMware vSphere 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ı
- İstanbul Tier III sertifikalı DataCasa veri merkezi, %99.8 uptime SLA
- Veeam tabanlı günlük otomatik yedekleme
- 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: Büyükweb 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 destek@buyukweb.com 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:


