Ekran Kartlı Sunucu Satışları Başladı. İncele
Altyapı ve Sistem Yönetimi

Sunucu Yönetimi İçin Linux Temel Komutları

ls, cd, nano, chmod, tar, systemctl, htop ve daha fazlası: sunucu yönetirken en çok ihtiyaç duyacağınız Linux komutları örneklerle.

  • 11 dk okuma
  • Güncelleme:
  • Yayın:
  • Batihost Teknik Ekibi

Kısaca Özet

  • Sunucu yönetmek için gereken komut sayısı sanıldığından az: dosya gezinme (ls, cd), düzenleme (nano), izinler (chmod), arşiv (tar), servis (systemctl) ve izleme (htop).
  • Her komutun çıktısını okumayı öğrenmek, komutu ezberlemekten daha değerlidir. Bu sayfadaki her örnekte gerçek çıktı da veriliyor.
  • sudo rm -rf yazmadan önce iki kez düşünün: Linux’ta silinen dosya çöp kutusuna gitmez, doğrudan yok olur.
  • Komutları uygulamadan önce sunucuya bağlanmayı bilmelisiniz — SSH bağlantı rehberi ile başlayın.

Linux temel komutları, bir sunucuyu yönetmek için ihtiyacınız olan araç setidir ve sanıldığından çok daha kısadır. Günlük işlerin neredeyse tamamı otuz civarında komutla yapılır: dosya gezinme, dosya düzenleme, izin ayarlama, arşivleme, servis yönetimi ve kaynak izleme.

Bu sayfa bir komut listesi değil, bir kullanım rehberidir. Her komutun ne işe yaradığını, en sık kullanılan parametrelerini ve gerçek çıktısını birlikte veriyoruz — çünkü sunucu yönetiminde asıl beceri, komutu yazmak değil çıktısını okumaktır. Örnekler Ubuntu 24.04 LTS üzerinden verilmiştir; Debian, AlmaLinux ve Rocky Linux’ta paket yöneticisi dışında her şey aynıdır.

BilgiSunucuya nasıl bağlanacağınızı bilmiyorsanız önce SSH bağlantı rehberini okuyun. Windows’tan bağlanacaksanız PuTTY ya da Windows Terminal kullanabilirsiniz.

Dizinlerde Gezinme ve Dosya Listeleme#

# Bulunduğun dizini yazdır
pwd
# /home/yonetici

# Dizin içeriğini ayrıntılı listele (izin, sahip, boyut, tarih)
ls -lh
# total 24K
# drwxr-xr-x 3 yonetici yonetici 4.0K Aug 12 03:41 bot
# -rw-r--r-- 1 yonetici yonetici  512 Aug 11 22:17 notlar.txt
# -rwxr-xr-x 1 root     root     1.2K Aug 10 09:03 yedek.sh

# Gizli dosyaları da göster, boyuta göre sırala
ls -lah --sort=size

# Dizin değiştir
cd /var/www/site.com
cd ..        # bir üst dizine
cd ~         # ev dizinine
cd -         # bir önceki dizine geri dön

ls -lh çıktısındaki ilk sütunu okumayı öğrenmek çok işe yarar: ilk karakter d ise klasör, - ise dosya, l ise sembolik bağlantıdır. Kalan dokuz karakter üçerli gruplar halinde sahip, grup ve diğerlerinin izinlerini gösterir.

Dosya Oluşturma, Kopyalama, Taşıma ve Silme#

# Boş dosya oluştur veya zaman damgasını güncelle
touch /opt/uygulama/ayarlar.conf

# Klasör oluştur (ara dizinleri de oluştur)
mkdir -p /opt/uygulama/veri/2026

# Kopyala (-r klasörler için, -p izinleri korur)
cp -rp /opt/uygulama /opt/uygulama-yedek

# Taşı veya yeniden adlandır
mv eski-ad.conf yeni-ad.conf
mv /tmp/rapor.log /var/log/uygulama/

