Windows Komut Satırı kullanımı

CMD ve PowerShell Kullanımı: Sıfırdan İleri Seviyeye Windows Komut Satırı Rehberi

Giriş

Windows kullanan birçok kişi işletim sistemini yalnızca grafiksel arayüz üzerinden yönetir. Dosya oluşturmak için sağ tıklar, klasörler arasında Dosya Gezgini ile dolaşır, çalışan programları Görev Yöneticisi üzerinden inceler ve ağ ayarlarını menülerden kontrol eder.

Ancak Windows'un arkasında güçlü komut satırı araçları bulunur.

Bunların en önemlileri:

- CMD, yani Command Prompt
- PowerShell

araçlarıdır.

CMD daha eski ve geleneksel bir komut yorumlayıcısıdır. Dosya sistemi işlemleri, temel ağ kontrolleri, sistem bilgisi toplama ve batch script yazımı gibi görevlerde kullanılabilir.

PowerShell ise daha gelişmiş bir otomasyon ve sistem yönetimi platformudur. CMD'nin metin tabanlı yaklaşımından farklı olarak büyük ölçüde nesne tabanlı bir pipeline sistemi kullanır.

Bu eğitimde şu konuları ele alacağız:

- CMD temel kullanımı
- Dosya ve klasör işlemleri
- Ağ komutları
- Process ve servis yönetimi
- Ortam değişkenleri
- Batch scripting
- PowerShell temelleri
- Cmdlet mantığı
- Object pipeline
- Dosya işlemleri
- Process ve servis analizi
- Ağ bağlantılarının incelenmesi
- JSON ve CSV işlemleri
- Fonksiyonlar
- Hata yönetimi
- Script yazımı
- CMD ve PowerShell arasındaki temel farklar
- Sistem yönetimi ve güvenlik analizinde kullanım

Amaç yalnızca komut ezberlemek değildir.

Asıl amaç Windows sistemini terminal üzerinden anlamayı ve yönetmeyi öğrenmektir.

---

1. CMD Nedir?

CMD, Windows işletim sisteminin geleneksel komut satırı yorumlayıcısıdır.

Kullanıcı tarafından yazılan komutları yorumlar ve işletim sistemindeki ilgili programları veya dahili komutları çalıştırır.

CMD açmak için Başlat menüsünde:

cmd

aranabilir.

Açılan terminal genellikle şu yapıda bir prompt gösterir:

C:\Users\User>

Bu satır mevcut çalışma dizinini gösterir.

Burada:

C:

aktif sürücüyü,

\Users\User

ise mevcut klasör yolunu gösterir.

---

2. İlk CMD Komutları

İlk öğrenilmesi gereken komutlardan biri:

echo Hello World

Çıktı:

Hello World

"echo", terminale metin yazdırmak için kullanılabilir.

Ekranı temizlemek için:

cls

CMD sürüm bilgisi için:

ver

Yardım sistemini görmek için:

help

Belirli bir komut hakkında yardım almak için:

dir /?

veya:

copy /?

kullanılabilir.

Komut satırında yardım sistemini kullanmayı öğrenmek önemlidir. Her parametreyi ezberlemek yerine gerektiğinde komutun kendi dokümantasyonuna bakmak daha sürdürülebilir bir yöntemdir.

---

3. Mevcut Dizini Öğrenmek

CMD içerisinde mevcut çalışma dizinini görmek için:

cd

kullanılabilir.

Örnek:

C:\Users\User

"cd", Change Directory anlamına gelir.

Başka bir klasöre geçmek için:

cd Documents

Bir üst klasöre çıkmak için:

cd ..

Doğrudan belirli bir yola gitmek için:

cd /d C:\Windows\System32

Buradaki "/d" parametresi gerektiğinde sürücüyü de değiştirir.

Örneğin mevcut konum C sürücüsündeyken:

cd /d D:\Projects

komutu hem D sürücüsüne geçer hem de Projects klasörünü çalışma dizini yapar.

---

4. Klasör İçeriğini Listelemek

CMD içerisinde dosya ve klasörleri listelemek için:

dir

kullanılır.

Sadece belirli uzantıya sahip dosyaları görmek için:

dir *.txt

Alt klasörler dahil aramak için:

dir *.log /s

Daha sade çıktı için:

dir /b

Buradaki "/b", bare format anlamına gelir.

Örneğin:

notes.txt
report.pdf
Projects
Scripts

gibi sade bir liste oluşturur.

---

5. Klasör Oluşturma ve Silme

Yeni klasör oluşturmak için:

mkdir Project

veya kısa biçimiyle:

md Project

kullanılabilir.

Birden fazla iç içe klasör oluşturmak için:

mkdir Project\src\modules

Boş klasör silmek için:

rmdir Project

veya:

rd Project

kullanılabilir.

Alt klasörleri ve içeriğiyle birlikte silme seçenekleri geri döndürülemez veri kaybına yol açabileceğinden dikkatle kullanılmalıdır. Özellikle yönetici terminalinde çalışırken mevcut dizin ve hedef yol mutlaka kontrol edilmelidir.

---

6. Dosya Oluşturma

Basit bir metin dosyası oluşturmak için output redirection kullanılabilir.

echo Hello World > hello.txt

Bu komut "hello.txt" dosyasını oluşturur ve içine:

Hello World

yazar.

Dosyanın sonuna yeni veri eklemek için:

echo Second Line >> hello.txt

Buradaki fark önemlidir.

>

çıktıyı dosyaya yönlendirir ve mevcut içeriğin üzerine yazabilir.

>>

ise çıktıyı dosyanın sonuna ekler.

---

7. Dosya İçeriğini Görmek

Bir metin dosyasının içeriğini görüntülemek için:

type hello.txt

kullanılabilir.

Uzun çıktıları sayfa sayfa görüntülemek için:

type large_file.txt | more

kullanılabilir.

Buradaki "|" karakteri pipe olarak adlandırılır.

Bir komutun çıktısını başka bir komutun girdisine aktarır.

Temel mantık:

Komut A
|
v
Çıktı
|
v
Komut B

Örnek:

dir | more

Bu komut uzun dizin listesini sayfalar halinde görüntüler.

---

8. Dosya Kopyalama

Dosya kopyalamak için:

copy source.txt backup.txt

Başka bir klasöre kopyalamak için:

copy report.txt C:\Backup\

Dizin yapıları ve daha gelişmiş kopyalama işlemleri için "robocopy" kullanılabilir.

Örneğin bir kaynak klasörü başka bir klasöre kopyalamak için temel kullanım:

robocopy C:\Source D:\Backup

"robocopy", büyük veri kopyalama ve yedekleme senaryolarında klasik "copy" komutundan daha gelişmiş seçenekler sunar.

---

9. Dosya Taşıma ve Yeniden Adlandırma

Dosya taşımak için:

move report.txt C:\Archive\

Dosyanın adını değiştirmek için:

ren old_name.txt new_name.txt

veya:

rename old_name.txt new_name.txt

kullanılabilir.

---

10. Dosya Arama

CMD ile dosya adına göre arama yapılabilir.

Örneğin:

dir C:\Users\*.txt /s /b

Bu komut belirtilen başlangıç dizininin altında ".txt" uzantılı dosyaları recursive olarak listeler.

Burada:

/s

alt dizinleri dahil eder.

/b

sade çıktı verir.

Dosya içeriğinde metin aramak için:

findstr "error" application.log

Case-insensitive arama:

findstr /i "error" application.log

Birden fazla dosyada arama:

findstr /i "failed" *.log

"findstr", log inceleme ve basit metin filtreleme işlemlerinde yararlı olabilir.

---

11. Sistem Bilgilerini Görmek

Windows sistem bilgilerini görüntülemek için:

systeminfo

kullanılabilir.

Bu komut işletim sistemi sürümü, sistem mimarisi ve çeşitli sistem bilgilerini gösterir.

Bilgisayar adını görmek için:

hostname

Mevcut kullanıcıyı görmek için:

whoami

Daha ayrıntılı kullanıcı ve grup bilgileri için:

whoami /all

kullanılabilir.

Bu komut özellikle yetki ve grup üyeliği analizi sırasında faydalıdır.

---

12. Ortam Değişkenleri

CMD içerisinde ortam değişkenleri yüzde işaretleri arasında kullanılır.

Örneğin:

echo %USERNAME%

Kullanıcının ana profil dizini:

echo %USERPROFILE%

Geçici dosya klasörü:

echo %TEMP%

Sistem dizini:

echo %WINDIR%

Tüm ortam değişkenlerini görmek için:

set

kullanılabilir.

Geçici bir değişken oluşturmak için:

set NAME=Ali

Ardından:

echo %NAME%

yazılabilir.

---

13. Process Listeleme

CMD içerisinde çalışan süreçleri görmek için:

tasklist

kullanılır.

Belirli bir süreç adına göre filtreleme:

tasklist /fi "imagename eq notepad.exe"

Belirli bir PID hakkında bilgi aramak için:

tasklist /fi "pid eq 1234"

Buradaki PID değeri örnektir.

Bir süreç hakkında karar verirken yalnızca process adına güvenilmemelidir. Aynı dosya adı farklı konumlarda bulunabilir.

---

14. Ağ Yapılandırmasını Görmek

Ağ bilgileri için en temel komutlardan biri:

ipconfig

Daha ayrıntılı bilgi için:

ipconfig /all

Bu çıktı üzerinden şu bilgiler görülebilir:

- IPv4 adresi
- IPv6 adresi
- Subnet mask
- Default gateway
- DNS server
- DHCP bilgileri
- Ağ adaptörleri

DNS cache görüntülemek için:

ipconfig /displaydns

DNS cache temizlemek için:

ipconfig /flushdns

kullanılabilir.

---

15. Ping Kullanımı

Bir sistemle temel IP bağlantısını test etmek için:

ping example.com

kullanılabilir.

Loopback testi:

ping 127.0.0.1

Belirli sayıda istek göndermek için:

ping -n 4 example.com

Ping sonucunda genellikle:

- Gecikme süresi
- Paket kaybı
- Yanıt durumu

gibi bilgiler görülür.

Ancak bir sistemin ping isteğine cevap vermemesi, sistemin tamamen çevrimdışı olduğunu kesin olarak göstermez. ICMP trafiği güvenlik duvarı tarafından engellenebilir.

---

16. Tracert Kullanımı

Bir hedefe giden ağ yolunu incelemek için:

tracert example.com

kullanılabilir.

Çıktı yaklaşık olarak:

1 Local Gateway
2 ISP Router
3 Transit Router
4 Destination Network

şeklinde düşünülebilir.

Gerçek ağlarda bazı hop noktaları yanıt vermeyebilir. Bu her zaman bağlantı sorunu olduğu anlamına gelmez.

---

17. DNS Sorguları

DNS çözümlemesini incelemek için:

nslookup example.com

kullanılabilir.

Belirli bir DNS sunucusuna sorgu göndermek için:

nslookup example.com 1.1.1.1

Bu tür sorgular DNS sorunlarını teşhis etmek için kullanılabilir.

---

18. Netstat Kullanımı

Aktif ağ bağlantılarını incelemek için:

netstat -ano

kullanılabilir.

Burada:

-a

aktif bağlantıları ve dinleme portlarını gösterir.

-n

adresleri ve portları sayısal biçimde gösterir.

-o

PID bilgisini gösterir.

Örnek:

TCP 192.0.2.10:51520 198.51.100.20:443 ESTABLISHED 4820

Bu çıktıdan PID alınarak:

tasklist /fi "pid eq 4820"

ile bağlantıyı oluşturan süreç araştırılabilir.

Bu, temel sistem analizi için oldukça faydalı bir yöntemdir.

---

19. CMD Pipe ve Filtreleme

CMD'de pipe kullanarak komutlar birleştirilebilir.

Örneğin:

tasklist | findstr /i "python"

Bu komut process listesindeki "python" kelimesini içeren satırları filtreler.

Ağ çıktısında belirli bir durumu aramak için:

netstat -ano | findstr "ESTABLISHED"

kullanılabilir.

Bu yaklaşım basit metin işleme mantığına dayanır.

CMD'nin önemli sınırlarından biri de burada ortaya çıkar: pipeline üzerinden çoğunlukla metin aktarılır.

PowerShell ise nesnelerle çalışabilir.

---

20. Batch Script Nedir?

