Wget – Консольная утилита для скачивания файлов

В статьях про Linux вы наверняка встречались с данной утилитой – wget, чаще всего просто вводили написанную команду для выполнения скачивания файла. Но на самом деле, утилита wget обладает весьма обширными возможностями, о них мы сегодня и поговорим. С помощью wget вы можете скачивать как файлы, так и целые сайты, в случае сбоя в сети можно так же и докачивать файлы, а такая возможность периодически бывает необходима. Но, давайте по порядку. Сама же утилита wget предустановлена в большинстве дистрибутивов Linux по умолчанию, не имеет графического интерфейса, а следовательно, запускается через терминал. Скачивать файлы можно с FTP, SFTP, HTTP и HTTPS. Несмотря на то, что данная утилита поставляется в Linux системах (Unix), ее можно установить и в Windows и в Mac. Хотя там на мой взгляд ей не место.

Wget – Скачиваем файлы

И так, первая команда с которой мы познакомимся позволять просто скачивать файлы, такие как архивы. Вполне возможно, что вы уже встречали что-то подобное в статьях где использовалась данная утилита. Так как данная команда сама по себе самая распространенная и позволяет скачать всего один файл, как вариант, тот же архив. Для ее выполнения вводим имя утилиты и адрес откуда собираемся скачивать файл. В данном случае приведу пример скачивание PortProton-97, файла из статьи про PortWine:

wget https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton-97
Wget Консольная утилита для скачивания файлов 1

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

Скачиваем файлы в отдельный каталог

Что бы изменить каталог необходимо указать ключ “-P”, а затем полный путь до каталога куда хотите закачать файл. Приведу пример на этом же файле, но закачаю его в специально созданный каталог “Port-Wine” в директории “Загрузки”, как создавать каталоги в терминале написано в этой статье.

wget -P ~/Загрузки/Port-Wine/ https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton-97
Wget Консольная утилита для скачивания файлов 2

Скачиваем несколько файлов утилитой Wget

С одиночными файлами все понятно, вводим название утилиты – wget а адрес файла, но что делать, если необходимо скачать сразу несколько файлов? Тут опять нам поможет утилита Wget, и для этих нужд необходимо сначала создать файл и в него запишем все файлы которые хотим скачать. И так, создадим файл под названием “Download” и в него запишем URL адреса файлов которые и будем скачивать, для примера возьмем все тот же Port-Wine, а так же Hard Disk Sentinel, это утилита для диагностики HDD и SDD для Linux, подробней о ней написано тут:

Wget Консольная утилита для скачивания файлов 3

Затем вводим название утилиты – “wget”, указываем ключ “-i” и указываем название созданного чуть ранее файла “Download”:

wget -i Download
Wget Консольная утилита для скачивания файлов 4

Утилита Wget скачает все файлы которые были указаны в Download в данную директорию. Таким образом можно создавать списки для скачивания файлов.

Запуск утилиты wget в фоном режиме

Предположим, вам нужно скачать файл большого объема, для этого можно воспользоваться специальным ключом “-b”, в результате утилита wget будет скачивать файл в фоновом режиме. Приведу пример все на том же файле PortWine, и несмотря на то, что он имеет маленький размер, для наглядности вполне подойдет. И так, скачиваем файл в фоновом режиме:

wget -b https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton-97
Wget Консольная утилита для скачивания файлов 5

Возобновляем прерванное скачивание

Бывают ситуации, когда при скачивании файлов может произойти сбой в работе сети в результате чего у вас будут недокачанные файлы. Что бы продолжить их скачивание в утилите wget имеется специальный ключ – c, введя данный ключ вы продолжите скачивание файлов с того месте, когда произошел сбой. Тут все так же просто, вводим название утилиты указываем ключ “-c” и URL нашего файла:

wget -c https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton-97

Скачиваем сайт утилитой Wget

Если вам по каким-то причинам необходимо скачать весь сайт, на помощь опять придет утилита Wget. Для скачивания сайта можно использовать несколько ключей:

--mirror - Рекурсивное скачивание
--convert-links - Ссылки будут преобразованы для оффлайна
--page-requisites - Скачиваем файлы CSS, файлы скриптов JS и картинки

