Veritabanı & DevOps

Linux Sunucu Yönetimi: Temel Komutlar ve Otomasyon

Fatih Algül
21.03.2026 302 görüntülenme

Linux Sunucu Yönetimine Giriş

Linux sunucu yönetimi, modern yazılım altyapısının temel taşlarından biridir. Bulut bilişimden konteyner teknolojilerine kadar pek çok alanda Linux sunucular kritik rol oynar. Bu yazıda, bir sistem yöneticisinin günlük işlerinde sıklıkla kullandığı temel komutları, otomasyon tekniklerini ve en iyi uygulamaları detaylı şekilde inceleyeceğiz.

Sistem Bilgisi ve İzleme Komutları

Bir sunucuyu yönetmenin ilk adımı, sistemin mevcut durumunu anlamaktır. Aşağıdaki komutlar bu konuda en sık başvuracağınız araçlardır:

Sistem Kaynaklarını İzleme

  • top / htop — Anlık CPU, bellek kullanımı ve çalışan süreçleri görüntüler. htop, renkli ve etkileşimli arayüzüyle daha kullanışlıdır.
  • free -h — RAM ve swap kullanımını okunabilir formatta gösterir.
  • df -h — Disk bölümlerinin doluluk oranlarını listeler.
  • du -sh /var/log/* — Belirli dizinlerin disk kullanımını özetler.
  • uptime — Sunucunun ne zamandır çalıştığını ve yük ortalamasını gösterir.

Örneğin, sunucunuzun bellek durumunu hızlıca kontrol etmek için:

free -h

Bu komut size toplam, kullanılan ve boş bellek miktarını megabayt/gigabayt cinsinden gösterecektir. Load average değerleri ise CPU çekirdek sayınızla orantılı yorumlanmalıdır; 4 çekirdekli bir sunucuda 4.0 load average, %100 kullanım anlamına gelir.

Ağ Durumunu İzleme

  • ss -tulnp — Açık portları ve dinleyen servisleri listeler. Eski netstat komutunun modern karşılığıdır.
  • ip addr show — Ağ arayüzlerini ve IP adreslerini gösterir.
  • curl -I https://example.com — Bir URL'ye HTTP HEAD isteği göndererek yanıt başlıklarını kontrol eder.
  • ping -c 4 8.8.8.8 — Ağ bağlantısını ve gecikmeyi test eder.

Kullanıcı ve Yetki Yönetimi

Sunucu güvenliğinin en önemli bileşenlerinden biri, kullanıcı ve dosya izinlerinin doğru yapılandırılmasıdır.

Kullanıcı İşlemleri

Yeni bir kullanıcı oluşturmak ve sudo yetkisi vermek için:

useradd -m -s /bin/bash yenikullanici passwd yenikullanici usermod -aG sudo yenikullanici

-m parametresi ev dizinini otomatik oluşturur, -s ise varsayılan kabuğu belirler. Güvenlik açısından, doğrudan root ile giriş yapmak yerine sudo mekanizmasını kullanmak her zaman tercih edilmelidir.

Dosya İzinleri

Linux'ta dosya izinleri üç katmandan oluşur: sahip (owner), grup (group) ve diğerleri (others). Her katman için okuma (r=4), yazma (w=2) ve çalıştırma (x=1) yetkileri tanımlanır.

chmod 750 /opt/uygulama chown www-data:www-data /var/www/html -R

Yukarıdaki örnekte 750 izni; sahibine tam yetki (7), gruba okuma ve çalıştırma (5), diğerlerine ise hiçbir yetki vermez (0). Hassas yapılandırma dosyaları için 600 veya 400 izinleri kullanılmalıdır.

Servis ve Süreç Yönetimi

Modern Linux dağıtımlarının büyük çoğunluğu systemd init sistemini kullanır. Servisleri yönetmek için systemctl komutu kullanılır:

  • systemctl start nginx — Servisi başlatır.
  • systemctl stop nginx — Servisi durdurur.
  • systemctl restart nginx — Servisi yeniden başlatır.
  • systemctl enable nginx — Sunucu açılışında otomatik başlatılmasını sağlar.
  • systemctl status nginx — Servisin durumunu ve son log çıktılarını gösterir.

Bir servisin loglarını detaylı incelemek için journalctl kullanılır:

journalctl -u nginx --since "1 hour ago" --no-pager

Süreçleri yönetmek için ise ps aux, kill ve pkill komutları sıklıkla kullanılır. Yanıt vermeyen bir süreci sonlandırmak için kill -9 PID kullanılabilir, ancak bu son çare olmalıdır; önce kill -15 (SIGTERM) ile nazikçe kapatma denenmelidir.

Log Yönetimi ve Analiz

Sunucu logları, sorun giderme ve güvenlik denetimi için vazgeçilmezdir. Temel log dosyaları /var/log/ dizininde bulunur:

  • /var/log/syslog veya /var/log/messages — Genel sistem logları
  • /var/log/auth.log — Kimlik doğrulama ve giriş denemeleri
  • /var/log/nginx/access.log — Web sunucusu erişim kayıtları

Logları analiz etmek için güçlü komut satırı araçları kullanılabilir:

# Son 50 satırı canlı takip et tail -f -n 50 /var/log/syslog # Belirli bir kalıbı ara grep "Failed password" /var/log/auth.log | tail -20 # IP adreslerine göre erişim sayısını hesapla awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

Son örnekteki komut zinciri, Nginx erişim loglarından en çok istek gönderen 10 IP adresini listeler — brute-force saldırılarını veya anormal trafik kaynaklarını tespit etmek için oldukça faydalıdır.

Otomasyon: Cron ve Bash Script'leri

Tekrar eden görevleri otomatikleştirmek, sistem yönetiminin en kritik parçasıdır. Linux'ta zamanlanmış görevler için cron kullanılır.

Cron Görevleri

Cron ifadesi beş alandan oluşur: dakika, saat, gün, ay, haftanın günü. Crontab düzenlemek için crontab -e komutu kullanılır:

# Her gün gece 02:00'de veritabanı yedeği al 0 2 * * * /opt/scripts/db_backup.sh >> /var/log/backup.log 2>&1 # Her 5 dakikada disk kullanımını kontrol et */5 * * * * /opt/scripts/disk_check.sh # Her pazartesi sabah 08:00'de haftalık rapor gönder 0 8 * * 1 /opt/scripts/weekly_report.sh

