Windows Subsystem for Linux (WSL) Kurulum ve Kullanımı

Windows dünyasında çalışan bir sysadmin olarak, Linux araçlarına ihtiyaç duyduğunuzda eskiden sanal makine kurmak ya da dual-boot yapmak zorunda kalırdınız. Artık Windows Subsystem for Linux (WSL) sayesinde bu dertten kurtuldunuz. Hem Windows’un kurumsal gücünü hem de Linux’un esnekliğini aynı makinede, neredeyse sıfır overhead ile kullanabiliyorsunuz. Bu yazıda WSL’yi sıfırdan kurmaktan, gerçek dünya sysadmin senaryolarında kullanmaya kadar her şeyi ele alacağım.

WSL Nedir ve Neden Kullanmalısınız?

WSL, Microsoft’un Windows çekirdeğine entegre ettiği bir uyumluluk katmanıdır. WSL 1, Linux sistem çağrılarını Windows çağrılarına çeviren bir çeviri katmanıyken, WSL 2 ile işler tamamen değişti. WSL 2, gerçek bir Linux çekirdeği çalıştırıyor. Hafif bir Hyper-V sanal makinesi üzerinde koşuyor ama bunun farkına neredeyse varmazsınız çünkü başlatma süresi saniyelerin altında.

Sysadmin olarak WSL size şunları sağlıyor:

  • Bash scriptleri doğrudan Windows üzerinde çalıştırma
  • grep, awk, sed, curl gibi GNU araçlarını native olarak kullanma
  • Python, Ruby, Node.js geliştirme ortamlarını Linux ekosisteminde kurma
  • Ansible, Terraform gibi araçları Windows makinenizde sorunsuz çalıştırma
  • SSH, rsync, scp ile uzak sunucularla doğrudan etkileşim kurma
  • Windows dosya sistemine ve ağ kaynaklarına Linux üzerinden erişme

Sistem Gereksinimleri

WSL 2 için ihtiyacınız olanlar:

  • Windows 10 sürüm 1903 veya üzeri (Build 18362+)
  • Windows 11 tüm sürümleri destekliyor
  • Windows Server 2019 veya 2022 (sunucu ortamında da çalışıyor)
  • BIOS’ta Virtualization Technology (VT-x/AMD-V) etkin olmalı
  • En az 4 GB RAM (8 GB önerilen)

Kurulum: Tek Komutla Başlangıç

Windows 10 21H2 ve sonrasında, Windows 11’de WSL kurulumu inanılmaz basit hale geldi. PowerShell’i yönetici olarak açın ve şunu çalıştırın:

wsl --install

Bu komut tek seferde şunları yapıyor: WSL özelliğini etkinleştiriyor, Sanal Makine Platformunu aktif ediyor, WSL 2 Linux çekirdeğini indiriyor ve varsayılan olarak Ubuntu’yu kuruyor. Kurulum sonrası sistemi yeniden başlatmanız gerekiyor.

Eski Windows sürümlerinde veya manuel kontrol istiyorsanız adım adım gidelim:

# Önce WSL özelliğini etkinleştir
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# Sanal Makine Platformunu etkinleştir (WSL 2 için zorunlu)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# Sistemi yeniden başlat, sonra WSL 2'yi varsayılan yap
wsl --set-default-version 2

Yeniden başlatma sonrası Linux çekirdeği güncellemesini manuel indirmeniz gerekebilir. Microsoft’un resmi sayfasından WSL2 Linux kernel update package’ı indirin ve kurun.

Dağıtım Seçimi ve Kurulumu

Tek bir dağıtımla sınırlı değilsiniz. Mevcut dağıtımlara bakmak için:

wsl --list --online

Bu komut size şu an yüklenebilir dağıtımların listesini gösterir. Ubuntu, Debian, Kali Linux, openSUSE, AlmaLinux gibi seçenekler mevcut. Birden fazla dağıtım aynı anda kurulu olabilir, bu da test ortamları için harika.

Belirli bir dağıtımı kurmak için:

# Ubuntu 22.04 LTS kur
wsl --install -d Ubuntu-22.04

# Debian kur
wsl --install -d Debian

# Kali Linux kur (pentest senaryoları için)
wsl --install -d kali-linux

Kurulu dağıtımları görmek için:

wsl --list --verbose

Çıktı şuna benzer bir şey gösterir:

  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
  Debian          Stopped         2
  kali-linux      Stopped         2

Yıldız işareti varsayılan dağıtımı gösteriyor. Varsayılanı değiştirmek için:

wsl --set-default Debian

İlk Yapılandırma ve Temel Ayarlar