Затем указываем адрес сайта который хотим скачать, для примера возьму данный сайт. Полная команда будет выглядеть следующим образом:

wget --mirror --convert-links --page-requisites https://cyber-x.ru/
Wget Консольная утилита для скачивания файлов 6

Данный процесс может занять продолжительное время, все зависит от количества страниц сайта и его веса в целом.

Скачиваем с FTP утилитой Wget

В случае когда вам нужно скачать файлы с FTP, можно опять же прибегнуть к утилите Wget. Для скачивания с FTP утилитой Wget указываются ключи “–ftp-user=” и “ftp-password=” в которые необходимо вписать Логин и Пароль:

wget --ftp-user=Логин --ftp-password=Пароль

Далее указываем адрес того самого FTP “ftp://Адрес” и название файла который хотим скачать:

wget --ftp-user=Логин --ftp-password=Пароль ftp://Адрес/Название_Файла

Мануал по утилите Wget

Ниже приведу мануал по утилите Wget, который возможно, вам поможет лучше разобраться с данной утилитой. Данный мануал так же доступен при вводе команды “wget –help”:

Использование: wget [КЛЮЧ]... [URL]...

Обязательные аргументы для длинных параметров являются обязательными и для коротких параметров.

Запуск:
  -V,  --version           показать версию Wget и завершить работу
  -h,  --help              показать эту справку
  -b,  --background        после запуска перейти в фоновый режим
  -e,  --execute=КОМАНДА   выполнить команду в стиле «.wgetrc»

Журналирование и входной файл:
  -o,  --output-file=ФАЙЛ    записывать сообщения в ФАЙЛ
  -a,  --append-output=ФАЙЛ  дописывать сообщения в конец ФАЙЛА
  -d,  --debug               показать много отладочной информации
  -q,  --quiet               ничего не выводить
  -v,  --verbose             показывать подробные сведения (по умолчанию)
  -nv, --no-verbose          отключить вывод подробных сведений (не полностью)
       --report-speed=ТИП    единицы измерения пропускной способности
                             определить ТИПОМ. ТИП может быть равно bits
  -i,  --input-file=ФАЙЛ     загрузить URL-ы согласно локальному
                             или внешнему ФАЙЛУ
  -F,  --force-html          считать, что входной файл — HTML
  -B,  --base=URL            считать, что ссылки из входного файла (-i -F)
                             указаны относительно URL
       --config=ФАЙЛ         задать файл настроек
       --no-config           не читать файлы настроек
       --rejected-log=ФАЙЛ   протоколировать причины отброса URL в ФАЙЛ

