cPanel yıllıkta ücretsiz taşıma + SSLHemen İncele
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ü21 dakika okuma

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, 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
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ı: 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.


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/fail2ban ek 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_keys dosyası 0600, ~/.ssh dizini 0700 olmalı — 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_config değ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 -A veya config'te ForwardAgent yes ile 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ıdaki ProxyJump.


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)

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


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ş

WhatsApp0850 302 60 70