17.01.2022

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

Источник.