Загрузка:
  -t,  --tries=ЧИСЛО             установить ЧИСЛО повторных попыток
                                 (0 без ограничения)
       --retry-connrefused       повторять, даже если в подключении отказано
       --retry-on-http-error=ОШИБКИ
                                   список (через запятую) ошибок HTTP,
                                   вызывающих повтор
  -O,  --output-document=ФАЙЛ    записывать документы в ФАЙЛ
  -nc, --no-clobber              пропускать загрузки, которые приведут к
                                 загрузке уже существующих файлов
                                 (и их перезаписи)
       --no-netrc                  не пытаться получить данные из .netrc
  -c,  --continue                возобновить загрузку частично загруженного
                                 файла
       --start-pos=СМЕЩЕНИЕ      начинать загрузку со СМЕЩЕНИЯ (считается с 0)
       --progress=ТИП            выбрать тип индикатора выполнения
       --show-progress           показывать индикатор выполнения в любом
                                 режиме подробности
  -N,  --timestamping            не загружать повторно файлы, только если они
                                 не новее, чем локальные
       --no-use-server-timestamps    не использовать проверку
                                 if-modified-since для запросов в режиме учёта
                                 меток времени
       --no-use-server-timestamps     не устанавливать метку времени локальному
                                 файлу, полученную с сервера
  -S,  --server-response         вывод ответа сервера
       --spider                  ничего не загружать
  -T,  --timeout=СЕКУНДЫ         установка значений всех тайм-аутов равными
                                 числу СЕКУНД
       --dns-timeout=СЕК         установка тайм-аута поиска в DNS в СЕК
       --connect-timeout=СЕК     установка тайм-аута подключения в СЕК
       --read-timeout=СЕК        установка тайм-аута чтения в СЕК
  -w,  --wait=СЕКУНДЫ            пауза в СЕКУНДАХ между загрузками
       --waitretry=СЕКУНДЫ       пауза в 1..СЕКУНДЫ между повторными
                                 попытками загрузки
       --random-wait             пауза в 0.5*WAIT...1.5*WAIT секунд
                                 между загрузками
       --no-proxy                явно выключить прокси
  -Q,  --quota=ЧИСЛО             установить величину квоты загрузки в ЧИСЛО
       --bind-address=АДРЕС      привязать АДРЕС (имя компьютера или IP)
                                 локального компьютера
       --limit-rate=СКОРОСТЬ     ограничить СКОРОСТЬ загрузки
       --no-dns-cache            отключить кэширование DNS-запросов
       --restrict-file-names=ОС  использовать в именах файлов символы,
                                 допустимые в ОС
       --ignore-case             игнорировать регистр при сопоставлении
                                 файлов и/или каталогов
  -4,  --inet4-only              подключаться только к адресам IPv4
  -6,  --inet6-only              подключаться только к адресам IPv6
       --prefer-family=СЕМЕЙСТВО подключаться сначала к адресам указанного
                                 семейства (может быть IPv6, IPv4 или ничего)
       --user=ПОЛЬЗОВАТЕЛЬ       установить и ftp- и http-пользователя в
                                 ПОЛЬЗОВАТЕЛЬ
       --password=ПАРОЛЬ         установить ftp- и http-пароль в ПАРОЛЬ
       --ask-password            запрашивать пароли
       --use-askpass=КОМАНДА     указать обработчик мандатов для запроса 
                                 имени пользователя и пароля. Если 
                                 КОМАНДА не указана, то используется 
                                 переменная окружения WGET_ASKPASS 
                                 или SSH_ASKPASS.
       --no-iri                  выключить поддержку IRI
       --local-encoding=КДР      использовать КДР как локальную кодировку
                                 для IRI
       --remote-encoding=КДР     использовать КДР как удалённую кодировку
                                 по умолчанию
       --unlink                  удалить файл перед затиранием
       --xattr                   включить хранилище метаданных в
                                 расширенных файловых атрибутах

Каталоги:
  -nd, --no-directories           не создавать каталоги
  -x,  --force-directories        принудительно создавать каталоги
  -nH, --no-host-directories      не создавать каталоги как на узле
       --protocol-directories     использовать имя протокола в каталогах
  -P,  --directory-prefix=ПРЕФИКС сохранять файлы в ПРЕФИКС/..
       --cut-dirs=ЧИСЛО           игнорировать ЧИСЛО компонентов удалённого
                                  каталога

