Artykuł Serwery

wget dla Windows - pobieranie, instalacja i pierwsze komendy

W skrócie: Windows nie ma wget z pudełka. Najszybciej zainstalujesz go poleceniem winget install JernejSimoncic.Wget albo pobierając wget.exe i dodając folder do PATH. Uwaga: wget w PowerShell to alias na Invoke-WebRequest, a nie prawdziwy GNU Wget - dlatego komendy z Linuksa nie działają.

Poniżej pokazuję krok po kroku, jak zainstalować prawdziwy GNU Wget na Windows 10 i 11, jak rozbroić pułapkę z aliasem PowerShell i od jakich komend zacząć. Bez lania wody - komendy, które możesz od razu wkleić i sprawdzić.

Czym jest wget i czemu nie ma go w Windows

GNU Wget to nieinteraktywne narzędzie wiersza polecenia do pobierania plików przez HTTP, HTTPS i FTP. Na Linuksie i macOS jest praktycznie standardem - siedzi w systemie albo doinstalowujesz go jedną komendą. Windows tego programu w obrazie systemu nie ma, więc gdy w cmd albo w skrypcie wpiszesz wget, terminal odpowie 'wget' is not recognized.

Konkret: brakuje samego pliku wget.exe i wpisu w zmiennej PATH, która mówi systemowi, gdzie szukać komend. To wszystko. Nie chodzi o żadną blokadę ani ograniczenie licencji - po prostu Microsoft nie dołącza tego narzędzia do systemu.

Po co komu wget na Windowsie? Najczęściej z jednego z tych powodów:

  • przenosisz skrypt z Linuksa i chcesz, żeby te same komendy wget zadziałały na maszynie z Windows,
  • automatyzujesz pobieranie plików albo backupów w zadaniu harmonogramu,
  • pobierasz duże pliki z możliwością wznowienia po zerwaniu łącza,
  • robisz lokalną kopię (mirror) strony do pracy offline.

W tekście przewijają się cztery pojęcia, które warto rozdzielić: cmd (klasyczna Wiersz polecenia), PowerShell (nowsza powłoka), PATH (lista folderów, w których system szuka programów) i sam wget.exe (plik wykonywalny narzędzia). Trzymaj je osobno, bo to na ich styku rodzi się większość nieporozumień.

Pułapka PowerShell: wget to nie jest wget

To najczęstsze źródło frustracji, więc rozbrajam je od razu. W PowerShell wget działa - ale nie robi tego, czego się spodziewasz. To alias, czyli skrót, który PowerShell podstawia pod własne polecenie Invoke-WebRequest. Z prawdziwym GNU Wget nie ma nic wspólnego poza nazwą.

Sprawdź, co masz pod ręką:

Get-Alias wget

Jeśli w odpowiedzi zobaczysz wget -> Invoke-WebRequest, to znaczy, że komendy w stylu wget -r -np URL albo wget -c URL zwrócą błąd - Invoke-WebRequest nie zna tych przełączników. Stąd bierze się klasyczne pytanie "dlaczego moja komenda wget nie działa" i częsty błąd wget command not found, gdy skrypt trafia do Git Basha bez zainstalowanego pakietu.

Masz dwie drogi wyjścia. Pierwsza: zainstaluj prawdziwy wget.exe (opisuję to niżej) i wywołuj go pełną ścieżką albo tak, by trafiał wcześniej niż alias. Druga, doraźna: usuń alias w bieżącej sesji PowerShell.

Remove-Item Alias:wget

Pro tip admina: usunięcie aliasu działa tylko w otwartej sesji - po zamknięciu okna wraca. Jeśli chcesz mieć spokój na stałe, postaw prawdziwy wget i trzymaj go w PATH. Wtedy w cmd alias w ogóle nie przeszkadza, bo to zjawisko wyłącznie PowerShellowe.

Instalacja krok po kroku

Masz trzy sensowne metody plus jedną bonusową. Wybór zależy od tego, czy masz menedżer pakietów i jak "czysto" chcesz to trzymać. Poniżej każda metoda z komendami i weryfikacją.

Metoda A - winget (najszybsza na Windows 10/11)

winget to wbudowany w nowsze wersje Windows menedżer pakietów. Jedna komenda i masz gotowe:

winget install JernejSimoncic.Wget

winget pobierze paczkę, rozpakuje i sam ogarnie wpis w PATH. To najmniej roboty i moja domyślna rekomendacja, jeśli tylko masz winget.