# Sil
rm dosya.txt
rm -r klasor/            # klasörü içeriğiyle sil
rm -i *.log              # her dosya için onay sor
Uyarırm -rf geri alınamaz. Komutu yazarken yol adını iki kez kontrol edin; başındaki fazladan bir boşluk (rm -rf / opt/eski) tüm sistemi silmeye çalışır. Alışkanlık olarak önce ls ile aynı yolu listeleyin, doğru sonucu gördükten sonra silin.

Dosya İçeriğini Görüntüleme ve Düzenleme#

# Tüm dosyayı ekrana bas
cat /etc/hostname
# web01

# Uzun dosyayı sayfa sayfa oku (q ile çık, / ile ara)
less /var/log/nginx/access.log

# İlk ve son satırlar
head -20 /var/log/syslog
tail -50 /var/log/syslog

# Canlı log takibi - en çok kullanacağınız komutlardan biri
tail -f /var/log/nginx/error.log

# Satır, kelime, karakter sayısı
wc -l /var/log/nginx/access.log
# 184223 /var/log/nginx/access.log

Dosya düzenlemek için nano yeni başlayanlar için en pratik seçenektir:

sudo nano /etc/nginx/nginx.conf
Tuşİşlev
Ctrl + OKaydet (sonra Enter ile onayla)
Ctrl + XÇık
Ctrl + WMetin ara
Ctrl + KSatırı kes
Ctrl + UKesilen satırı yapıştır
Alt + UGeri al
Ctrl + _Belirli satır numarasına git
nano düzenleyici kısayolları
İpucuBir yapılandırma dosyasını düzenlemeden önce mutlaka kopyasını alın: sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.yedek. Bir şey bozulduğunda geri dönmeniz saniyeler sürer. Değişiklikten sonra servisi yeniden başlatmadan önce yapılandırmayı test etmeyi de alışkanlık edinin: sudo nginx -t.

Arama: grep ve find#

# Dosya içinde metin ara
grep "error" /var/log/nginx/error.log

# Büyük/küçük harf duyarsız, satır numaralı, klasör içinde özyinelemeli
grep -rin "database" /var/www/site.com --include="*.php"

# Eşleşmeyen satırları göster (ters arama)
grep -v "healthcheck" /var/log/uygulama.log

# Eşleşen satır sayısını say
grep -c "404" /var/log/nginx/access.log
# 2841

# Eşleşen satırın öncesi ve sonrasını da göster
grep -B 2 -A 5 "Exception" /var/log/uygulama.log
# İsimle dosya ara
find /var/www -name "wp-config.php"
# /var/www/site.com/wp-config.php

# 100 MB'tan büyük dosyaları bul
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# Son 24 saatte değişmiş dosyalar (saldırı sonrası inceleme için değerli)
find /var/www -type f -mtime -1

# 30 günden eski log dosyalarını sil
find /var/log/uygulama -name "*.log" -mtime +30 -delete

# İzni 777 olan dosyaları bul (güvenlik denetimi)
find /var/www -type f -perm 0777

İzinler ve Sahiplik#

Linux’ta her dosyanın bir sahibi, bir grubu ve üç izin seti vardır. İzin rakamları okuma (4), yazma (2) ve çalıştırma (1) değerlerinin toplamıdır.

DeğerAnlamıTipik kullanım
755rwxr-xr-xKlasörler ve çalıştırılabilir betikler
644rw-r--r--Normal dosyalar, web içeriği
640rw-r-----Parola içeren yapılandırma dosyaları
600rw-------SSH özel anahtarı, .env
700rwx------Yalnızca sahibinin gireceği klasör
777rwxrwxrwxAsla kullanmayın
Sık kullanılan izin değerleri
# İzin değiştir
chmod 644 ayarlar.conf
chmod +x yedek.sh              # çalıştırma izni ekle
chmod -R 755 /var/www/site.com # özyinelemeli

# Sahip ve grup değiştir
sudo chown www-data:www-data /var/www/site.com -R
sudo chown yonetici notlar.txt