CMD komutları ".bat" veya ".cmd" dosyaları içerisine yazılarak otomasyon yapılabilir.

Örnek:

@Echo off

echo System Information
hostname
whoami
ipconfig

pause

Buradaki:

@Echo off

komutların kendilerinin ekrana tekrar yazılmasını engeller.

"pause" ise script sonunda kullanıcıdan tuş bekler.

---

21. Batch Değişkenleri

Örnek:

@Echo off

set NAME=User

echo Hello %NAME%

pause

Kullanıcıdan veri almak için:

@Echo off

set /p NAME=Enter your name:

echo Hello %NAME%

pause

Bu şekilde basit interaktif scriptler hazırlanabilir.

---

22. Batch Koşulları

Basit "if" kullanımı:

@Echo off

set STATUS=active

if "%STATUS%"=="active" (
echo System is active
) else (
echo System is not active
)

Değişkenleri tırnak içinde karşılaştırmak, boş değerlerden kaynaklanabilecek bazı sözdizimi sorunlarını azaltabilir.

---

23. Batch Döngüleri

Basit örnek:

@Echo off

for %%F in (*.txt) do (
echo Found file: %%F
)

Bu script mevcut klasördeki ".txt" dosyalarını listeler.

Komut satırında doğrudan kullanıldığında "%F", batch dosyasında ise "%%F" biçimi kullanılır.

Bu ayrım başlangıçta sık karıştırılır.

---

24. PowerShell Nedir?

PowerShell, Windows sistem yönetimi ve otomasyon için geliştirilmiş güçlü bir shell ve scripting ortamıdır.

PowerShell'in CMD'den önemli farklarından biri nesne tabanlı çalışmasıdır.

CMD yaklaşımı çoğunlukla şöyledir:

Komut
|
v
Metin çıktısı
|
v
Metin filtresi

PowerShell yaklaşımı ise şöyledir:

Cmdlet
|
v
Object
|
v
Property Filtering
|
v
Another Object

Bu fark PowerShell'i özellikle otomasyon ve sistem yönetiminde güçlü hale getirir.

---

25. PowerShell Cmdlet Mantığı

PowerShell komutları genellikle:

Verb-Noun

formatındadır.

Örnek:

Get-Process

Get-Service

Get-ChildItem

Get-Content

Set-Location

Bu isimlendirme sistemi komutların daha tahmin edilebilir olmasını sağlar.

---

26. PowerShell Yardım Sistemi

Bir komut hakkında yardım almak için:

Get-Help Get-Process

Daha ayrıntılı yardım:

Get-Help Get-Process -Full

Örnekleri görmek için:

Get-Help Get-Process -Examples

Mevcut komutları araştırmak için:

Get-Command

Belirli kelimeyle arama:

Get-Command *Process*

PowerShell öğrenirken en önemli becerilerden biri komut keşfetmektir.

---

27. PowerShell ile Dizin İşlemleri

Mevcut konumu görmek için:

Get-Location

Klasör değiştirmek için:

Set-Location C:\Users

Kısa kullanım:

cd C:\Users

İçeriği listelemek için:

Get-ChildItem

Kısa kullanım:

ls

veya:

dir

PowerShell bazı tanıdık komut adlarını alias olarak destekler.

Ancak script yazarken okunabilirlik açısından gerçek cmdlet adlarını kullanmak çoğu zaman daha iyidir.

---

28. PowerShell ile Dosya Oluşturmak

Yeni dosya:

New-Item -Path ".\test.txt" -ItemType File

Yeni klasör:

New-Item -Path ".\Project" -ItemType Directory

Dosyaya içerik yazmak:

Set-Content -Path ".\test.txt" -Value "Hello World"

Dosyanın sonuna eklemek:

Add-Content -Path ".\test.txt" -Value "Second Line"

İçeriği okumak:

Get-Content ".\test.txt"

---

29. PowerShell Pipeline

PowerShell'in en güçlü özelliklerinden biri pipeline sistemidir.

Örnek:

Get-Process | Where-Object CPU -gt 10

Burada:

1. "Get-Process" process nesnelerini üretir.
2. Bu nesneler pipeline üzerinden aktarılır.
3. "Where-Object" CPU özelliğine göre filtreleme yapar.