Sprawdź: po instalacji zamknij i otwórz terminal, a potem wpisz:

wget --version

Powinieneś zobaczyć nagłówek w stylu GNU Wget 1.21.4 built on ... - to znak, że masz prawdziwe narzędzie, a nie alias.

Metoda B - ręczne pobranie wget.exe

Jeśli nie masz wingeta albo wolisz mieć kontrolę nad plikiem, pobierz binarkę ręcznie. Aktualne buildy dla Windows utrzymuje serwis eternallybored.org - w wersji 1.21.4 wget.exe przychodzi z wkompilowanymi bibliotekami OpenSSL 3.1.0, ZLib 1.2.13, gpgme 1.20.0, pcre2 10.42, libpsl 0.21.2 oraz c-ares 1.19.0 (dane projektu), więc obsługa HTTPS działa od razu, bez dokładania niczego.

Krok po kroku:

  1. Pobierz plik wget.exe (wersja 64-bitowa dla współczesnego systemu).
  2. Utwórz folder na narzędzia, na przykład C:\tools\wget\, i wrzuć tam wget.exe.
  3. Dodaj ten folder do PATH: wciśnij klawisz Windows, wpisz "zmienne środowiskowe", otwórz "Edytuj zmienne środowiskowe systemu", kliknij "Zmienne środowiskowe", w sekcji "Zmienne systemowe" zaznacz Path, kliknij "Edytuj", potem "Nowy" i wklej C:\tools\wget\.
  4. Zatwierdź wszystko przyciskiem OK i zamknij okno.

Pro tip admina: nie wrzucaj wget.exe do C:\Windows\System32, choć to kuszące i "działa od razu". Własny folder w PATH trzyma porządek - łatwiej zaktualizować, łatwiej usunąć, nie mieszasz w katalogu systemowym. To dziesięć sekund więcej przy instalacji, a lata spokoju później.

Sprawdź: otwórz nowy terminal (stary nadal ma stary PATH) i wpisz wget --version.

Metoda C - Chocolatey lub Scoop

Jeśli pracujesz z menedżerem pakietów innym niż winget, użyj tego, który już masz:

choco install wget

albo

scoop install wget

Obie komendy pobiorą wget i ustawią PATH za Ciebie. Dla programisty, który i tak zarządza narzędziami przez Chocolatey czy Scoop, to najbardziej spójna droga - wget wpada do tej samej listy, co reszta środowiska.

Bonus - WSL, czyli natywny wget przez Linuksa

Masz zainstalowany Windows Subsystem for Linux? Wtedy wget dostajesz w wersji natywnej, bo w środku działa prawdziwy Linux (Ubuntu, Kali albo inna dystrybucja):

sudo apt install wget

To ten sam wget, którego znasz z serwera - z pełnym kompletem przełączników i bez pułapki aliasu. WSL to zresztą wygodny sposób na uruchamianie całej rodziny linuksowych narzędzi CLI na Windowsie; to samo wyzwanie opisuję szerzej przy synchronizacji plików w tekście rsync na Windowsie:

wget -c https://example.com/duzy-plik.iso

Pobierz cicho, bez zalewania terminala paskiem postępu:

wget -q https://example.com/plik.zip

Zrób lokalną kopię strony (mirror), z konwersją linków do pracy offline:

wget -r -np -k https://example.com/

Przy mirrorze zachowaj kulturę: -np trzyma wget w obrębie jednego katalogu, a i tak warto uszanować robots.txt i nie zasypywać cudzego serwera setkami żądań na sekundę. Pobieranie z uwierzytelnieniem podstawowym wygląda tak:

wget --user=nazwa --password=haslo https://example.com/prywatne/plik.zip

Krok po kroku poznasz je najlepiej, klikając po kolei. A do codziennej pracy wystarczy garść flag:

Flaga Co robi
-O zapis pod wskazaną nazwą pliku
-c wznów przerwane pobieranie
-r pobieranie rekurencyjne (mirror)
-np nie wchodź do katalogów nadrzędnych
-q tryb cichy, bez logów
-P zapisz do wskazanego katalogu

Częste błędy i pułapki

Objaw, przyczyna, rozwiązanie - tak jak przy każdym problemie z terminalem.

'wget' is not recognized as an internal or external command - klasyk. Przyczyna: wget.exe nie jest w PATH albo terminal wciąż pamięta starą listę. Rozwiązanie: sprawdź, czy plik leży w folderze dopisanym do PATH, a potem zamknij i otwórz terminal na nowo. Zmienne PATH ładują się przy starcie sesji, więc bez restartu okna nowy wpis nie zadziała.