2>&1 ifadesi, hata çıktısını da standart çıktıyla birlikte log dosyasına yönlendirir; bu sayede oluşabilecek hatalar kaybolmaz.

Pratik Bir Yedekleme Script'i

Aşağıda, veritabanı ve dosya yedeği alan, eski yedekleri temizleyen bir Bash script'i örneği bulunmaktadır:

#!/bin/bash set -euo pipefail BACKUP_DIR="/backup/$(date +%Y-%m-%d)" RETENTION_DAYS=7 DB_NAME="uygulama_db" mkdir -p "$BACKUP_DIR" # PostgreSQL yedeği pg_dump "$DB_NAME" | gzip > "$BACKUP_DIR/db_${DB_NAME}.sql.gz" # Uygulama dosyaları yedeği tar czf "$BACKUP_DIR/app_files.tar.gz" /var/www/html/ # Eski yedekleri temizle find /backup/ -maxdepth 1 -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; echo "[$(date)] Yedekleme tamamlandi: $BACKUP_DIR"

set -euo pipefail satırı son derece önemlidir: herhangi bir komut başarısız olursa script'in devam etmesini engeller. Üretim ortamında çalışan script'lerde bu satır mutlaka bulunmalıdır.

Güvenlik Temelleri

Sunucu güvenliği, yapılandırma anında başlar ve sürekli bir süreçtir. Aşağıdaki adımlar temel güvenlik katmanını oluşturur:

SSH Sertleştirme

/etc/ssh/sshd_config dosyasında yapılması gereken kritik değişiklikler:

PermitRootLogin no PasswordAuthentication no Port 2222 MaxAuthTries 3 AllowUsers deployer admin

Parola ile girişi devre dışı bırakıp SSH anahtar çifti kullanmak, brute-force saldırılarına karşı en etkili önlemdir.

Firewall Yapılandırması

UFW (Uncomplicated Firewall) ile temel kurallar:

ufw default deny incoming ufw default allow outgoing ufw allow 2222/tcp # SSH ufw allow 80/tcp # HTTP ufw allow 443/tcp # HTTPS ufw enable

Varsayılan olarak tüm gelen trafiği engelleyip yalnızca gerekli portları açmak, en az ayrıcalık ilkesinin ağ katmanındaki uygulamasıdır.

Otomatik Güvenlik Güncellemeleri

Debian/Ubuntu sistemlerde unattended-upgrades paketini etkinleştirmek, güvenlik yamalarının otomatik uygulanmasını sağlar:

apt install unattended-upgrades dpkg-reconfigure -plow unattended-upgrades

İleri Düzey Otomasyon Araçları

Tek bir sunucuyu yönetmek komut satırıyla mümkündür, ancak onlarca veya yüzlerce sunucuyu yönetmek için yapılandırma yönetimi araçları gerekir:

  • Ansible — Agentsız çalışır, YAML tabanlı playbook'larla sunucu yapılandırmasını tanımlar. Öğrenme eğrisi düşüktür ve SSH üzerinden çalıştığı için ek kurulum gerektirmez.
  • Terraform — Altyapıyı kod olarak (Infrastructure as Code) tanımlamak için kullanılır. Bulut kaynaklarını oluşturmak ve yönetmek için idealdir.
  • Docker / Podman — Uygulama konteynerizasyonu sayesinde "benim makinemde çalışıyor" sorununu ortadan kaldırır ve dağıtımı standartlaştırır.

Basit bir Ansible playbook örneği:

--- - hosts: web_servers become: yes tasks: - name: Nginx kur apt: name: nginx state: latest - name: Nginx servisini baslat systemd: name: nginx state: started enabled: yes

Bu playbook, web_servers grubundaki tüm sunuculara Nginx kurar ve servisi etkinleştirir. Tek bir komutla düzinelerce sunucuyu aynı anda yapılandırabilirsiniz.

Sonuç ve Öneriler

Linux sunucu yönetimi geniş bir alan olsa da temel prensipleri şu şekilde özetleyebiliriz:

  1. İzleme alışkanlığı edinin — sorunları kullanıcılardan önce fark edin.
  2. Yedekleme stratejinizi oluşturun ve düzenli olarak geri yükleme testleri yapın.
  3. Güvenlik katmanlarını ihmal etmeyin; en az ayrıcalık ilkesini her düzeyde uygulayın.
  4. Tekrar eden her görevi otomatikleştirin — hem zaman kazanır hem de insan hatasını azaltırsınız.
  5. Yaptığınız her değişikliği belgelendirin; altı ay sonra neden o değişikliği yaptığınızı hatırlamayabilirsiniz.

Bu temelleri sağlam attığınızda, sunucu yönetimi karmaşık değil, sistematik bir süreç haline gelir. Küçük adımlarla başlayın, her gün bir komutu daha iyi öğrenin ve otomasyon alışkanlığını erken benimseyin.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç