Установка и отличия по системам
wget — консольная утилита для скачивания по HTTP, HTTPS и FTP. Она умеет работать в фоне, повторять попытки и докачивать частично загруженные файлы, поэтому удобна на серверах и при нестабильном соединении.
В большинстве дистрибутивов Linux она уже есть; если нет, ставится из менеджера пакетов: apt install wget, dnf install wget и так далее. В macOS по умолчанию её нет: обычно её устанавливают через Homebrew командой brew install wget. В Windows wget отсутствует, а в Windows PowerShell 5.1 слово wget — псевдоним командлета Invoke-WebRequest, у которого другие параметры и который не понимает -c. Поэтому в Windows либо устанавливают отдельную сборку wget, либо пользуются встроенным curl.exe с ключом -O и -C -.
Проверить установку можно командой wget --version. Если вывод содержит версию и список опций сборки, всё в порядке.
Базовые команды и ключи
Простейший запуск: wget example.com/file.zip. Файл появится в текущей папке, а в терминале будет полоса прогресса, скорость и оставшееся время. Если файл с таким именем уже есть, wget добавит к новому суффикс .1, а не перезапишет старый.
| Ключ | Что делает |
|---|---|
| -O имя | Сохраняет под указанным именем; существующий файл перезаписывается |
| -P папка | Сохраняет в указанную папку |
| -c | Продолжает загрузку с места обрыва |
| -t N или --tries=N | Число попыток; 0 означает бесконечно |
| -T N или --timeout=N | Таймаут в секундах |
| -q | Тихий режим |
| -b | Уход в фон, журнал в файле wget-log |
| -i файл | Читает адреса из текстового файла |
| -nc | Не скачивать заново, если файл уже есть |
Обратите внимание на -O: если указать его вместе со списком адресов, все данные окажутся в одном файле. Для одиночной загрузки это нормально, для списка используйте -P.
Докачка после обрыва
Самая ценная возможность — ключ -c. Он проверяет размер частично загруженного файла и запрашивает у сервера остаток. Порядок действий такой:
- Загрузка прервалась: закрылся терминал, пропало соединение или выключили компьютер. Частичный файл остался в папке.
- Перейдите в ту же папку, где он лежит, и выполните ту же команду с добавлением -c: wget -c example.com/file.zip.
- wget сообщит, что продолжает загрузку с определённого байта, и дозагрузит остаток.
- Проверьте итог: размер и, если сайт публикует, контрольную сумму. В Linux и macOS подойдёт sha256sum или shasum -a 256, в Windows команда certutil -hashfile файл SHA256.
Докачка работает только если сервер поддерживает запросы диапазона байтов. Если поддержки нет, wget начнёт сначала или сообщит, что докачать нельзя. Не используйте -c, если файл на сервере изменился: результат окажется повреждённым, проверка суммы это покажет.
Для нестабильного канала комбинируйте ключи: wget -c -t 0 -T 30 --waitretry=10 адрес. Так wget будет повторять попытки бесконечно, ждать ответа до тридцати секунд и делать растущую паузу между повторами до десяти секунд.
Списки, фон и ограничение скорости
Чтобы скачать несколько файлов, поместите адреса в текстовый файл, по одному на строку, и запустите wget -i list.txt -P downloads. Все файлы окажутся в папке downloads, папка создастся сама.
Долгую загрузку удобно отправить в фон ключом -b. Ход выполнения тогда пишется в wget-log, и его можно смотреть командой tail -f wget-log в Linux и macOS или Get-Content wget-log -Wait в PowerShell. Программа продолжит работу и после закрытия окна терминала на Linux и macOS.
Если загрузка забивает канал и мешает остальным устройствам, ограничьте её: --limit-rate=500k оставит на загрузку около пятисот килобайт в секунду. Значение задаётся в байтах в секунду, поэтому не путайте с мегабитами: 1 мегабит в секунду — примерно 125 килобайт в секунду.
Для имени, которое сервер отдаёт в заголовке, а не в адресе, полезен ключ --content-disposition: он берёт имя файла из заголовка ответа.
Если загрузка не идёт
Ошибки в выводе wget подскажут причину. Строка 404 Not Found означает неверный адрес. 403 Forbidden — сервер отказывает, возможно, из-за отсутствия авторизации или из-за того, что он не пускает клиентов с определённым User-Agent; для проверки добавьте --user-agent со строкой обычного браузера. 429 говорит о слишком частых запросах. Сообщение о невозможности разрешить имя относится к DNS, а не к wget.
Ошибка проверки сертификата возникает при просроченном или самоподписанном сертификате. Ключ --no-check-certificate отключает проверку, но применять его стоит лишь на своих тестовых серверах и временно: соединение теряет защиту от подмены. Лучше исправить сертификат или добавить корневой сертификат в систему.
Скачивайте только то, что вам разрешено, и следите за лицензией на файлы. Рекурсивная загрузка целых сайтов ключом -r создаёт нагрузку на чужой сервер и без разрешения владельца её лучше не применять.
Проверка целостности и аккуратная работа с загрузками
После скачивания больших файлов, например образов дисков или архивов, проверяйте целостность. Издатель обычно публикует контрольную сумму SHA-256 рядом со ссылкой. Вычислите сумму у себя и сравните строку с опубликованной: в Linux командой sha256sum файл, в macOS командой shasum -a 256 файл, в Windows командой certutil -hashfile файл SHA256 либо Get-FileHash файл в PowerShell. Если строки отличаются даже одним символом, файл повреждён или подменён, и его нельзя запускать.
Учтите доступное место на диске: wget не проверяет заранее, поместится ли файл, и обрыв из-за нехватки места выглядит как ошибка записи. Перед загрузкой посмотрите размер в заголовке Content-Length командой wget --spider или curl -I. Ключ --spider покажет, существует ли ресурс и какой у него размер, ничего не скачивая.
Для загрузок, требующих входа, в wget предусмотрены ключи --user и --ask-password. Второй вариант предпочтительнее: пароль не остаётся в истории команд оболочки и в списке процессов. Никогда не вставляйте пароль прямо в строку команды на общем компьютере.