WSL’yi ilk başlattığınızda kullanıcı adı ve parola belirlemeniz isteniyor. Bu kullanıcı otomatik olarak sudo yetkisine sahip oluyor. Dağıtımı başlatmak için:

# Varsayılan dağıtımı başlat
wsl

# Belirli bir dağıtımı başlat
wsl -d Ubuntu-22.04

# Root olarak gir (dikkatli kullanın)
wsl -u root

İlk işiniz paketleri güncellemek olmalı:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git vim htop net-tools build-essential

WSL Yapılandırma Dosyaları

WSL’nin davranışını iki farklı dosya ile yönetebilirsiniz.

wsl.conf dosyası dağıtım bazlı ayarlar içeriyor. Bu dosya Linux dağıtımınızın içinde, /etc/wsl.conf yolunda bulunuyor:

sudo vim /etc/wsl.conf

İçerik olarak şunları ekleyebilirsiniz:

[boot]
systemd=true

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true
hostname = my-wsl-machine

[user]
default = sysadmin

systemd=true satırı özellikle önemli. WSL 2’de systemd desteği var ama varsayılan olarak kapalı. Bunu açtığınızda nginx, postgresql gibi servisleri systemctl ile yönetebiliyorsunuz.

.wslconfig dosyası ise tüm WSL 2 dağıtımları için geçerli olan global ayarları içeriyor. Bu dosya C:UsersKullaniciAdi.wslconfig yolunda bulunuyor:

[wsl2]
memory=4GB
processors=4
swap=2GB
localhostForwarding=true
kernelCommandLine=quiet splash

Bu ayarlarla WSL’nin kullanabileceği maksimum RAM ve CPU çekirdeği sayısını sınırlayabilirsiniz. Sunucu ortamında bu kritik çünkü WSL varsayılan olarak sistem belleğinin yarısına kadar alabilir.

Değişikliklerin geçerli olması için WSL’yi yeniden başlatın:

wsl --shutdown
wsl

Dosya Sistemi Entegrasyonu

WSL’nin en güzel özelliklerinden biri çift yönlü dosya sistemi erişimi. Windows dosyalarına Linux’tan, Linux dosyalarına Windows’tan erişebiliyorsunuz.

Linux içinden Windows sürücülerine erişmek için:

# C: sürücüsüne git
cd /mnt/c

# Kullanıcı masaüstüne git
cd /mnt/c/Users/KullaniciAdi/Desktop

# Windows'taki bir script'i çalıştır
ls /mnt/d/scripts/

Windows Explorer’dan Linux dosyalarına erişmek de mümkün. Explorer adres çubuğuna şunu yazın:

\wsl$Ubuntu-22.04homekullanici

Ya da direkt komut satırından:

# WSL içinden Windows Explorer'ı aç
explorer.exe .

# Mevcut Linux dizinini Windows'ta aç
explorer.exe /mnt/c/Users/KullaniciAdi/Documents

Önemli not: Performans açısından kritik bir detay var. Linux dosyalarını Linux’tan, Windows dosyalarını Windows’tan işlemek en iyi performansı veriyor. Eğer Linux projelerinizi /mnt/c/ altında tutarsanız ciddi yavaşlama yaşarsınız. Projelerinizi Linux ev dizininde (~/projects) tutun.

Gerçek Dünya Senaryosu 1: Sunucu Yönetimi ve SSH

Birden fazla Linux sunucuyu yönetiyorsanız WSL mükemmel bir kontrol noktası oluyor. SSH anahtarlarınızı yönetin, config dosyasını düzenleyin:

# SSH anahtar çifti oluştur
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519

# SSH config dosyasını düzenle
vim ~/.ssh/config

SSH config içeriği:

Host prod-web-01
    HostName 192.168.1.100
    User ansible
    IdentityFile ~/.ssh/id_ed25519
    Port 22

Host prod-db-01
    HostName 192.168.1.101
    User dbadmin
    IdentityFile ~/.ssh/id_ed25519_db

Host *.staging.company.com
    User deploy
    IdentityFile ~/.ssh/staging_key
    StrictHostKeyChecking no

Artık ssh prod-web-01 diyerek bağlanabilirsiniz. Aynı makineye Windows’tan da erişmek istiyorsanız, Linux’taki SSH anahtarlarını Windows’a kopyalayabilirsiniz:

cp ~/.ssh/id_ed25519 /mnt/c/Users/KullaniciAdi/.ssh/

Gerçek Dünya Senaryosu 2: Log Analizi

Üretim sunucusundan çektiğiniz log dosyalarını analiz etmek için WSL idealdir. Windows’ta notepad ile 500 MB log açmaya çalışmak yerine:

