wget на Linux: скачивание файлов, дозакачка и зеркало сайта
wget — стандартная утилита Linux для скачивания файлов по HTTP, HTTPS и FTP. Умеет дозакачивать прерванное, ходить рекурсивно по ссылкам, ограничивать скорость и работать без интерактива — поэтому это базовый инструмент скриптов установки, скачивания дистрибутивов и зеркалирования сайтов.
wget: скачиваем файлы и сайты из командной строки
wget — стандартная утилита Linux для скачивания файлов по HTTP, HTTPS и FTP. Умеет дозакачивать прерванное, ходить рекурсивно по ссылкам, ограничивать скорость и работать без интерактива — поэтому это базовый инструмент скриптов установки, скачивания дистрибутивов и зеркалирования сайтов.
wget vs curl
Обе утилиты качают по HTTP, но решают разные задачи:
wget— заточен под скачивание файлов и зеркалирование сайтов. По умолчанию сохраняет в файл, поддерживает дозакачку, рекурсивный обход. Прост и предсказуем для скриптов.curl— швейцарский нож для HTTP-запросов: GET, POST, PUT, заголовки, cookie, отладка. Сохраняет в stdout по умолчанию (чтобы получить файл —curl -O url). Незаменим для работы с API.
Когда брать wget:
- Скачать ISO дистрибутива, архив, бинарь.
- Запустить дозакачку прерванной загрузки.
- Сделать оффлайн-копию сайта.
- В скриптах автоматизации — лаконичнее и понятнее, чем
curl.
Когда брать curl:
- Дёргать API (POST с JSON-телом, заголовки, токены).
- Отладка HTTP-запросов с подробным выводом (
-v). - Один-страничные операции (часто
curl -fsSL url | bashдля install-скриптов).
На Ubuntu обе утилиты ставятся: sudo apt install -y wget curl.
Базовый синтаксис
wget <url>
Пример — скачать ISO Ubuntu Server:
wget https://releases.ubuntu.com/24.04/ubuntu-24.04.1-live-server-amd64.iso
По умолчанию wget:
- Сохраняет файл с тем именем, что в URL.
- Показывает прогресс в терминале.
- Выходит после скачивания одного файла.
Сохранить под другим именем:
wget -O ubuntu.iso https://releases.ubuntu.com/24.04/ubuntu-24.04.1-live-server-amd64.iso
-O (ох, прописная) переопределяет имя выходного файла. -O - пишет в stdout — полезно для пайпов: wget -qO- https://example.com/script.sh | bash.
Топ-флаги
| Флаг | Что делает |
|---|---|
-c |
продолжить прерванную загрузку (resume) |
-O <file> |
сохранить под указанным именем |
-P <dir> |
сохранять в указанный каталог |
-q |
quiet — без прогресса и сообщений |
-nv |
non-verbose — короткий итог вместо прогресса |
--limit-rate=2M |
ограничить скорость скачивания (KB/s или M, K) |
-t N |
количество попыток при ошибке (по умолчанию 20) |
--retry-connrefused |
повторять при Connection refused |
-T N |
таймаут на одно соединение (секунды) |
-U "..." |
подставить свой User-Agent |
--header="..." |
добавить произвольный HTTP-заголовок |
--no-check-certificate |
пропустить проверку SSL (опасно!) |
-r |
рекурсивный режим (для сайтов) |
-i <file> |
список URL из файла |
Хорошее сочетание для прода:
wget -c -t 0 --retry-connrefused -T 30 -U "MyDownloader/1.0" \
https://example.com/big-file.tar.gz
-t 0 — бесконечные попытки, --retry-connrefused — повторять при отказе соединения, -T 30 — таймаут 30 сек на блок.
Дозакачка прерванного файла
Один из главных аргументов в пользу wget. Если соединение оборвалось, можно продолжить с того же места:
wget -c https://example.com/big-file.tar.gz
-c (--continue) проверит размер локального файла и попросит сервер выслать данные с этого байта (Range: bytes=N-). Сервер должен поддерживать Range-запросы — большинство файл-хостингов поддерживают, но стриминг или динамическая генерация — нет.
Если файл с тем же именем уже скачан полностью — -c ничего не сделает. Если локальный больше серверного — wget выдаст предупреждение и не тронет файл.
Скачивание списка файлов
# urls.txt
https://example.com/file1.tar.gz
https://example.com/file2.tar.gz
https://example.com/file3.tar.gz
wget -i urls.txt
Полезно для пакетной загрузки релизов, образов VM, бэкапов. Можно комбинировать с -c для устойчивости к сетевым сбоям.
Рекурсивное скачивание (зеркало сайта)
-r ходит по ссылкам и забирает все связанные ресурсы:
wget --mirror --convert-links --adjust-extension --page-requisites \
--no-parent https://example.com/docs/
Что делает каждый флаг:
--mirror— короткий синоним для-r -N -l inf --no-remove-listing: рекурсивно, с timestamping, без ограничения глубины.--convert-links— после скачивания переписать ссылки в HTML на относительные, чтобы сайт работал оффлайн.--adjust-extension— добавить.htmlк URL без расширения, чтобы файлы открывались браузером.--page-requisites— забрать CSS, JS, картинки.--no-parent— не уходить выше указанного каталога. Без него wget может зацепить весь сайт.
Важно: рекурсивный wget уважает robots.txt по умолчанию. Если сайт его запрещает, нужен -e robots=off. Но прежде чем это включать — убедитесь, что вы не нарушаете правила сайта; некоторые ресурсы блокируют агрессивных скрейперов.
Ограничение скорости
На рабочем сервере не хочется забивать канал:
wget --limit-rate=2M --wait=1 --random-wait \
https://example.com/big-iso.img
--limit-rate=2M— не больше 2 МБ/с.--wait=1— пауза 1 сек между запросами (для рекурсивного режима).--random-wait— рандомизация паузы вокругwait±50%, чтобы не выглядеть ботом.
Авторизация
HTTP Basic Auth (логин/пароль в заголовке):
wget --user=alice --password=secret https://example.com/private/file.tar
Минус: пароль попадёт в ps aux и историю shell. Лучше через .wgetrc:
# ~/.wgetrc
http_user = alice
http_password = secret
chmod 600 ~/.wgetrc
Загрузка с поддержкой cookie (например, после логина в браузере):
wget --load-cookies cookies.txt https://example.com/account/file.zip
Файл cookies.txt можно экспортировать расширением браузера (Cookie-Editor, EditThisCookie).
Bearer token (часто для API):
wget --header="Authorization: Bearer $TOKEN" https://api.example.com/file
Через прокси
wget -e use_proxy=yes -e http_proxy=http://proxy.example.com:8080 \
https://example.com/file.tar
Постоянная настройка — переменные окружения:
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
wget https://example.com/file.tar
Скрипты с wget
Стандартный паттерн установки софта по инструкции:
# Безопасный (с проверкой подписи)
wget https://download.example.com/release.tar.gz
wget https://download.example.com/release.tar.gz.sig
gpg --verify release.tar.gz.sig release.tar.gz
tar xf release.tar.gz
# Не безопасный (часто встречается, но рискованно)
wget -qO- https://example.com/install.sh | bash
Никогда не запускайте wget | bash без проверки источника — это эквивалент исполнения произвольного кода с ваших прав. Для критичной автоматизации сначала качайте, проверяйте подпись, потом запускайте.
В качестве альтернативы для установки софта на Ubuntu — нативный apt с подключённым репозиторием через ключ в /etc/apt/keyrings/.
Грабли wget
- HTTPS-сертификаты. Если сервер с самоподписным сертификатом,
wgetотвалится с ошибкой. Не добавляйте--no-check-certificateбездумно — лучше положите CA-сертификат в/usr/local/share/ca-certificates/иsudo update-ca-certificates. - Перенаправления. Современные сайты часто отдают
Set-Cookieчерез 302-редирект. wget по умолчанию следует редиректам, но не сохраняет куки между ними — для сложных случаев беритеcurl --cookie-jar. - HTTP/2 и HTTP/3. wget из репозитория Ubuntu поддерживает только HTTP/1.1. Для HTTP/2 на современных CDN качество может быть ниже, чем у
curl --http2илиaria2c. - Пробелы и спецсимволы в URL. Оборачивайте URL в одинарные кавычки:
wget 'https://example.com/file with spaces.zip'. Иначе шелл интерпретирует пробел как разделитель аргументов.
Альтернативы wget
curl— для HTTP-запросов, API, отладки. Если нужны сложные заголовки или метод POST — берите curl.aria2c— многопоточная загрузка, разбивает файл на части и качает параллельно. Заметно быстрее на больших файлах.sudo apt install aria2.axel— то же самое, проще; почти не развивается, но работает.httpie— современный «wget/curl с человеческим лицом», JSON-friendly. Удобен для отладки API.
Для скриптов и образов в контейнерах остаётся wget — он стандартен.
Частые вопросы
Что такое wget в Linux
Утилита для скачивания файлов по HTTP/HTTPS/FTP из командной строки. Работает неинтерактивно — подходит для скриптов и cron-задач. Главные фичи: дозакачка прерванного через -c, рекурсивный обход через --mirror, поддержка прокси и cookie.
Чем wget отличается от curl
wget заточен под скачивание файлов и зеркалирование сайтов: лаконичный синтаксис, дозакачка, рекурсивный обход. curl — швейцарский нож для HTTP-запросов: API, POST, кастомные заголовки, отладка. Для скриптов скачивания берите wget; для работы с API — curl.
Как продолжить прерванную загрузку wget
Флаг -c (--continue). Запустите ту же команду с -c, и wget попросит сервер выслать данные с того места, где оборвалось. Сервер должен поддерживать Range-запросы — большинство современных файл-хостингов поддерживают.
Как скачать сайт целиком через wget
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent <URL>. Это сделает оффлайн-копию: рекурсивно пройдёт по всем ссылкам внутри указанного пути, заберёт CSS/JS/картинки и переведёт ссылки в относительные.
Как ограничить скорость wget
Флаг --limit-rate=KB|M. Например, --limit-rate=2M — не больше 2 МБ/с. Полезно на рабочем сервере, чтобы не забить канал. Для рекурсивных загрузок добавляйте --wait=1 --random-wait.
Как использовать wget через прокси
wget -e use_proxy=yes -e http_proxy=http://proxy.example.com:8080 <URL>. Или через переменные окружения: export http_proxy=... и export https_proxy=... — wget подхватит их автоматически.
Безопасно ли использовать wget --no-check-certificate
Нет. Этот флаг отключает проверку SSL — открывает атаку man-in-the-middle. Если сервер с правильным сертификатом — флаг не нужен. Если с самоподписным — лучше добавить CA в систему через update-ca-certificates, а не отключать проверку.
Что запомнить
- Базовый синтаксис:
wget <url>. Под другим именем —wget -O name url. В каталог —wget -P /path url. - Дозакачка прерванного —
wget -c <url>. Это главное преимущество wget надcp/scp. - Зеркало сайта —
wget --mirror --convert-links --page-requisites --no-parent. Уважайтеrobots.txt. - В скриптах для устойчивости:
-c -t 0 --retry-connrefused -T 30. wget | bashбез проверки — эквивалент запуска чужого кода с вашими правами. Качайте, проверяйте, потом исполняйте.- Для API и POST-запросов — берите curl, не wget.
Обложка: фото Markus Spiske с Unsplash, лицензия Unsplash.