Daha açık biçimde:

Get-Process |
Where-Object {
$_.CPU -gt 10
}

Buradaki:

$_

pipeline içerisindeki mevcut nesneyi temsil eder.

---

30. Nesnelerin Özelliklerini İncelemek

PowerShell'de bir komutun ürettiği nesneleri anlamak için:

Get-Process | Get-Member

kullanılabilir.

Bu komut nesnenin:

- Property
- Method
- Type

bilgilerini gösterir.

Örneğin bir process nesnesinde:

Id
ProcessName
CPU
WorkingSet
StartTime

gibi özellikler bulunabilir.

Bazı özelliklere erişim süreç durumuna veya yetkilere bağlı olarak hata üretebilir.

---

31. Select-Object Kullanımı

Belirli özellikleri seçmek için:

Get-Process |
Select-Object ProcessName, Id, CPU

İlk 10 sonucu almak için:

Get-Process |
Select-Object -First 10

En fazla bellek kullanan süreçleri görmek için:

Get-Process |
Sort-Object WorkingSet -Descending |
Select-Object -First 10 ProcessName, Id, WorkingSet

Bu komut zinciri PowerShell pipeline mantığının iyi bir örneğidir.

---

32. Where-Object ile Filtreleme

Örneğin çalışan servisleri görmek için:

Get-Service |
Where-Object Status -eq "Running"

Alternatif sözdizimi:

Get-Service |
Where-Object {
$_.Status -eq "Running"
}

Karşılaştırma operatörlerinden bazıları:

-eq eşittir
-ne eşit değildir
-gt büyüktür
-lt küçüktür
-ge büyük veya eşittir
-le küçük veya eşittir
-like wildcard karşılaştırması
-match regex karşılaştırması

Örnek:

Get-Process |
Where-Object {
$_.ProcessName -like "*chrome*"
}

---

33. PowerShell Değişkenleri

PowerShell değişkenleri "$" işaretiyle başlar.

$name = "User"

Yazdırmak için:

Write-Output $name

Sayı:

$count = 10

Array:

$ports = 80, 443, 8080

Eleman erişimi:

$ports[0]

Çıktı:

80

---

34. PowerShell Dizileri

Örnek:

$names = @(
"Ali"
"Ayse"
"Mehmet"
)

Döngü:

foreach ($name in $names) {
Write-Output "User: $name"
}

PowerShell collection işlemlerinde pipeline yaklaşımı da kullanılabilir.

$names | ForEach-Object {
Write-Output "User: $_"
}

---

35. Koşullar

Örnek:

$score = 75

if ($score -ge 80) {
Write-Output "High"
}
elseif ($score -ge 50) {
Write-Output "Medium"
}
else {
Write-Output "Low"
}

PowerShell karşılaştırmalarında klasik ">=" yerine "-ge" gibi operatörler kullanılır.

---

36. Döngüler

For döngüsü:

for ($i = 0; $i -lt 5; $i++) {
Write-Output $i
}

While:

$count = 0

while ($count -lt 5) {
Write-Output $count
$count++
}

Foreach:

$files = Get-ChildItem

foreach ($file in $files) {
Write-Output $file.Name
}

---

37. PowerShell Fonksiyonları

Basit fonksiyon:

function Get-Greeting {
param(
[string]$Name
)

Write-Output "Hello, $Name"
}

Kullanım:

Get-Greeting -Name "User"

Birden fazla parametre:

function Add-Numbers {
param(
[int]$A,
[int]$B
)

return $A + $B
}

Kullanım:

$result = Add-Numbers -A 10 -B 20

---

38. Process Analizi

Processleri görmek için:

Get-Process

Belirli process:

Get-Process -Name notepad

Belirli özellikleri göstermek:

Get-Process |
Select-Object ProcessName, Id, CPU, WorkingSet

CPU değerine göre sıralama:

Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10

Bu tür komutlar sistem performans analizi için kullanılabilir.

---

39. Servis Analizi

Tüm servisler:

Get-Service

Çalışan servisler:

Get-Service |
Where-Object Status -eq "Running"

Durdurulmuş servisler:

Get-Service |
Where-Object Status -eq "Stopped"

Bir servisin durumunu görmek için:

Get-Service -Name "Spooler"

Servis yönetimi sistem davranışını etkileyebileceği için değiştirme işlemlerinden önce servisin rolü anlaşılmalıdır.

---

40. Ağ Bağlantılarını İncelemek

Modern Windows sistemlerinde TCP bağlantılarını incelemek için:

Get-NetTCPConnection

Kurulmuş bağlantılar:

Get-NetTCPConnection |
Where-Object State -eq "Established"

Belirli bilgileri seçmek:

Get-NetTCPConnection |
Select-Object LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State,
OwningProcess

Bu çıktıdaki "OwningProcess" değeri PID bilgisidir.

---

41. Ağ Bağlantısını Process ile Eşleştirmek

Örnek:

$connections = Get-NetTCPConnection |
Where-Object State -eq "Established"

foreach ($connection in $connections) {

$process = Get-Process `
-Id $connection.OwningProcess `
-ErrorAction SilentlyContinue

[PSCustomObject]@{
ProcessName = $process.ProcessName
PID = $connection.OwningProcess
RemoteIP = $connection.RemoteAddress
RemotePort = $connection.RemotePort
}
}

Burada "[PSCustomObject]" kullanarak düzenli nesneler oluşturuyoruz.

Bu PowerShell'in en güçlü özelliklerinden biridir.

Metin üretmek yerine yapılandırılmış veri üretebiliriz.

---

42. PSCustomObject Kullanımı

Örnek:

$userInfo = [PSCustomObject]@{
Username = $env:USERNAME
Computer = $env:COMPUTERNAME
Time = Get-Date
}

Görüntülemek için:

$userInfo

Bu nesne daha sonra:

- CSV
- JSON
- Pipeline
- Raporlama

işlemlerinde kullanılabilir.

---

43. CSV Export

Process listesini CSV dosyasına aktarmak için:

Get-Process |
Select-Object ProcessName, Id, CPU |
Export-Csv `
-Path ".\processes.csv" `
-NoTypeInformation

Daha sonra tekrar okumak için:

$data = Import-Csv ".\processes.csv"

CSV formatı tablo tabanlı raporlama için kullanışlıdır.

---

44. JSON İşlemleri

Bir nesneyi JSON formatına çevirmek için:

$data = [PSCustomObject]@{
Computer = $env:COMPUTERNAME
User = $env:USERNAME
Time = Get-Date
}

Ardından:

$data | ConvertTo-Json

Dosyaya yazmak için:

$data |
ConvertTo-Json |
Set-Content ".\report.json"

JSON dosyasını okumak için:

$content = Get-Content ".\report.json" -Raw

Daha sonra:

$object = $content | ConvertFrom-Json

Bu yapı API ve otomasyon projelerinde sık kullanılır.

---

45. Dosya Hash Hesaplama

PowerShell ile bir dosyanın hash değerini hesaplamak için:

Get-FileHash ".\example.exe"

Varsayılan algoritma sistem sürümüne bağlı belgelenmiş davranışla kullanılmalıdır; algoritmayı açıkça belirtmek daha nettir:

Get-FileHash ".\example.exe" -Algorithm SHA256

Çıktı genellikle:

Algorithm
Hash
Path

özelliklerini içerir.

Sadece hash değeri:

(Get-FileHash ".\example.exe" -Algorithm SHA256).Hash

Bu komut dosya bütünlüğü kontrollerinde yararlı olabilir.

---

46. Recursive Dosya Arama

Belirli uzantıyı aramak için:

Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse `
-ErrorAction SilentlyContinue

Sonuçları filtrelemek için:

Get-ChildItem `
-Path "C:\Logs" `
-Filter "*.log" `
-Recurse |
Where-Object Length -gt 10MB

PowerShell dosya boyutu ifadelerini okunabilir biçimde kullanmayı destekler:

1KB
1MB
1GB

Örneğin:

$limit = 100MB

---

47. Select-String ile Log Analizi

Dosya içerisinde metin aramak için:

Select-String `
-Path ".\applica

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
133,674Konular
3,288,561Mesajlar
324,367Kullanıcılar
REALdllSon Üye
Üst Alt