# Büyük log dosyasında hata ara
grep -i "ERROR|CRITICAL|FATAL" /mnt/d/logs/application.log | tail -100

# Son 1 saatin loglarını filtrele
awk '/2024-01-15 14:/{p=1} p' /mnt/d/logs/app.log | head -200

# IP adreslerine göre grupla ve say
grep "403|401" /mnt/d/logs/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# Belirli bir zaman aralığındaki logları çıkar ve yeni dosyaya yaz
sed -n '/2024-01-15 14:00/,/2024-01-15 15:00/p' /mnt/d/logs/app.log > /mnt/d/logs/filtered_hour.log

Bu işlemleri PowerShell’de yapmak da mümkün ama grep/awk kombinasyonu log analizi için çok daha hızlı ve verimli.

Gerçek Dünya Senaryosu 3: Ansible ile Otomasyon

Ansible Windows’ta çalışmaz ama WSL’de çalışır. Bu sayede Windows makinenizden Ansible playbook’larını çalıştırabilirsiniz:

# Ansible kur
sudo apt update
sudo apt install -y ansible

# Ansible versiyonunu doğrula
ansible --version

# Inventory dosyası oluştur
vim ~/ansible/inventory/production.ini

Inventory içeriği:

[webservers]
web01 ansible_host=192.168.1.100 ansible_user=deploy
web02 ansible_host=192.168.1.101 ansible_user=deploy

[databases]
db01 ansible_host=192.168.1.110 ansible_user=dbadmin

[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
ansible_python_interpreter=/usr/bin/python3
# Tüm sunucuları ping test
ansible all -i ~/ansible/inventory/production.ini -m ping

# Playbook çalıştır
ansible-playbook -i ~/ansible/inventory/production.ini ~/ansible/playbooks/update-servers.yml

Windows ve Linux Araçlarını Birlikte Kullanmak

WSL’nin süper gücü bu. Linux komutlarından Windows uygulamalarını, Windows komutlarından Linux araçlarını çağırabilirsiniz.

Linux’tan Windows komutları çalıştırmak:

# Windows'tan bir program çalıştır
notepad.exe dosya.txt

# PowerShell komutları çalıştır
powershell.exe -Command "Get-Process | Where-Object CPU -gt 10"

# Windows'ta dosya aç
cmd.exe /c start dosya.pdf

# PowerShell scripti çalıştır
powershell.exe -ExecutionPolicy Bypass -File /mnt/c/scripts/backup.ps1

PowerShell’den WSL komutları çalıştırmak:

# PowerShell içinden WSL komutu
wsl grep -r "error" /var/log/

# Pipeline ile kullanım
wsl ls -la /home/admin/ | Select-String ".sh"

# Değişkeni WSL'ye geçir
$hostname = "web01"
wsl ssh $hostname "df -h"

Bu çift yönlü çalışma özellikle otomasyon scriptlerinde işe yarıyor. PowerShell ile Active Directory işlemleri yapıp sonucu WSL ile işleyebilirsiniz.

WSL’de Systemd ve Servis Yönetimi

Daha önce bahsettiğim systemd=true ayarını aktifleştirdikten sonra gerçek bir Linux servis yönetimi deneyimi yaşıyorsunuz:

# Nginx kur ve başlat
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

# Docker kurulumu ve başlatma
curl -fsSL https://get.docker.com | bash
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

# PostgreSQL kur
sudo apt install -y postgresql
sudo systemctl enable postgresql
sudo systemctl start postgresql

Artık Windows makinesinde çalışan, gerçekten systemd ile yönetilen bir nginx ya da PostgreSQL var. Geliştirme ortamı olarak veya test amaçlı kullanmak için idealdir.

WSL Güvenlik Ayarları

Kurumsal ortamda WSL kullanıyorsanız güvenlik konularına dikkat edin.

Ağ güvenliği: WSL 2, Windows ile NAT üzerinden iletişim kuruyor. WSL içindeki servislere Windows dışından erişmek için port yönlendirme gerekiyor:

# PowerShell'den WSL IP adresini bul
wsl hostname -I

# Port yönlendirme ekle (PowerShell yönetici olarak)
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=(wsl hostname -I).Trim()

# Firewall kuralı ekle
New-NetFirewallRule -DisplayName "WSL Port 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow

Dosya izinleri: WSL’de Windows dosyalarına erişirken izin sorunları yaşayabilirsiniz. /etc/wsl.conf içindeki metadata mount seçeneği Linux izinlerini Windows dosya sistemine yazar, bu sayede chmod komutları kalıcı oluyor.

Dağıtımı dışa aktarma ve yedekleme:

# Dağıtımı tar olarak dışa aktar
wsl --export Ubuntu-22.04 D:backupsubuntu-backup.tar

# Yedeği geri yükle
wsl --import Ubuntu-Restored D:wslubuntu-restored D:backupsubuntu-backup.tar --version 2

# Dağıtımı tamamen kaldır
wsl --unregister Ubuntu-22.04

Bu özellik özellikle standart kurumsal WSL imajları oluşturmak için kullanışlı. Bir kez yapılandırın, tar’a alın, tüm makinelere deploy edin.

Windows Terminal ile Profesyonel Kullanım

WSL’yi Windows Terminal ile birlikte kullanmak deneyimi tamamen farklı bir boyuta taşıyor. Microsoft Store’dan Windows Terminal kurun. Otomatik olarak WSL dağıtımlarınızı profil olarak ekliyor.

Windows Terminal ayarlarına (settings.json) girerek her dağıtım için özelleştirme yapabilirsiniz. Başlangıç dizini, renk şeması, font gibi ayarları dağıtım bazında yapılandırın. Sysadminler için önerim: production sunucularını kırmızı temalı, staging’i sarı temalı, local geliştirmeyi mavi temalı yapın. Yanlış terminale komut yazma riskini azaltır.

Performans Optimizasyonu

WSL’yi daha hızlı çalıştırmak için birkaç pratik öneri:

Virüs tarayıcı istisnaları ekleyin. WSL dosyaları için Windows Defender’a istisna eklemek ciddi fark yaratıyor:

# PowerShell yönetici olarak
Add-MpPreference -ExclusionPath "$env:LOCALAPPDATAPackagesCanonicalGroupLimited*"
Add-MpPreference -ExclusionPath "C:Users$env:USERNAME.wsl"

WSL’yi arka planda çalışır tutun. Sürekli başlatma/durdurma yerine WSL’yi çalışır halde bırakmak daha hızlı tepki süresi veriyor.

Disk imajı optimizasyonu: Uzun süre kullanılan WSL disklerinde dosyaları silseniz bile disk imajı şişebilir:

# WSL'yi kapat
wsl --shutdown

# PowerShell ile disk optimize et (Hyper-V araçları gerekli)
Optimize-VHD -Path "$env:LOCALAPPDATAPackagesCanonicalGroupLimited.Ubuntu22.04LTS*LocalStateext4.vhdx" -Mode Full

Sık Karşılaşılan Sorunlar ve Çözümleri

“WslRegisterDistribution failed with error: 0x80370102” hatası: Bu hata genellikle BIOS’ta sanallaştırma devre dışı olduğunda çıkar. BIOS’a girin, Intel VT-x veya AMD-V’yi etkinleştirin.

DNS çözümleme sorunu: WSL bazen DNS sorgularını düzgün yapamıyor. Çözüm:

# resolv.conf'u düzenle
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "nameserver 1.1.1.1" >> /etc/resolv.conf'

# wsl.conf'ta resolv.conf otomatik üretimini kapat
echo -e "[network]ngenerateResolvConf = false" | sudo tee -a /etc/wsl.conf

Yavaş dosya işlemleri: Bunu yaşıyorsanız büyük ihtimalle /mnt/c/ üzerinde çalışıyorsunuzdur. Projeleri ~/ altına taşıyın.

Clock drift sorunu: WSL’de zaman kayması olabilir. Düzeltmek için:

sudo hwclock -s
# veya
sudo ntpdate pool.ntp.org

Sonuç

WSL, Windows sysadminler için gerçekten oyun değiştiren bir araç. Sanal makine karmaşıklığı olmadan, dual-boot güçlüğü olmadan Linux araçlarına anında erişim sağlıyor. Özellikle hibrit ortamları yöneten, hem Windows hem Linux sunucularla uğraşan sysadminler için vazgeçilmez hale geliyor.

Ansible otomasyonu, log analizi, SSH yönetimi, script geliştirme gibi görevleri artık aynı makinede sorunsuz yapabiliyorsunuz. Kurumsal ortamlarda dağıtımı dışa aktarıp standart bir WSL imajı oluşturabilir, tüm ekibe aynı ortamı dağıtabilirsiniz.

Başlangıç için wsl --install komutunu çalıştırın, Ubuntu’yu kurun ve deneyin. Birkaç gün kullandıktan sonra nasıl bu kadar süre WSL olmadan çalıştığınızı merak edeceksiniz. Sistemi öğrenirken sorunlarla karşılaşırsanız bu yazıya dönün, büyük ihtimalle sorunun cevabı burada.

Yorum yapın