Опции HTTP:
       --http-user=ПОЛЬЗОВ.    установить http-пользователя в ПОЛЬЗОВАТЕЛЬ
       --http-password=ПАРОЛЬ  установить http-пароль в ПАРОЛЬ
       --no-cache              отвергать кэшированные сервером данные
       --default-page=ИМЯ      изменить имя страницы по умолчанию (обычно
                               это «index.html»)
  -E,  --adjust-extension      сохранять документы HTML/CSS с надлежащими
                               расширениями
       --ignore-length         игнорировать поле заголовка «Content-Length»
       --header=СТРОКА         вставить СТРОКУ между заголовками
       --compression=ТИП       тип сжатия: auto, gzip или none
                               (по умолчанию: none)
       --max-redirect          максимально допустимое число перенаправлений
                               на страницу
       --proxy-user=ПОЛЬЗОВ.   установить ПОЛЬЗОВАТЕЛЯ в качестве имени
                               пользователя для прокси
       --proxy-password=ПАРОЛЬ   установить ПАРОЛЬ в качестве пароля для
                               прокси
       --referer=URL           включить в HTTP-запрос заголовок «Referer: URL»
       --save-headers          сохранять HTTP-заголовки в файл
  -U,  --user-agent=АГЕНТ      идентифицировать себя как АГЕНТ вместо
                               Wget/ВЕРСИЯ
       --no-http-keep-alive    отключить поддержание активности HTTP
                               (постоянные подключения)
       --no-cookies            не использовать кукисы
       --load-cookies=ФАЙЛ     загрузить кукисы из ФАЙЛА перед сеансом
       --save-cookies=ФАЙЛ     сохранить кукисы в ФАЙЛ после сеанса
       --keep-session-cookies  загрузить и сохранить кукисы сеанса
                               (непостоянные)
       --post-data=СТРОКА      использовать метод POST; отправка СТРОКИ в
                               качестве данных
       --post-file=ФАЙЛ        использовать метод POST; отправка содержимого
                               ФАЙЛА
       --method=HTTPMethod     использовать метод «HTTPMethod» в заголовке
       --body-data=СТРОКА      отправка СТРОКИ в качестве данных;
                               ДОЛЖЕН быть указан параметр --method
       --body-file=ФАЙЛ        отправка содержимого ФАЙЛА;
                               ДОЛЖЕН быть указан параметр --method
       --content-disposition   учитывать заголовок Content-Disposition
                               при выборе имён для локальных файлов
                               (ЭКСПЕРИМЕНТАЛЬНЫЙ)
       --content-on-error      выводить принятые данные при ошибках сервера
       --auth-no-challenge     отправлять информацию об аутентификации
                               Basic HTTP не дожидаясь первого ответа
                               сервера

Опции HTTPS (SSL/TLS):
       --secure-protocol=ПР     выбор протокола безопасности: auto, SSLv2,
                                SSLv3, TLSv1, TLSv1_1, TLSv1_2 или PFS
       --https-only             переходить только по безопасным ссылкам HTTPS
       --no-check-certificate   не проверять сертификат сервера
       --certificate=FILE       файл сертификата пользователя
       --certificate-type=ТИП   тип сертификата пользователя: PEM или DER
       --private-key=ФАЙЛ       файл секретного ключа
       --private-key-type=ТИП   тип секретного ключа: PEM или DER
       --ca-certificate=ФАЙЛ    файл с набором CA
       --ca-directory=КАТ       каталог, в котором хранится список CA
       --crl-file=ФАЙЛ          файл с набором CRL
       --pinnedpubkey=ФАЙЛ/ХЭШИ  Файл с открытым ключом (PEM/DER) или любое
                                 количество хэшей sha256 в виде base64,
                                 начинающихся с «sha256//» и разделённых «;»,
                                 по которым проверяется ответный узел
       --random-file=ФАЙЛ       файл со случайными данными для SSL PRNG

       --ciphers=СТРОКА         назначить строку приоритета (GnuTLS) или
                                список шифров (OpenSSL) непосредственным
                                образом. Использовать осторожно. Данный
                                параметр заменяет значение --secure-protocol.
                                Формат и синтаксис строки зависит от
                                используемой библиотеки SSL/TLS.
Параметры HSTS:
       --no-hsts               отключить HSTS
       --hsts-file             путь к базе данных HSTS (заменит значение
                               по умолчанию)

Опции FTP:
       --ftp-user=ПОЛЬЗОВАТЕЛЬ установить ftp-пользователя в ПОЛЬЗОВАТЕЛЬ
       --ftp-password=ПАРОЛЬ   установить ftp-пароль в ПАРОЛЬ
       --no-remove-listing     не удалять файлы «.listing»
       --no-glob               выключить маски для имён файлов FTP
       --no-passive-ftp        отключить «пассивный» режим передачи
       --preserve-permissions  сохранять права доступа удалённых файлов
       --retr-symlinks         при рекурсии загружать файлы по ссылкам
                               (не каталоги)

Параметры FTPS:
       --ftps-implicit                 безусловно использовать FTPS (порт
                                       по умолчанию — 990)
       --ftps-resume-ssl               возобновлять сеанс SSL/TLS, начатый
                                       в канале управления, при открытии
                                       канала данных
       --ftps-clear-data-connection    шифровать только канал управления;
                                       данные не шифруются
       --ftps-fallback-to-ftp          вернуться к FTP, если FTPS не
                                       поддерживается сервером
