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.
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
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 + O | Kaydet (sonra Enter ile onayla) |
| Ctrl + X | Çık |
| Ctrl + W | Metin ara |
| Ctrl + K | Satırı kes |
| Ctrl + U | Kesilen satırı yapıştır |
| Alt + U | Geri al |
| Ctrl + _ | Belirli satır numarasına git |
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ğer | Anlamı | Tipik kullanım |
|---|---|---|
755 | rwxr-xr-x | Klasörler ve çalıştırılabilir betikler |
644 | rw-r--r-- | Normal dosyalar, web içeriği |
640 | rw-r----- | Parola içeren yapılandırma dosyaları |
600 | rw------- | SSH özel anahtarı, .env |
700 | rwx------ | Yalnızca sahibinin gireceği klasör |
777 | rwxrwxrwx | Asla kullanmayın |
# İ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
apt 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
df 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 |
|---|---|
| Tab | Dosya adı ve komut tamamlama — yazım hatasını sıfırlar |
| Ctrl + R | Komut geçmişinde geriye doğru arama |
| Ctrl + C | Çalışan komutu durdur |
| Ctrl + L | Ekranı temizle |
| Ctrl + A / E | Satır başına / sonuna git |
!! | Son komutu tekrarla (sudo !! çok kullanışlı) |
history | grep tar | Geçmişte kullandığınız komutu bul |
man komut | Komutun kılavuz sayfası |
komut --help | Hızlı parametre listesi |
alias ll='ls -lah' | Kısaltma tanımla (~/.bashrc içine ekleyin) |
Sorun Giderirken İzlenecek Sıra#
-
Servis çalışıyor mu?#
sudo systemctl status servis-adi—active (running)görmüyorsanız buradan başlayın. -
Loglar ne diyor?#
sudo journalctl -u servis-adi -n 100ve uygulamanın kendi log dosyası. Hata mesajını tahmin etmeye çalışmayın, okuyun. -
Disk dolu mu?#
df -h— dolu disk, birbiriyle alakasız görünen onlarca hatanın ortak sebebidir. -
Bellek yetiyor mu?#
free -hvedmesg | grep -i "out of memory". Çekirdek bir süreci öldürdüyse burada görünür. -
Port dinleniyor mu?#
sudo ss -tlnp | grep PORT— servis ayakta ama port dinlenmiyorsa yapılandırma hatası vardır. -
İzinler doğru mu?#
ls -lvestat. “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.