Linux terminalinde internetten dosya indirmek, REST API uç noktalarını test etmek veya ağ üzerinden veri transferi gerçekleştirmek için Linux curl ve wget komutları en yaygın kullanılan iki temel araçtır. Her iki komut da ağ üzerinden veri indirme kabiliyetine sahip olsa da, tasarım amaçları ve kullanım alanları bakımından belirgin farklar taşırlar.
Kısaca özetlemek gerekirse; wget bir indirme yöneticisi (download manager) gibi çalışıp yarım kalan indirmeleri sürdürme ve özyinelemeli (recursive) site kopyalama işlerinde öne çıkarken, curl REST API’ler, özel HTTP başlıkları (headers) ve çoklu protokol desteğiyle bir veri transfer kütüphanesidir.
Bu rehberde her iki aracın en popüler kullanım senaryolarını adım adım inceliyoruz.
1. wget ile Dosya İndirme Senaryoları
wget (Web Get), özellikle büyük dosyaları indirmek, bağlantı kopsa bile devam ettirmek ve arka planda indirme yapmak için mükemmeldir.
Temel Dosya İndirme
Herhangi bir dosyayı mevcut dizine indirmek için doğrudan URL vermeniz yeterlidir:
wget https://example.com/dosya.zip
İndirilen Dosyayı Farklı İsimle Kaydetmek (-O)
Dosyayı indirirken adını değiştirmek için -O parametresi kullanılır:
wget -O yeni_ad.zip https://example.com/dosya.zip
Yarım Kalan İndirmeye Devam Etmek (-c)
Büyük bir ISO veya veri tabanı yedeği indirirken bağlantı koparsa, baştan başlamak yerine -c (continue) seçeneği ile kaldığı yerden devam edebilirsiniz:
wget -c https://releases.ubuntu.com/jammy/ubuntu-22.04-desktop-amd64.iso
İndirme Hızını Sınırlamak (–limit-rate)
Sunucu veya ev internetinizin bant genişliğini tamamen tüketmemek için indirme hızını kısıtlayabilirsiniz:
# Hızı maksimum 2 Megabayt/sn ile sınırla
wget --limit-rate=2M https://example.com/buyuk_dosya.tar.gz
Arka Planda İndirmek (-b)
Terminali kapatsanız bile indirmenin devam etmesini sağlamak için -b (background) kullanılır:
wget -b https://example.com/yedek.tar.gz
İndirme durumunu takip etmek için tail -f wget-log komutunu çalıştırabilirsiniz.
2. curl ile REST API ve Veri Transferi
curl (Client URL), libcurl kütüphanesi üzerine inşa edilmiş olup HTTP, HTTPS, FTP, SFTP gibi onlarca protokolü destekler. Özellikle JSON API testleri ve otomasyon betikleri için endüstri standardıdır.
Dosya İndirmek (-o ve -O)
Varsayılan olarak curl gelen yanıtı ekrana (stdout) basar. Dosyaya kaydetmek için:
# 1. URL'deki orijinal isimle kaydetmek (-O)
curl -O https://example.com/script.sh
# 2. Belirli bir isimle kaydetmek (-o)
curl -o local_script.sh https://example.com/script.sh
Yönlendirmeleri Takip Etmek (-L)
Eğer hedef adres 301/302 yönlendirmesi (HTTP Redirect) yapıyorsa, curl‘ün yönlenen sayfayı takip etmesi için -L (location) parametresi şarttır:
curl -L https://github.com/torvalds/linux/archive/refs/tags/v6.1.tar.gz -o linux-6.1.tar.gz
Yalnızca HTTP Başlıklarını (Headers) İncelemek (-I)
Bir web sunucusunun durum kodunu (200 OK, 404, 500 vb.), önbellek ayarlarını veya web sunucu tipini görebilmek için:
curl -I https://ahakan.com/
REST API: POST İsteği ve JSON Göndermek
REST API’lere veri göndermek için -X POST, -H (başlık) ve -d (veri) parametreleri kullanılır:
curl -X POST https://api.example.com/v1/sensors \
-H "Content-Type: application/json" \
-H "Authorization: Bearer gizli_token_bilgisi" \
-d '{"cihaz": "ESP32", "sicaklik": 24.5, "nem": 55}'
Kimlik Doğrulama (Basic Authentication)
Kullanıcı adı ve parola korumalı uç noktalara bağlanmak için -u kullanılır:
curl -u "admin:gizliSifre" https://ahakan.com/wp-json/wp/v2/users/me
curl vs wget: Hangisini Seçmelisiniz?
| Özellik | curl | wget |
|---|---|---|
| Temel Odak | İki yönlü veri transferi, REST API, Header kontrolü | Dosya indirme, özyinelemeli (recursive) indirme |
| İndirmeye Devam Etme | -C - ile yapılabilir | -c ile çok kararlı ve varsayılan destek |
| Site Aynalama (Mirror) | Desteklemez | wget -m veya wget -r ile tam site klonlayabilir |
| HTTP Metotları | GET, POST, PUT, DELETE, PATCH, OPTIONS vb. | Ağırlıklı olarak GET ve POST |
| Kütüphane Desteği | libcurl ile C/C++, Python, PHP içinde kullanılabilir | Bağımsız CLI aracıdır |
Birlikte Kullanım Senaryoları
İndirdiğiniz arşivleri açmadan önce içeriklerini filtrelemek için grep komutu veya metin çıktısını dönüştürmek için sed komutu ile curl komutunu boru hattında (|) bağlayabilirsiniz:
# JSON API çıktısından belirli alanı awk ile çekmek:
curl -s https://api.github.com/repos/torvalds/linux | grep "stargazers_count"
Daha fazla ileri düzey parametre için resmi Everything curl Kitabı ve GNU Wget Kılavuzu sayfalarından yararlanabilirsiniz.