# Klasörlere 755, dosyalara 644 uygula (doğru yöntem)
find /var/www/site.com -type d -exec chmod 755 {} \;
find /var/www/site.com -type f -exec chmod 644 {} \;

# Mevcut izinleri sayısal olarak gör
stat -c "%a %U:%G %n" /var/www/site.com/wp-config.php
# 640 www-data:www-data /var/www/site.com/wp-config.php

Kullanıcı ve Yetki Yönetimi#

# Yeni kullanıcı oluştur
sudo adduser gelistirici

# sudo yetkisi ver
sudo usermod -aG sudo gelistirici

# Kullanıcının gruplarını gör
groups gelistirici
# gelistirici : gelistirici sudo www-data

# Başka bir kullanıcı olarak komut çalıştır
sudo -u www-data php /var/www/site.com/betik.php

# Kimin bağlı olduğunu gör
who
# yonetici pts/0        2026-08-12 03:22 (85.104.22.11)

# Son giriş kayıtları (başarısız girişleri de kontrol edin)
last -n 10
sudo lastb -n 10

Paket Yönetimi#

# Ubuntu / Debian
sudo apt update                    # paket listesini yenile
sudo apt upgrade -y                # kurulu paketleri güncelle
sudo apt install -y htop curl git  # paket kur
sudo apt remove paket-adi          # kaldır
sudo apt autoremove                # gereksiz bağımlılıkları temizle
apt list --installed | grep nginx  # kurulu mu kontrol et

# AlmaLinux / Rocky Linux
sudo dnf check-update
sudo dnf upgrade -y
sudo dnf install -y htop curl git
sudo dnf remove paket-adi
Dikkatapt upgrade ile apt full-upgrade farklıdır. İkincisi gerekirse paket kaldırabilir ve bir servisi beklenmedik biçimde durdurabilir. Üretim sunucusunda önce apt list --upgradable ile neyin güncelleneceğini görün, çekirdek güncellemesi varsa yeniden başlatmayı planlayın.

Servis Yönetimi: systemctl#

# Servis durumu
sudo systemctl status nginx

# Örnek çıktı:
# ● nginx.service - A high performance web server
#      Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
#      Active: active (running) since Tue 2026-08-11 19:04:11 +03; 8h ago
#    Main PID: 1284 (nginx)
#       Tasks: 5 (limit: 9451)
#      Memory: 12.8M
#         CPU: 4.219s

# Temel işlemler
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx      # kesintisiz yapılandırma yenileme

# Açılışta otomatik başlat / kaldır
sudo systemctl enable nginx
sudo systemctl disable nginx

# Hata veren tüm servisleri listele
systemctl --failed

# Servis dosyasını düzenledikten sonra
sudo systemctl daemon-reload

Log okuma: journalctl#

# Belirli servisin son 100 satırı
sudo journalctl -u nginx -n 100 --no-pager

# Canlı takip
sudo journalctl -u nginx -f

# Yalnızca hata seviyesindekiler
sudo journalctl -p err --since "2 hours ago"

# Bugünkü tüm sistem logları
sudo journalctl --since today

# Son önyüklemeden bu yana
sudo journalctl -b

# Disk kullanımını gör ve temizle
sudo journalctl --disk-usage
# Archived and active journals take up 412.3M in the file system.
sudo journalctl --vacuum-time=14d

systemd servis dosyası yazmayı öğrenmek isterseniz gerçek bir örnek için systemd servisi oluşturma sayfasına, arka plan süreç yönetimi için Discord bot hosting sayfasındaki unit dosyasına bakabilirsiniz.

Süreç ve Kaynak İzleme#

# Etkileşimli süreç izleyici (F6 ile sıralama, F9 ile sonlandırma)
htop

# CPU'yu en çok tüketen 10 süreç
ps aux --sort=-%cpu | head -11

# Örnek çıktı:
# USER       PID %CPU %MEM    VSZ   RSS COMMAND
# minecraft 2041 87.4 41.2 1.2e+07 6.7g java -Xms6G -Xmx6G -jar paper.jar
# mysql     1108  6.2  9.1 2841232 1.4g /usr/sbin/mariadbd
# www-data  3312  1.1  0.6  312044  98m php-fpm: pool www

# Belleği en çok tüketen 10 süreç
ps aux --sort=-%mem | head -11

# Bellek durumu
free -h
#                total        used        free      shared  buff/cache   available
# Mem:            15Gi       8.2Gi       1.1Gi       184Mi       6.1Gi       6.6Gi
# Swap:          2.0Gi        12Mi       2.0Gi

# Sistem yükü ve çalışma süresi
uptime
# 03:47:12 up 21 days,  4:33,  1 user,  load average: 1.42, 1.18, 0.96

# Süreç sonlandırma
kill 3312          # nazikçe sonlandır (SIGTERM)
kill -9 3312       # zorla sonlandır (son çare)
pkill -f "node index.js"

Yük ortalaması (load average) üç sayıdan oluşur: 1, 5 ve 15 dakikalık ortalamalar. Bu değerin çekirdek sayınızın altında kalması sağlıklıdır; 8 çekirdekli bir sunucuda 1,42 yükü rahat bir durumu gösterir. Sürekli çekirdek sayısının üzerindeyse sistem darboğazdadır.

Disk Kullanımı#

# Bölümlerin doluluk oranı
df -h
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/nvme0n1p2  196G   84G  103G  45% /
# /dev/nvme0n1p1  511M  6.2M  505M   2% /boot/efi
# tmpfs           7.9G     0  7.9G   0% /dev/shm

# Klasörlerin boyutu (kök seviyeden inerek daralt)
sudo du -h --max-depth=1 / | sort -hr | head -10
# 84G   /
# 41G   /var
# 22G   /opt
# 12G   /home
# 6.1G  /usr

# En büyük 20 dosyayı bul
sudo du -ah /var | sort -hr | head -20

# Inode kullanımı (dosya sayısı sınırı - küçük dosya çokluğunda dolar)
df -i
İpucudf disk dolu diyor ama du ile toplam boyut tutmuyorsa, silinmiş ama bir süreç tarafından hâlâ açık tutulan dosyalar vardır. Bunları sudo lsof +L1 ile bulabilirsiniz; ilgili servisi yeniden başlattığınızda alan geri gelir. Bu, büyümüş bir log dosyası silindikten sonra çok sık yaşanır.

Ağ Komutları#

# Dinlenen portlar ve hangi süreç dinliyor
sudo ss -tlnp

# Örnek çıktı:
# State   Recv-Q  Send-Q  Local Address:Port   Process
# LISTEN  0       511           0.0.0.0:80     users:(("nginx",pid=1284,fd=6))
# LISTEN  0       511           0.0.0.0:443    users:(("nginx",pid=1284,fd=8))
# LISTEN  0       128           0.0.0.0:22     users:(("sshd",pid=902,fd=3))
# LISTEN  0       50            0.0.0.0:25565  users:(("java",pid=2041,fd=112))

# Bağlantı özeti
ss -s

# IP adresleri
ip -brief addr
# lo      UNKNOWN  127.0.0.1/8
# eth0    UP       203.0.113.45/24

# Bağlantı testi ve gecikme
ping -c 5 8.8.8.8

# Bir portun dışarıdan açık olup olmadığı
nc -zv 203.0.113.45 25565
# Connection to 203.0.113.45 25565 port [tcp/*] succeeded!

# DNS sorgusu
dig +short alanadiniz.com A

# Dosya indirme
wget https://ornek.com/dosya.tar.gz
curl -L -O https://ornek.com/dosya.tar.gz

Güvenlik duvarı kuralları için ufw kullanılır; ayrıntılı yapılandırma firewall rehberinde. DNS sorgularının nasıl okunacağını DNS kayıtları sayfasında bulabilirsiniz.

Arşivleme ve Sıkıştırma#

