понедельник, 30 января 2017 г.

Закачки при помощи wget

Firefox, Chrome и другие браузеры отлично справляются со скачиванием файлов средних размеров. Однако я не люблю доверять браузерам загрузку ISO-образов размером в несколько сотен мегабайт или более. Для этих целей я предпочитаю использовать wget. Уверяю вас, использование wget имеет значительные преимущества перед браузерами при закачке файлов.
Во-первых, очевидно, что если во время закачки файла браузер «упадёт» или по какой-то причине понадобится его перезапустить, то закачка остановится. Конечно, Firefox и Chrome достигли достаточного уровня стабильности, однако вероятность их падений вовсе не исключена. И будет очень неприятно обнаружить, что закачка была прервана, скажем, на 98% завершённости во время загрузки образа DVD последней версии вашего дистрибутива Linux размером около 4 гигабайт.
Также, очень неудобно, когда вам необходимо скачать файл непосредственно на сервер. Например при установке WordPress вам сперва необходимо загрузить архив с исходными текстами на сервер. Скачивание архива на десктоп, а затем копирование его на сервер выглядит довольно глупо. Зачем повторять одну и ту же операцию дважды? Вместо этого я захожу на сервер по SSH и при помощи wget загружаю нужный мне файл непосредственно на сервер, сохраняя таким образом, своё драгоценное время.
И, наконец, wget можно использовать в скриптах. Если вам необходимо копировать файл или даже целый сайт каждый день в одно и то же время, вы можете встроить вызов wget в какой-либо скрипт, и вызывать всё это при помощи задания cron. Попробуйте сделать то же самое при помощи Firefox или Chrome.

Начнём

Большинство дистрибутивов Linux по умолчанию устанавливают wget как часть системы, а если это не так в вашем случае, то просто найдите и установите соответствующий пакет в вашей системе. Обратите внимание, что, вероятно, вы найдёте больше одного пакета, когда будете искать wget своим менеджером пакетов, поскольку существует масса оболочек для wget.
Итак, давайте попробуем сделать сто-нибудь несложное. Wget умеет загружать файлы по протоколам HTTP, HTTPS и FTP. Давайте представим, что нам понадобилось скачать последнюю версию Linux Mint Fluxbox Edition. Скопируйте URL файла образа и передайте его wget:

wget http://ftp.mirrorsite.net/pub/linuxmint/stable/9/linuxmint-9-fluxbox-cd-i386.iso

Естественно, вы можете заменить «mirrorsite» на подходящее имя зеркала, а также заменить путь к файлу на актуальный в данный момент.
А как насчёт нескольких файлов? Вот здесь wget и начинает показывать свои преимущества. Создайте текстовый файл и разметсите в нём построчно URLы к файлам, которые хотите скачать. Например, вы хотите скачать образы CD Fedora 14 Alpha. Создайте текстовый файл со следующим содержимым:
http://mirrorsite.net/pub/fedora/14/cd1.iso
http://mirrorsite.net/pub/fedora/14/cd2.iso
http://mirrorsite.net/pub/fedora/14/cd3.iso
Сохраните получившийся файла куда-нибудь, например в ~/tmp/fedoraisos.txt, а затем попросите wget скачать для вас всё, что перечислено в этом файле:

wget -i ~/tmp/fedoraisos.txt

После этой команды wget приступит к скачиванию перечисленных файлов и это займёт определённое время, зависящее от скорости вашего соединения с Интернет. А что же будет, если по какой-то причине загрузка файла прервётся? Не беспокойтесь. До тех пор, пока wget запущен, он будет пытаться возобновить прерванную загрузку.
Но что делать, если компьютер зависнет или вам придётся остановить wget по какой-то причине? На этот случай у wget имеется опция -c (continue), которая сообщает wget о необходимости продолжить загрузку файла с того места, до которого он был скачен, а не перезакачивать его заново. Так что, в случае предыдущего отключения wget и необходимости продолжить закачку, просто дайте команду:
wget -с ftp://mirrorsite.net/filename.iso
Если же попытаетесь возобновить прерванную закачку без ключа -c, то к имени сохраняемого файла wget добавит точку и порядковый номер. Таким образом, wget предотвращает затирание существующих одноимённых файлов.

Зеркалирование и прочее

Вы можете использовать wget для того, чтобы создавать зеркала сайтов. Если передать wget опцию --mirror, то он будет пытаться рекурсивно выкачать все файлы сайта, перемещаясь по ссылкам, находящимся внутри выкачиваемых файлов.
Если вы являетесь владельцем сайта и создаёте его зеркало с целью резервного копирования, то не стоит использовать опцию --mirror, поскольку она заставляет wget довольно агрессивно вести себя. В целях резервного копирования содержимого сайта всё же лучше использовать wget с опцией -p (page). В результате работы с этой опцией wget будет сохранять полученные файлы в каталог с именем сайта (например, linux.com). Конечно, наличие таким образом сделанного архива вовсе не гарантирует то, что открыв его в браузере, вы увидите всё точно так же, как и в онлайн-версии, однако, это неплохой способ архивировать непосредственно контент сайта.
Сайты, защищённые паролем — не проблема, поскольку wget имеет на этот случай опции --user и --password. Например, чтобы скачать файл с сайта, защищённого паролем, достаточно команды:
wget --user=username --password=userpassword ftp://mirrorsite.net/filename.iso
Замените username и password на корректные для вашего сайта имя пользователя и пароль соответственно. На системах, разделяемых несколькими пользователями, лучше «заворачивать» подобные вызовы wget в отдельный скрипт, чтобы другие пользователи системы не смогли узнать секретные данные при помощи ps или top.
Некоторые сайты блокируют доступ к содержимому, если поле «User-Agent» запрашивающего браузера им неизвестен или по каким-то другим причинам «не нравится». В таких ситуациях вы можете переопределить значение «User-Agent» при помощи опции --user-agent.
Если у вас не самое быстрое подключение к Интернет или сайт, к которому вы подключаетесь, негативно реагирует на попытки загрузки при больших скоростях, вы можете ограничить скорость, на которой wget будет получать данные, при помощи опции --limit-rate. Например, чтобы скачать файл на скорости не более 2 мегабайт в секунду, попробуйте такую команду:
wget --limit-rate=2m ftp://mirrorsite.net/filename.iso
Вместо суффикса «m» можно использовать «k», если необходимо указать скорость в килобайтах.
При загрузке нескольких файлов иногда возникает необходимость делать паузы между загрузками каждого. На этот случай у wget имеется опция -w (wait). Так, если вам нужна пауза между закачками в одну минуту, можно воспользоваться командой:
wget -w=1m -i fileslist.txt
Конечно же, wget имеет гораздо больше возможностей, чем мы рассмотрели в этой статье. Обязательно изучите man-страницу wget и ознакомьтесь со всеми опциями, которые он принимает.

Комментариев нет:

Отправить комментарий