Библиотека сайта rus-linux.net
Управляем загрузкой в Linux с помощью wget
Оригинал: "Manage Linux Downloads with wget"Автор: Joe 'Zonker' Brockmeier
Дата публикации: September 7th, 2010
Перевод: Н.Ромоданов
Дата перевода: декабрь 2010 г.
Firefox, Chrome и другие браузеры пригодны для загрузки отдельного файла, имеющего разумный размер. Но мне бы не хотелось доверять браузеру скачивать образы ISO или другие файлы, размеры которых равны сотням мегабайт. Для этого я предпочитаю использовать утилиту wget
. Вы узнаете, что в сравнении со скачиванием с помощью браузера использование утилиты wget
предоставляет ряд существенных преимуществ.
Прежде всего, и это очевидно, при сбое в работе браузера или необходимости его по какой-либо причине перезагрузить, вы не потеряете то, что уже скачали. В последнее время браузеры Firefox и Chrome работали достаточно стабильно и сбоев не наблюдалось. Но не очень приятно, если будет скачано только 75% (или 98%) от образа ISO размером в 3.6 Гб для DVD с последней версией Fedora или OpenSUSE.
Также браузеры неудобны, если я хочу закачать файл на сервер. Например, если я на другом компьютере дистанционно настраиваю WordPress, мне нужно закачать на сервер архив с последней версией WordPress. Неразумно копировать архив на рабочий стол, а затем с помощью команды scp
загружать его на сервер. На это потребуется (по меньшей мере) в два раза больше времени. Вместо этого я использую wget
и подключившись через SSH, копирую архив на сервер и экономлю себе несколько минут.
Наконец, wget
является скриптом. Если вы хотите каждый день в определенное время делать копию веб сайта или загружать к себе на компьютер некоторый файл, вы можете воспользоваться утилитой wget
в качестве скрипта, который можно исполнять как задание cron. С помощью Firefox или Chrome это сделать трудно.
Знакомимся с wget
В большинстве дистрибутивов Linux утилита wget
должна уже быть установлена, но если это не так, то просто поищите пакет wget. Утилита wget
используется в нескольких приложениях и в нескольких приложениях есть на нее ссылки, так что, вероятно, в результате поиска вы обнаружите несколько пакетов, в том числе несколько графических оболочек для wget
.
Давайте начнем с чего-нибудь простого. Утилита wget
позволяет при скачивании использовать протоколы HTTP, FTP и HTTPS, а
вы, предположим, решили получить самый последний релиз Linux Mint Fluxbox. Просто скопируйте URL, указывающий на образ ISO, и передайте его в утилиту wget следующим образом
wget http://ftp.mirrorsite.net/pub/linuxmint/stable/9/linuxmint-9-fluxbox-cd-i386.iso
Естественно, вы должны заменить "mirrorsite" на имя настоящего сайта, а путь — на действительный путь к образу ISO.
А как насчет нескольких файлов? Вот здесь утилита wget
действительно начинает показывать свои преимущества. Создайте текстовый файл с адресами URL, указывающими на файлы, по одному в каждой строке. Например, если бы я хотел скопировать образы ISO для CD с Fedora 14 alpha, я бы скопировал в текстовый файл адреса URL каждого инсталляционного ISO следующим образом:
http://mirrorsite.net/pub/fedora/14/cd1.iso http://mirrorsite.net/pub/fedora/14/cd2.iso http://mirrorsite.net/pub/fedora/14/cd3.iso
Уловили идею? Сохраните этот файл как fedoraisos.txt
, а затем укажите wget
загрузить все образы ISO:
wget -i fedoraisos.txt
Утилита wget
начнет закачивать образы ISO в том порядке, в каком они расположены в текстовом файле. На это может потребоваться определенное время, которое зависит от пропускной способности вашего сетевого соединения. А что произойдет, если передача прерывается? Не волнуйтесь. Если используется утилита wget
и сетевое соединение оборвется, утилита возобновит работу с того места, где она была прервана.
Но что делать, если возникнет проблема с компьютером или вам по некоторой другой причине потребуется остановить работу wget
? У утилиты wget
есть параметр "continue" (-c
) ("продолжить") , который позволит возобновить скачивание с того места, где оно было прервано.
Просто при повторном запуске скачивания укажите параметр -c
перед аргументом с именем файла (именами файлов):
wget -c ftp://mirrorsite.net/filename.iso
Если вы пытаетесь возобновить скачивание после того, как утилита wget
была остановлена, она, обычно, начинает скачивание заново и сохраняет результат в новом файле с расширением ".1", указываемым после имени основного файла. Таким образом, утилита wget
пытается защитить вас от "затирания" уже имеющегося файла.
Зеркало сайта и другие возможности
Вы также можете использовать утилиту wget
для создания зеркала сайта. Воспользуйтесь параметром --mirror
и утилита wget
попытается скопировать весь сайт, рекурсивно следуя по ссылкам и пытаясь скачать все, что она считает необходимым для сайта.
Если вы не являетесь владельцем сайта и пытаетесь сделать копию
сайта с использованием параметра --mirror
, то, возможно, ваши
действия будут походить на действия агрессора. Если вы пытаетесь загрузить страницу с целью ее архивирования, то, может быть, лучше воспользоваться параметром -p
(page - страница). Когда утилита wget
закончит свою работу, она создаст директорий с именем сайта (так что если вы попытались скопировать Linux.com, это будет директорий linux.com
) и ниже в нем будут находиться все необходимые файлы. Скорее всего, когда вы откроете сайт в браузере, сайт будет выглядеть не совсем так, как надо, но это хороший способ получить копию содержимого сайта.
Сайты, защищенные паролями, проблемой не являются, поскольку в утилите wget
есть несколько параметров для передачи в сайт имени пользователя и пароля. Просто используйте параметры --user
и --password
следующим образом: wget --user=username --password=password ftp://mirrornet.net/filename.file
, где замените имя пользователя username
и пароль password
вашими учетными данными. Вы можете вводить их с помощью скрипта, если вы совместно с другими пользуетесь системой и не хотите, чтобы другие пользователи могли с помощью команд top
, ps
или других аналогичных увидеть ваши имя и пароль.
Иногда сайт отказывает в доступе тем программам, которые не являются браузерами. Если такая проблема возникала, утилита wget
позволит с помощью параметра –user-agent=agent-string
подделать строку, идентифицирующую пользовательского агента.
Если у вас не самое быстрое в мире сетевое соединение, вы можете
несколько ограничить скорость работы утилиты wget
с тем, чтобы
она не израсходовала всю доступную пропускную способность соединения,
либо, если у вас быстрое соединение, чрезмерно не подсадила удаленный сайт. Чтобы ограничить скорость работы, вы можете следующим образом воспользоваться параметром --limit-rate
:
wget --limit-rate=2m http://filesite.net/filename.iso
Здесь утилите wget
указывается ограничить нагрузку в 2 МБ, но можно
также пользоваться обозначением k
, указывающим значение в килобайтах.
Если вы загружаете сразу много файлов, то с помощью параметра -w
(wait - ожидание) вы можете указывать утилите wget
делать паузы между загрузками. Так wget -w=1m
указывает утилите wget
делать между загрузками паузу в одну минуту.
У утилиты wget
есть еще много различных возможностей, так что не забудьте посмотреть весь список параметров на странице руководства man. В будущем мы расскажем об использовании wget
для решения более сложных задач и анализа ответов HTTP, получаемых от сервера Apache.