Yıllarca Linux terminalinde çalışmış biri olarak şunu söyleyeyim: Windows Komut İstemi’ni küçümsemek büyük hata. CMD, onlarca yıllık geçmişiyle hala sistem yöneticilerinin en hızlı silahlarından biri. Özellikle PowerShell’in olmadığı eski sunucularda, ya da hızlıca bir şeyler yapmak gerektiğinde CMD’yi açıp birkaç komut yazmak bazen en pratik çözüm oluyor. Bu yazıda CMD’yi sıfırdan ele alacağız, hem temel hem de gerçek dünya senaryolarında nasıl kullanacağınızı göstereceğiz.
CMD Nedir ve Neden Hala Kullanıyoruz
Komut İstemi (Command Prompt), kısaca CMD, Windows işletim sisteminin metin tabanlı kullanıcı arayüzüdür. cmd.exe olarak çalışan bu uygulama, Windows NT 3.1’den bu yana sistemde bulunuyor. Tarihsel olarak DOS komutlarından miras aldığı için bazı sözdizimleri biraz tuhaf gelebilir, ama pratikte inanılmaz derecede hızlı ve güvenilirdir.
Peki PowerShell varken neden CMD öğrenelim? Birkaç temel neden var:
- Eski sistemler: Windows Server 2003, 2008 gibi sistemlerde PowerShell kısıtlı ya da hiç yok
- Hız: Basit görevler için CMD açmak PowerShell’den çok daha hızlı
- Betik uyumluluğu: Yıllardır çalışan .bat dosyaları hala CMD kullanıyor
- Minimal ortamlar: WinPE, kurtarma modu gibi ortamlarda genellikle sadece CMD var
- Alışkanlık: Bazı komutlar (ipconfig, ping, netstat) hala CMD’de daha hızlı çalışıyor
CMD’yi Açmanın Yolları
Günlük hayatta CMD’yi farklı şekillerde açarsınız ve hangi yöntemi seçtiğiniz önemlidir.
Normal kullanıcı olarak açmak:
Win + Rtuşlarına basın,cmdyazın ve Enter’a basın- Görev çubuğu arama kutusuna “cmd” yazın
- Dosya Gezgini adres çubuğuna
cmdyazıp Enter’a basın (o dizinde açılır, süper pratik!)
Yönetici olarak açmak (çoğu sunucu işi için şart):
Win + Xmenüsünden “Komut İstemi (Yönetici)” seçin- Başlat menüsünde cmd’ye sağ tıklayıp “Yönetici olarak çalıştır” deyin
Belirli bir dizinde açmak: Dosya Gezgini’nde istediğiniz klasöre gidin, adres çubuğuna tıklayıp cmd yazın. O klasörde açılır. Bu küçük numarayı öğrendikten sonra hayat çok kolaylaşır.
Temel Navigasyon Komutları
CMD’de ilk yapmanız gereken şey dizinler arasında dolaşmayı öğrenmek.
:: Mevcut dizini göster
cd
:: Başka bir dizine geç
cd C:WindowsSystem32
:: Bir üst dizine çık
cd ..
:: İki üst dizine çık
cd ....
:: D sürücüsüne geç (sadece cd yazmak yetmez!)
D:
:: Dizin içeriğini listele
dir
:: Gizli dosyaları da göster
dir /a
:: Sadece dizinleri listele
dir /ad
:: Boyuta göre sıralı listele
dir /o:s
dir komutu Linux’taki ls gibi çalışır ama daha ayrıntılı çıktı verir. Özellikle /a parametresi ile gizli sistem dosyalarını görebilirsiniz ki bu troubleshooting sırasında çok işe yarar.
Dosya ve Dizin Yönetimi
Sunucu yönetiminde dosyalarla uğraşmak günlük rutinin büyük parçası. CMD ile bunları oldukça hızlı halledebilirsiniz.
:: Yeni dizin oluştur
mkdir C:LogsBackup
:: İç içe dizin oluştur (md kısayolu da çalışır)
md C:TestAlt1Alt2Alt3
:: Dizin sil (boş olmalı)
rmdir C:Test
:: Dizini içindekilerle birlikte sil
rmdir /s /q C:Test
:: Dosya kopyala
copy kaynak.txt hedef.txt
:: Birden fazla dosyayı kopyala
copy C:Logs*.log D:Backup
:: Dizin kopyala (robocopy daha iyi ama basit işler için)
xcopy C:Kaynak D:Hedef /e /i
:: Dosya taşı
move dosya.txt C:Hedef
:: Dosya sil
del dosya.txt
:: Uzantıya göre toplu sil
del C:Logs*.tmp
Burada dikkat edilmesi gereken nokta: del komutu geri alınamaz! Dosya çöp kutusuna gitmiyor, direkt siliniyor. Özellikle wildcard kullanırken iki kez düşünün.
Robocopy: Ciddi İşler İçin Gerçek Çözüm
Sunucu ortamında dosya kopyalama işleri için xcopy yetersiz kalır. robocopy kullanın:
:: Temel robocopy kullanımı
robocopy C:Kaynak D:Hedef /e /log:C:Logskopya.log
:: Mirror mod (hedefi kaynakla birebir eşitle, dikkatli kullanın!)
robocopy C:Kaynak D:Hedef /mir /log:C:Logsmirror.log
:: Sadece değişen dosyaları kopyala, 3 deneme yap
robocopy C:Web D:BackupWeb /e /r:3 /w:5
:: Bant genişliği sınırla (büyük transferler için)
robocopy C:Buyuk D:Hedef /e /ipg:100
Robocopy’nin /log parametresi özellikle önemli. Backup scriptlerinde her zaman log tutun, bir şeyler ters gittiğinde ne olduğunu bilmek istersiniz.
Ağ Komutları: Günlük Troubleshooting Silahları
Ağ sorunlarını çözmek sysadmin işinin önemli parçası. CMD bu konuda oldukça güçlü.
:: Ağ yapılandırmasını göster
ipconfig
:: Detaylı bilgi (DNS, DHCP vs.)
ipconfig /all
:: DNS önbelleğini temizle (en çok kullanılanlardan!)
ipconfig /flushdns
:: IP yenile
ipconfig /release
ipconfig /renew
:: Ping at
ping google.com
:: Sürekli ping (Ctrl+C ile dur)
ping -t 192.168.1.1
:: Belirli sayıda ping
ping -n 10 192.168.1.1
:: Rota izle
tracert google.com
:: DNS sorgusu
nslookup google.com
:: Belirli DNS sunucusuna sor
nslookup google.com 8.8.8.8
Netstat ile Bağlantı Analizi
Sunucuda hangi portların açık olduğunu, hangi bağlantıların aktif olduğunu görmek için:
:: Tüm aktif bağlantıları göster
netstat -an
:: Hangi process hangi portu kullanıyor
netstat -ano
:: Belirli bir portu kim kullanıyor (1433 SQL Server portu örneği)
netstat -ano | findstr :1433
:: Sonra bu PID'in hangi uygulama olduğunu bul
tasklist | findstr 1234
Bu kombinasyon altın değerinde. “1433 portu neden dinleniyor?” diye sorarken iki komutla cevabı bulursunuz.
Servis Yönetimi
Windows servislerini CMD üzerinden yönetmek bazen GUI’den çok daha hızlı.
:: Tüm servisleri listele
sc query
:: Belirli servisin durumu
sc query "Spooler"
:: Servisi başlat
net start "Print Spooler"
:: Servisi durdur
net stop "Print Spooler"
:: Servisi yeniden başlat (önce dur, sonra başlat)
net stop "Print Spooler" && net start "Print Spooler"
:: Servis başlangıç tipini değiştir
sc config "Spooler" start= auto
:: Servis sil (dikkatli!)
sc delete "ServisAdi"
sc ve net komutları arasındaki fark: net start/stop daha kullanıcı dostu ama sc çok daha fazla özellik sunuyor. Servis oluşturma, silme, yapılandırma için sc tercih edin.
Kullanıcı ve Grup Yönetimi
Sunucularda kullanıcı yönetimi sıkça yapılan işlerden biri:
:: Yerel kullanıcıları listele
net user
:: Kullanıcı detayları
net user ahmet
:: Yeni kullanıcı oluştur
net user ahmet P@ssw0rd123 /add
:: Kullanıcı şifresi değiştir
net user ahmet YeniSifre123
:: Kullanıcıyı gruba ekle
net localgroup Administrators ahmet /add
:: Kullanıcıyı devre dışı bırak
net user ahmet /active:no
:: Kullanıcıyı sil
net user ahmet /delete
:: Yerel grupları listele
net localgroup
:: Grup üyelerini göster
net localgroup Administrators
Sistem Bilgisi ve Performans Komutları
Sunucunun durumunu hızlıca anlamak için:
:: Sistem bilgisi (detaylı)
systeminfo
:: Sadece hostname
hostname
:: Çalışan processleri listele
tasklist
:: Belirli bir processi bul
tasklist | findstr chrome
:: Process sonlandır (PID ile)
taskkill /pid 1234
:: Process sonlandır (zorla)
taskkill /pid 1234 /f
:: Process sonlandır (adıyla)
taskkill /im notepad.exe /f
:: Disk kullanımı
wmic logicaldisk get size,freespace,caption
:: Fiziksel bellek bilgisi
wmic memorychip get capacity,speed
systeminfo komutu özellikle değerli. Kurulu hotfixleri, RAM miktarını, işletim sistemi versiyonunu, domain bilgisini tek bir komutla görebilirsiniz. Yeni bir sunucuya bağlandığınızda ilk çalıştırmanız gereken komutlardan biri bu.
Olay Günlükleri ve Troubleshooting
Sistem sorunlarını CMD üzerinden araştırırken:
:: Event log sorgula (son 10 hata)
wevtutil qe System /c:10 /rd:true /f:text /q:"*[System[(Level=2)]]"
:: Application log hatalarını göster
wevtutil qe Application /c:20 /rd:true /f:text /q:"*[System[(Level=2)]]"
:: Sistem dosyası denetimi (bozuk dosyaları onar)
sfc /scannow
:: Disk hatalarını kontrol et
chkdsk C: /f /r
:: Windows Update sorunları için
dism /online /cleanup-image /restorehealth
sfc /scannow komutu özellikle önemli. Sistem dosyalarında bozulma olduğunu düşündüğünüzde, garip hatalar alındığında ilk çalıştırmanız gereken komutlardan biri. Yönetici olarak çalıştırmanız gerekiyor, bunu unutmayın.
Batch Scripting: CMD’nin Gerçek Gücü
CMD’yi sadece tek komutlar için kullanmak israf. Asıl güç batch scriptlerde ortaya çıkıyor.
@echo off
:: Basit yedekleme scripti
:: Tarih ve saati dosya adına ekle
set TARIH=%date:~-4,4%%date:~-7,2%%date:~0,2%
set SAAT=%time:~0,2%%time:~3,2%
set YEDEK_ADI=backup_%TARIH%_%SAAT%
echo Yedekleme basliyor: %TARIH% %SAAT%
robocopy C:WebSitesi D:Backup%YEDEK_ADI% /e /log:D:Logs%YEDEK_ADI%.log
if %errorlevel% equ 0 (
echo Yedekleme basarili!
) else if %errorlevel% leq 3 (
echo Yedekleme tamamlandi, bazi dosyalar atlandi.
) else (
echo HATA: Yedekleme basarisiz! Hata kodu: %errorlevel%
)
echo Tamamlandi.
Bu script sunucularda günlük yedekleme işleri için kullanılabilir. @echo off ile komutların ekranda gösterilmesini engelliyoruz, errorlevel ile robocopy’nin başarılı olup olmadığını kontrol ediyoruz.
Döngü ve Koşul Örnekleri
@echo off
:: Belirli bir dizindeki tüm log dosyalarını arşivle
for %%f in (C:Logs*.log) do (
echo Isleniyor: %%f
move "%%f" "D:Arsiv"
)
echo Tum log dosyalari arsivlendi.
pause
for döngüsü batch scriptlerde çok kullanılır. %%f değişken adı, komut satırında tek %f olurdu ama script içinde çift %% gerekiyor. Bu sizi ilk seferinde kesinlikle şaşırtır.
Findstr ile Metin Arama
Linux’ta grep ne ise CMD’de findstr odur:
:: Basit arama
findstr "hata" C:Logsuygulama.log
:: Büyük/küçük harf duyarsız arama
findstr /i "error" C:Logsuygulama.log
:: Birden fazla dosyada ara
findstr /i "failed" C:Logs*.log
:: Regex ile ara
findstr /r "192.168.[0-9]*.[0-9]*" C:Logsfirewall.log
:: Satır numaralarıyla göster
findstr /n "error" C:Logsapp.log
:: Arama sonucunu içermeyen satırları göster
findstr /v "DEBUG" C:Logsapp.log
Günlük işlerde özellikle log dosyalarında hata aramak için findstr /i "error" *.log kombinasyonunu çok kullanacaksınız.
Pipe ve Yönlendirme Operatörleri
CMD’de komutları birleştirmek işleri çok hızlandırır:
- | (pipe): Bir komutun çıktısını diğerine gönderir
- > : Çıktıyı dosyaya yazar (üzerine yazar)
- >> : Çıktıyı dosyaya ekler (sonuna ekler)
- && : İlk komut başarılıysa ikincisini çalıştır
- || : İlk komut başarısızsa ikincisini çalıştır
- 2> : Hata mesajlarını dosyaya yaz
:: Servis listesini dosyaya kaydet
sc query > C:servisler.txt
:: Çalışan processleri ara ve kaydet
tasklist | findstr "sql" > C:sql_processes.txt
:: Hata çıktısını da yakala
dir C:olmayan_dizin > C:sonuc.txt 2>&1
:: Ard arda komut çalıştır
net stop "Spooler" && net start "Spooler"
:: Sistem bilgisini dosyaya kaydet (tarihe göre)
systeminfo >> C:Logssistem_durum.txt
Gerçek Dünya Senaryosu: Sunucu Troubleshooting Checklist
Yeni bir sunucuya bağlandığınızda ya da sorun var diye çağrıldığınızda çalıştırabileceğiniz hızlı kontrol listesi:
@echo off
echo === SUNUCU DURUM RAPORU ===
echo Tarih: %date% Saat: %time%
echo.
echo --- SISTEM BILGISI ---
systeminfo | findstr /i "host name|os version|total physical|available physical|domain"
echo.
echo --- AG YAPILANDIRMASI ---
ipconfig /all | findstr /i "ip address|subnet|gateway|dns"
echo.
echo --- AKTIF BAGLANTILAR ---
netstat -an | findstr "ESTABLISHED"
echo.
echo --- YUKSEK CPU KULLANAN PROCESSLER ---
wmic process get caption,processid,workingsetsize /format:list | findstr /v "^$"
echo.
echo --- DISK KULLANIMI ---
wmic logicaldisk get caption,size,freespace
echo.
echo Rapor tamamlandi.
Bu scripti sunucu_kontrol.bat olarak kaydedin ve sorunlu sunucularda ilk anda çalıştırın. Durumu hızlıca kavramanızı sağlar.
CMD’de İşinizi Kolaylaştıracak İpuçları
Günlük kullanımda verimliliği artıracak birkaç şey:
- Tab tuşu: Dizin ve dosya isimlerini otomatik tamamlar, mutlaka kullanın
- F7 tuşu: Komut geçmişini popup olarak gösterir
- Yukarı/Aşağı ok: Önceki komutlara döner
- Ctrl+C: Çalışan komutu durdurur
- cls: Ekranı temizler
- dosya_adi.bat yazıp çalıştırmak yerine sadece
dosya_adiyazabilirsiniz cmd /k komutile CMD’yi açıp komutu çalıştırın ama pencereyi açık tutuncmd /c komutile komutu çalıştırıp CMD’yi kapatın
Ayrıca çok kullanılan dizinler için doskey ile alias oluşturabilirsiniz:
:: Geçici alias oluştur (sadece bu oturum için)
doskey ll=dir /a
doskey logs=cd C:WindowsSystem32winevtLogs
Kalıcı alias için bunları bir bat dosyasına koyup başlangıçta otomatik yükletebilirsiniz.
Sonuç
CMD, görünüşte basit ama derinliği olan bir araç. PowerShell’in her şeyi çözdüğü düşünülse de gerçek hayatta CMD bilgisi kaçınılmaz. Özellikle kurtarma senaryolarında, eski sistemlerde ve batch scripting ihtiyaçlarında CMD’nin yerini hiçbir şey tutmuyor.
Bu yazıda ele aldığımız komutlar günlük sysadmin hayatının büyük kısmını kapsıyor. Ağ troubleshooting’den servis yönetimine, dosya işlemlerinden performans analizine kadar CMD ile gerçekten çok şey yapabilirsiniz. Önemli olan alışkanlık kazanmak; her gün birkaç komutu kullanmaya başlarsanız zamanla GUI’ye hiç ihtiyaç duymadığınız anlar olacak.
Son bir tavsiye: Öğrendiğiniz komutları bir metin dosyasında tutun, kendi “cheat sheet”inizi oluşturun. İleride yeni bir komut öğrendiğinizde oraya ekleyin. Birkaç ay sonra baktığınızda ne kadar yol kat ettiğinizi görmek hem motive edici hem de işe yarar bir referans oluyor.