wget command not found w Git Bash lub WSL - tam działa własne środowisko i wget trzeba doinstalować pakietem, na przykład sudo apt install wget w WSL. To osobny świat od wget.exe w Windowsie.

Komenda robi coś innego niż na Linuksie - prawie zawsze to alias PowerShell podstawiony pod Invoke-WebRequest. Wróć do sekcji o pułapce PowerShell i albo usuń alias, albo wołaj prawdziwy wget.

Błąd certyfikatu przy adresie https:// - wget nie ufa certyfikatowi serwera. Jest przełącznik --no-check-certificate, który to obchodzi, ale traktuj go jak ostateczność i tylko wobec zasobu, któremu ufasz. Wyłączasz wtedy weryfikację, która chroni Cię przed podstawionym serwerem. Jeśli pobierasz pliki na zdalną maszynę albo z niej, warto najpierw ogarnąć bezpieczny kanał - podstawy opisuję w tekście SSH od podstaw. Do normalnej pracy nie jest Ci potrzebny - wystarczy wget.exe.

wget czy coś innego? Alternatywy na Windows

wget nie jest jedynym narzędziem do pobierania z linii poleceń, a Windows 10 i 11 mają już coś w standardzie. Krótki przegląd, kiedy co ma sens:

  • curl - jest w Windowsie z pudełka od kilku lat i świetnie sprawdza się do pojedynczych pobrań, testowania API i pracy z nagłówkami. Do rekurencyjnego mirroru całej strony wget bywa jednak wygodniejszy. Pełne porównanie obu narzędzi rozkładam w tekście wget kontra curl - które narzędzie wybrać. Dobrą maszynę pod takie zadania (SSH, rsync, cron w jednym) zestawiam w rankingu VPS pod DevOps. A jeśli chcesz ogarnąć terminal szerzej niż samo wget - od podstaw CLI po Dockera - zajrzyj do zestawienia kursy DevOps od podstaw.

FAQ

Czy wget jest dostępny w Windows 10 i 11?

Nie natywnie. Windows nie dołącza GNU Wget do systemu, więc musisz go zainstalować - najszybciej przez winget install JernejSimoncic.Wget. Uwaga: w PowerShell komenda wget istnieje, ale to alias na Invoke-WebRequest, a nie prawdziwe narzędzie. Po instalacji sprawdź wersję komendą wget --version.

Dlaczego wget w PowerShell działa inaczej niż na Linuksie?

Bo w PowerShell wget to alias podstawiony pod polecenie Invoke-WebRequest. Ono nie zna przełączników GNU Wget, więc komendy w stylu wget -r czy wget -c zwracają błąd. Sprawdzisz to komendą Get-Alias wget. Rozwiązanie: zainstaluj prawdziwy wget.exe albo usuń alias poleceniem Remove-Item Alias:wget.

Jak zainstalować wget na Windows najszybciej?

Jedną komendą w terminalu z uprawnieniami: winget install JernejSimoncic.Wget. winget pobierze paczkę i sam doda wget do PATH. Alternatywnie użyjesz choco install wget albo scoop install wget, jeśli masz te menedżery. Po instalacji zamknij i otwórz terminal, potem sprawdź wget --version.

Jak naprawić błąd "wget is not recognized" albo "command not found"?

W Windowsie ten błąd oznacza, że wget.exe nie jest w PATH lub terminal pamięta starą listę - dopisz folder z wget do PATH i otwórz nowe okno terminala. W Git Bashu albo WSL to inny przypadek: tam wget trzeba doinstalować pakietem, na przykład sudo apt install wget.

wget czy curl - co wybrać na Windows?

Do pojedynczych pobrań i pracy z API weź curl - jest w Windowsie z pudełka. Do rekurencyjnego mirroru strony i skryptów przenoszonych z Linuksa wygodniejszy bywa wget. Oba narzędzia i konkretne różnice rozkładam w tekście wget kontra curl.

Jak pobrać całą stronę przez wget?

Użyj trybu rekurencyjnego: wget -r -np -k https://example.com/. Flaga -r włącza pobieranie rekurencyjne, -np trzyma wget w obrębie jednego katalogu, a -k konwertuje linki do pracy offline. Zachowaj umiar - uszanuj robots.txt i nie obciążaj cudzego serwera zbyt wieloma żądaniami naraz.