# Arşiv oluştur (c: create, z: gzip, f: file, v: ayrıntılı)
tar -czf yedek.tar.gz /opt/uygulama

# Belirli dizinin İÇİNDEKİLERİ arşivle (üst klasör olmadan)
tar -czf yedek.tar.gz -C /opt/uygulama .

# İçeriği listele (açmadan kontrol)
tar -tzf yedek.tar.gz | head -10

# Aç
tar -xzf yedek.tar.gz -C /hedef/dizin

# Belirli klasörleri hariç tut
tar --exclude='node_modules' --exclude='*.log' -czf yedek.tar.gz /opt/uygulama

# ZIP dosyaları
unzip arsiv.zip -d /hedef/dizin
zip -r arsiv.zip klasor/

Dosya Aktarımı#

# Yerelden sunucuya kopyala
scp -P 22 /yerel/dosya.tar.gz yonetici@203.0.113.45:/opt/

# Sunucudan yerele
scp yonetici@203.0.113.45:/var/yedek/dosya.tar.gz ./

# Klasörü senkronize et (yalnızca değişenleri aktarır)
rsync -avz --progress /yerel/klasor/ yonetici@203.0.113.45:/uzak/klasor/

# Örnek çıktı:
# sending incremental file list
# ./
# index.php
#           4,182 100%    3.99MB/s    0:00:00 (xfr#1, to-chk=142/144)
# sent 1,204,338 bytes  received 2,181 bytes  803,012.67 bytes/sec

Kaçırılmaması Gereken Kısayollar#

Kısayol / komutİşlev
TabDosya adı ve komut tamamlama — yazım hatasını sıfırlar
Ctrl + RKomut geçmişinde geriye doğru arama
Ctrl + CÇalışan komutu durdur
Ctrl + LEkranı temizle
Ctrl + A / ESatır başına / sonuna git
!!Son komutu tekrarla (sudo !! çok kullanışlı)
history | grep tarGeçmişte kullandığınız komutu bul
man komutKomutun kılavuz sayfası
komut --helpHızlı parametre listesi
alias ll='ls -lah'Kısaltma tanımla (~/.bashrc içine ekleyin)
Zaman kazandıran kabuk kısayolları

Sorun Giderirken İzlenecek Sıra#

  1. Servis çalışıyor mu?#

    sudo systemctl status servis-adiactive (running) görmüyorsanız buradan başlayın.

  2. Loglar ne diyor?#

    sudo journalctl -u servis-adi -n 100 ve uygulamanın kendi log dosyası. Hata mesajını tahmin etmeye çalışmayın, okuyun.

  3. Disk dolu mu?#

    df -h — dolu disk, birbiriyle alakasız görünen onlarca hatanın ortak sebebidir.

  4. Bellek yetiyor mu?#

    free -h ve dmesg | grep -i "out of memory". Çekirdek bir süreci öldürdüyse burada görünür.

  5. Port dinleniyor mu?#

    sudo ss -tlnp | grep PORT — servis ayakta ama port dinlenmiyorsa yapılandırma hatası vardır.

  6. İzinler doğru mu?#

    ls -l ve stat. “Permission denied” hataları neredeyse her zaman sahiplik sorunudur.

Bu adımları otomatikleştirmek ve sorunları kullanıcılardan önce fark etmek isterseniz sunucu izleme rehberine geçin. Yeni bir sunucuda temel yapılandırmayı tamamlamak için VDS ilk ayarlar ve Ubuntu Server kurulumu sayfalarına bakabilirsiniz.

Özetle#

Sunucu yönetiminde ustalık, uzun komut listeleri ezberlemekten değil birkaç komutu iyi bilmekten geçer. systemctl status, journalctl, df -h, free -h, ss -tlnp ve htop — bu altı komut, karşılaşacağınız sorunların büyük bölümünü teşhis etmenize yeter.

Üç alışkanlık edinin: yapılandırma dosyasını düzenlemeden önce kopyasını alın, rm -rf yazmadan önce aynı yolu ls ile listeleyin ve bir komutun ne yaptığından emin değilseniz önce man sayfasına bakın. Bu üçü, sunucu yönetiminde yaşanan kazaların çoğunu önler.

Sıkça Sorulan Sorular#

Sunucu yönetmek için kaç Linux komutu bilmek gerekir?

Günlük sunucu yönetiminin yüzde doksanı yaklaşık 30 komutla yapılır: ls, cd, cp, mv, rm, nano, cat, grep, find, chmod, chown, tar, wget, systemctl, journalctl, ps, top, df, du, ss ve birkaç tanesi daha. Gerisi ihtiyaç oldukça öğrenilir.

chmod 755 ve 644 ne anlama geliyor?

Üç rakam sırasıyla sahip, grup ve diğerleri için izinleri belirtir. Her rakam okuma (4), yazma (2) ve çalıştırma (1) değerlerinin toplamıdır. 755 = sahip okur, yazar, çalıştırır; grup ve diğerleri okur ve çalıştırır. 644 = sahip okur ve yazar, diğerleri yalnızca okur. Klasörlerde 755, normal dosyalarda 644 standarttır.

sudo ile su arasındaki fark nedir?

sudo, tek bir komutu geçici olarak yönetici yetkisiyle çalıştırır ve kendi parolanızı ister. su ise tamamen root kullanıcısına geçer ve root parolasını ister. Güvenlik açısından sudo tercih edilir: her işlem loglanır, yetki kalıcı olmaz ve yanlışlıkla yıkıcı bir komut çalıştırma riski azalır.

nano ile açtığım dosyayı nasıl kaydederim?

Ctrl+O tuş kombinasyonuyla kaydedin, dosya adını onaylamak için Enter’a basın, ardından Ctrl+X ile çıkın. Ekranın altındaki menüde ^ işareti Ctrl tuşunu simgeler. Kaydetmeden çıkmak isterseniz Ctrl+X’e bastığınızda soruya n yanıtı verin.

Disk doldu, hangi klasörün şişirdiğini nasıl bulurum?

df -h ile hangi bölümün dolduğunu görün, sonra du -h --max-depth=1 / komutunu çalıştırıp en büyük klasöre inin. Aynı komutu her seviyede tekrarlayarak kaynağı bulursunuz. Genellikle suçlu /var/log altındaki büyümüş log dosyaları ya da eski yedeklerdir.

Bir servisin çalışıp çalışmadığını nasıl kontrol ederim?

sudo systemctl status servis-adi komutu servisin durumunu, ne zamandır çalıştığını, süreç kimliğini ve son log satırlarını gösterir. Active: active (running) satırı çalıştığını, failed ise hata verdiğini söyler. Ayrıntılı log için journalctl -u servis-adi -n 100 kullanın.

Yanlışlıkla sildiğim dosyayı geri alabilir miyim?

Pratikte hayır. Linux komut satırında silinen dosya çöp kutusuna gitmez, dosya sistemi kaydından kaldırılır. Kurtarma araçları bazen işe yarar ama üzerine yazılmışsa şansınız kalmaz. Bu yüzden tek gerçek çözüm yedektir; planlamayı yedekleme stratejileri sayfasında anlattık.

Altyapı ve Sistem Yönetimi — Tüm Rehberler#

  1. DDoS Saldırısı Nedir ve Nasıl Korunulur?
  2. Veri Merkezi (Data Center) Nedir?
  3. Sunucu Kiralarken Nelere Dikkat Edilmeli?
  4. Discord Bot Hosting ve 7/24 Çalıştırma
  5. Sunucu Yedekleme Stratejileri ve 3-2-1 Kuralı
  6. Sunucu Yönetimi İçin Linux Temel Komutları
  7. Sunucu İzleme ve Monitoring Rehberi

Bu rehber Batihost teknik ekibi tarafından hazırlanmış ve tarihinde güncellenmiştir. Eksik veya hatalı bulduğunuz bir bilgi varsa bize bildirin.

Başa dön