Параметры WARC:
       --warc-file=ФАЙЛ          записать данные запроса/ответа в файл .warc.gz
       --warc-header=СТРОКА      вставить СТРОКУ в запись warcinfo
       --warc-max-size=ЧИСЛО     максимальный размер файлов WARC равен ЧИСЛУ
       --warc-cdx                записать индексные файлы CDX
       --warc-dedup=ФАЙЛ         не сохранять записи, перечисленные в файле CDX
       --no-warc-compression     не сжимать файлы WARC с помощью GZIP
       --no-warc-digests         не вычислять дайджесты SHA1
       --no-warc-keep-log        не сохранять файл журнала в записи WARC
       --warc-tempdir=КАТАЛОГ    расположение для временных файлов,
                                 создаваемых процедурой записи WARC

Рекурсивная загрузка:
  -r,  --recursive          включение рекурсивной загрузки
  -l,  --level=ЧИСЛО        глубина рекурсии (inf и 0 — бесконечность)
       --delete-after       удалять локальные файлы после загрузки
  -k,  --convert-links      делать ссылки локальными в загруженном
                            HTML или CSS
       --convert-file-only  преобразовывать только файловую часть URL
                            (базовую часть имени)
       --backups=N               перед записью файла X, ротировать до N
                            резервных файлов
  -K,  --backup-converted   перед преобразованием файла X делать резервную
                            копию в виде X.orig
  -m,  --mirror             короткий параметр, эквивалентный
                            -N -r -l inf --no-remove-listing
  -p,  --page-requisites    загрузить все изображения и проч., необходимые
                            для отображения HTML-страницы
       --strict-comments    включить строгую (SGML) обработку комментариев
                            HTML

Разрешения/запреты при рекурсии:
  -A,  --accept=СПИСОК             список разрешённых расширений
                                   через запятую
  -R,  --reject=СПИСОК             список запрещённых расширений,
                                   разделённых запятыми.
       --accept-regex=РЕГВЫР       регулярное выражение для разрешённых URL
       --reject-regex=РЕГВЫР       регулярное выражение для запрещённых URL
       --regex-type=ТИП            тип регулярного выражения (posix|pcre)
  -D,  --domains=СПИСОК            список разрешённых доменов,
                                   через запятую
       --exclude-domains=СПИСОК    список запрещённых доменов,
                                   через запятую
       --follow-ftp                следовать по ссылкам FTP в HTML-документах
       --follow-tags=СПИСОК        список используемых тегов HTML,
                                   через запятую
       --ignore-tags=СПИСОК        список игнорируемых тегов HTML,
                                   через запятую
  -H,  --span-hosts                заходить на чужие узлы при рекурсии
  -L,  --relative                  следовать только по относительным ссылкам
  -I,  --include-directories=СПИСОК список разрешённых каталогов
       --trust-server-names  использовать имя, указанное в перенаправляющем URL,
                        в качестве последнего компонента.
  -X,  --exclude-directories=СПИСОК список исключаемых каталогов
  -np, --no-parent                 не подниматься в родительский каталог

Заключение

Утилита Wget является OpenSource и распространяется бесплатно, более исчерпывающую информацию можно найти на официальном сайте: https://www.gnu.org/software/wget/, правда, на Английском языке. В среде Unix подобных систем утилита Wget прочно закрепилась. Wget берет свое начало аж с 1996 года, что весьма не малый срок для любой программы. Сама же утилита написана на языке программирования C. Имеется в репозиториях практически всех дистрибутивов Linux.

Думаю, вы не догадывались о таких обширных возможностях такой на первый взгляд простой утилиты.

Несмотря на такой обширный список возможностей, есть вероятность, что вам будет недостаточно одной лишь утилиты Wget. Существует и другая утилита, которая более продвинута в плане скачивания файлов – Curl. Но, о ней как-нибудь в следующий раз.

А на этом сегодня все, надеюсь, данная статья будет вам полезна.
Хотелось бы выразить огромную благодарность тем, кто принимает активное участие в жизни и развитии журнала, огромное спасибо вам за это.
Журнал Cyber-X

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *