Все мы иногда качаем файлы из интернета. Если для этого использовать программы с графическим интерфейсом, то всё оказывается предельно просто. Однако, при работе в командной строке Linux дело несколько усложняется. Особенно — для тех, кто не знаком с подходящими инструментами. Один из таких инструментов — чрезвычайно мощная утилита wget, которая подходит для выполнения всех видов загрузок. Предлагаем вашему вниманию двенадцать примеров, разобрав которые, можно освоить основные возможности wget.



1. Загрузка одного файла


Если всё, что нужно — это загрузка одного файла, нам подойдёт следующая конструкция:

$ wget https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

После ввода такой команды начнётся скачивание Nagios Core. В ходе этого процесса можно будет видеть данные о загрузке, например — сведения о том, какой объём данных уже загружен, текущую скорость, и то, сколько времени осталось до конца загрузки.

2. Загрузка файла и сохранение его с новым именем


Если мы хотим сохранить загруженный файл под именем, отличающимся от его исходного имени, нам пригодится команда wget с параметром -O:

$ wget -O nagios_latest https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

При таком подходе загруженный файл будет сохранён под именем nagios_latest.

3. Ограничение скорости загрузки файлов


При необходимости скорость загрузки файлов с помощью wget можно ограничить. В результате эта операция не будет занимать весь доступный канал передачи данных и не повлияет на другие процессы, связанные с сетью. Сделать это можно, используя параметр --limit-rate и указав ограничение скорости, выраженное в байтах (в виде обычного числа), килобайтах (добавив после числа K) или мегабайтах (M) в секунду:

$ wget ––limit-rate=500K https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

Здесь задано ограничение скорости загрузки, равное 500 Кб/с.

4. Завершение прерванной загрузки


Если в ходе загрузки файлов эта операция была прервана, можно возобновить загрузку с помощью параметра -c команды wget:

$ wget –c https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

Если этот параметр не использовать, то загрузка недокачанного файла начнётся сначала.

5. Фоновая загрузка файла


Если вы загружаете файл огромного размера и хотите выполнять эту операцию в фоне, сделать это можно, используя параметр -b:

$ wget –b https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

6. Загрузка нескольких файлов


Если имеется список URL файлов, которые надо загрузить, но вам не хочется вручную запускать загрузки этих файлов, можно использовать параметр -I. Однако, перед тем, как начинать загрузку, нужно создать файл, содержащий все адреса. Например, сделать это можно такой командой:

$ vi url.txt

В этот файл нужно поместить адреса — по одному в каждой строке. Далее, осталось лишь запустить wget, передав этой утилите только что созданный файл со списком загрузок:

$ wget –I url.txt

Выполнение этой команды приведёт к поочерёдной загрузке всех файлов из списка.

7. Увеличение общего числа попыток загрузки файла


Для того, чтобы настроить число повторных попыток загрузки файла, можно использовать параметр --tries:

wget ––tries=100 https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

8. Загрузка файлов с FTP-сервера


Команда загрузки файла с анонимного FTP-сервера с помощью wget выглядит так:

$ wget FTP-URL

Если для доступа к файлу требуются имя пользователя и пароль, то команда примет такой вид:

$ wget –-ftp-user=dan ––ftp-password=********* FTP-URL

9. Создание локальной копии веб-сайта


Если нужно загрузить содержимое целого веб-сайта, сделать это можно, воспользовавшись параметром --mirror:

$ wget --mirror -p --convert-links -P /home/dan xyz.com

Обратите внимание на дополнительные параметры командной строки:

  • -p: производится загрузка всех файлов, необходимых для корректного отображения HTML-страниц.
  • --convert-links: ссылки в документах будут преобразованы для целей локального просмотра сайта.
  • -P /home/dan: материалы будут сохранены в папку /home/dan.

10. Загрузка с сайта только файлов определённого типа


Для того, чтобы загрузить с сайта только файлы определённого типа, можно воспользоваться параметрами -r -A:

$ wget -r -A.txt Website_url

11. Пропуск файлов определённого типа


Если вы хотите скопировать целый веб-сайт, но при этом вам не нужны файлы определённого типа, отключить их загрузку можно с помощью параметра --reject:

$ wget --reject=png Website_url

12. Загрузка с использованием собственного .log-файла


Для того, чтобы загрузить файл и использовать при этом собственный .log-файл, воспользуйтесь параметром -o и укажите имя файла журнала:

$ wget -o wgetfile.log https://downloads.sourceforge.net/project/nagios/nagios-4.x/nagios-4.3.1/nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia

Итоги


Wget — довольно простая в использовании, но весьма полезная утилита Linux. И, на самом деле то, о чём мы рассказали — лишь малая часть того, что она умеет. Надеемся, этот обзор поможет тем, кто не был знаком с wget, оценить эту программу, и, возможно, включить её в свой повседневный арсенал инструментов командной строки.

Уважаемые читатели! Пользуетесь ли вы инструментами командной строки Linux для загрузки файлов? Если да — просим о них рассказать.

Комментарии (30)


  1. kalininmr
    15.01.2018 11:34

    кажется такой урл не будет нормально приниматся башем как параметр изза &
    надо писать в кавычках


    1. SLASH_CyberPunk
      15.01.2018 11:54
      +1

      Нормально принимается, т.к. нет пробела
      И правда не проходит, странно…


      1. kalininmr
        15.01.2018 12:06

        так задуманно :)
        & — управляющий символ для шелла.
        фоновый запуск.


    1. onix74
      15.01.2018 12:58

      Именно! В кавычки адрес брать надо.


    1. alek0585
      15.01.2018 19:36

      то есть получается автор этой статьи не удосужился проверить примеры?


      1. kalininmr
        15.01.2018 21:38

        похоже на то :)


  1. Demon_i
    15.01.2018 12:02

    Я только что прочитал man wget. Реквистирую статью как пользоваться блокнотом в винде.


  1. andreymal
    15.01.2018 12:31
    +2

    Ну блин, с первого же пункта сразу два косяка. Про & выше уже написали, а ещё такая команда создаст файл с довольно проблемным мусорным именем «nagios-4.3.1.tar.gz?r=&ts=1489637334&use_mirror=excellmedia». Автор вообще не запускал то что написал что ли?


  1. ploop
    15.01.2018 12:58

    Если для этого использовать программы с графическим интерфейсом, то всё оказывается предельно просто

    Да как бы сказать… браузерные качалки убоги сейчас, лишние дополнения ставить не хочется, искать специальное графическое ПО из-за редких случаев, когда это требуется тоже.
    В итоге открыть терминал, набрать wget -c Ctrl+Chift+V и забыться с уверенностью, что он всё правильно сделает, гораздо проще.

    Ну а по статье уже сказали: пересказ мана. Думал про какие-нибудь неочевидные фишки узнать, а тут… Хотя, если кто не знал вообще про эту утилиту, может на пользу пойдёт.


    1. domix32
      15.01.2018 14:03

      что он всё правильно сделает, гораздо проще.

      Если об прокси не спотыкнется


      1. hardegor
        16.01.2018 00:35

        прокси можно указать, насколько я помню в wgetrc
        о, ниже подтверждают


    1. vtvz_ru
      15.01.2018 14:19

      Я тоже предпочитаю качать через консоль. GUI качалки либо слишком просты, либо чересчур загружены. Браузер часто недокачивает. А когда нужно скачать пачкой, намного проще упихать все ссылки в один файл и одной командой все получить.


  1. no__name
    15.01.2018 13:35

    есть возможность рекурсивно выкачать все html (MIME type) страницы с сайта?


  1. saboteur_kiev
    15.01.2018 13:49

    в 2018 году найти сайт на pure html, без бэкенда, практически нереально, поэтому mirror практически бесполезен.


    1. vtvz_ru
      15.01.2018 14:10

      GitHub Pages? Допустим, документацию по ReactJS выкачать, чтобы почитать на досуге, пока куда-то едешь (проезда, автобусы междугородние).


    1. rorc
      15.01.2018 15:20

      mirror — применяется достаточно часто для создания копии чужого сайта, для дальнейшего чтения. Второй вариант — выгрузка на статичный хостинг, тот же гитхаб сайта сделанного на движке не поддерживающем экспорт в статику. Третий вариант — извлечение ресурсов с сайта, когда нет времени на изучение что из документации потребуется и в каком формате оно находится на сайте. И т.п.
      Статичные сайты тоже не редкость в определенных сферах деятельности. Например, демо и документация к open source (free) дополнениям и плагинам.


      1. csn
        15.01.2018 18:39
        +1

        Такой подход и для своих древних проектов можно использовать. На прошлой неделе при помощи wget-а очень быстро и просто сделал статическую копию одного своего старенького php-ного сайта (последние обновления были в 2008).

        При миграциях на новые сервера стало уже неинтересно каждый раз специально только для него устанавливать устаревшие версии php-fpm, работающие параллельно с php7.1- fpm. А переписывать «старичка» под php7 тоже смысла нет.

        После перехода в статику также отпала необходимость и в поддержке его базы на mysql (mariadb), тоже маленький, но профит. По дисковым затратам статика стала занимать места больше на 20% чем динамика плюс база mysql. Зато и нагрузку лишнюю убрали, для nginx новый вариант — это семечки.


  1. heleo
    15.01.2018 18:29

    Если добавить использование wget через прокси то будет вполне себе годный мини ман по базовым вопросам


  1. hobo-mts
    15.01.2018 20:56

    Так юзайте /etc/wgetrc:

    # You can set the default proxies for Wget to use for http, https, and ftp.
    # They will override the value in the environment.
    #https_proxy = proxy.yoyodyne.com:18023/
    #http_proxy = proxy.yoyodyne.com:18023/
    #ftp_proxy = proxy.yoyodyne.com:18023/
    https_proxy=…
    http_proxy=…
    ftp_proxy=…

    proxy-user=…
    proxy-password=…


  1. VEnis
    15.01.2018 21:10

    Автор открыл для себя и решил перевести tldr.sh?


  1. 074909
    15.01.2018 22:46

    Упомянуть, что ли, мимоходом en.m.wikipedia.org/wiki/GnuWin32 и en.wikipedia.org/wiki/UnxUtils


    1. 23rd
      16.01.2018 08:49

      Ага, и бинарники десятилетней давности.

      Может кто знает аналог wget для Windows?


      1. westex
        16.01.2018 11:17

        А чем плох wget для Windows?


      1. evaganov
        16.01.2018 11:17

        В PowerShell есть командлет Invoke-WebRequest с псевдонимом wget (так что можно не отвыкать от привычного :) ), правда функционал несколько ограничен. Но простые вещи, по типу скачки файлов вполне работают.


      1. Free_ze
        16.01.2018 11:20

        Invoke-WebRequest? Или тот же wget на WSL.


      1. MikailBag
        16.01.2018 22:22

        в составе msys2, например


      1. 074909
        19.01.2018 10:09

        бинарники десятилетней давности.

        Но… ведь они работают.


      1. saboteur_kiev
        19.01.2018 13:19

        есть и wget и curl


  1. darkdaskin
    16.01.2018 20:24

    $ vi url.txt

    Если бы я входил в целевую аудиторию этой статьи, на этой строчке у меня бы всё и закончилось :)


  1. LESHIY_ODESSA
    17.01.2018 14:53

    Под Windows использую для скачивания свежих версий программ.

    :: Windоws — ActiveX (Internet Explorer)
    wget http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_ax.exe -O install_flash_player_IE.exe

    :: Windоws — NPAPI (Firefox, Opera Presto до 12)
    wget http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player.exe -O install_flash_player_Firefox.exe

    :: Windоws — PPAPI (Chromium, Opera 30 и выше)
    wget http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_ppapi.exe -O install_flash_player_Chromium.exe