Ненавязчивое скачивание в Linux

LinuxBeginner
Практиковаться сейчас

Введение

Добро пожаловать в этот лабораторный практикум для начинающих по неинтерактивной загрузке файлов в Linux. Умение эффективно загружать файлы из командной строки является важным навыком для любого пользователя Linux или системного администратора.

В этом практикуме вы научитесь использовать команду wget, мощный инструмент, который позволяет загружать файлы из интернета без ручного вмешательства. Этот инструмент особенно полезен, когда вам нужно скачать несколько файлов, выполнить загрузку в фоновом режиме или автоматизировать задачи загрузки в скриптах.

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

Настройка окружения и базовая загрузка

На этом первом этапе мы создадим рабочую директорию и научимся загружать один файл с использованием команды wget.

Создание рабочей директории

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

Перейдите в директорию проекта и создайте новую директорию с именем download_resources:

cd ~/project
mkdir download_resources

Понимание команды wget

Команда wget представляет собой утилиту для неинтерактивной загрузки файлов из интернета. Базовый синтаксис этой команды выглядит следующим образом:

wget [параметры] [URL]

Ваша первая загрузка

Теперь давайте используем wget для загрузки файла. Мы загрузим дистрибутивный пакет Python в качестве тестового файла:

cd ~/project/download_resources
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz

При выполнении этой команды вы должны увидеть вывод, похожий на следующий:

--2024-01-10 10:14:51--  https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22540566 (21M) [application/octet-stream]
Saving to: 'Python-3.6.1.tgz'

Python-3.6.1.tgz                  100%[=============================================================>]  21.50M  26.8MB/s    in 0.8s

2024-01-10 10:14:52 (26.8 MB/s) - 'Python-3.6.1.tgz' saved [22540566/22540566]

В этом выводе показаны:

  • URL, к которому осуществляется доступ
  • IP-адрес сервера
  • HTTP-ответ (200 OK означает успешное выполнение)
  • Размер файла (примерно 21 МБ)
  • Прогресс загрузки
  • Скорость и время загрузки
  • Подтверждение того, что файл был сохранен с оригинальным именем

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

ls -lh

Вы должны увидеть файл Python-3.6.1.tgz в директории с соответствующим размером.

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

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

Использование опции -O

Опция -O (заглавная буква О, а не ноль) позволяет вам указать имя выходного файла. Это полезно, когда:

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

Попробуем загрузить другой пакет Python, но на этот раз сохраним его с пользовательским именем:

cd ~/project/download_resources
wget -O CustomPython.tgz https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

В этой команде:

  • -O CustomPython.tgz сообщает wget сохранить файл как CustomPython.tgz.
  • Файл будет загружен из указанного URL, но сохранен с нашим пользовательским именем.

Вывод будет похож на предыдущий, но обратите внимание, что строка "Saving to" теперь показывает наше пользовательское имя файла:

--2024-01-10 10:20:51--  https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22676538 (22M) [application/octet-stream]
Saving to: 'CustomPython.tgz'

CustomPython.tgz                  100%[=============================================================>]  21.63M  25.9MB/s    in 0.8s

2024-01-10 10:20:52 (25.9 MB/s) - 'CustomPython.tgz' saved [22676538/22676538]

Проверим, что наш файл был загружен с пользовательским именем:

ls -lh

Теперь вы должны увидеть как исходный файл Python-3.6.1.tgz, так и новый файл CustomPython.tgz в директории.

Другие полезные опции

Поскольку мы изучаем опции wget, вот еще несколько полезных опций:

  • -q (quiet): Отключает вывод, полезно для скриптов.
  • -c (continue): Возобновляет загрузку частично загруженного файла.
  • --limit-rate=1m: Ограничивает скорость загрузки (например, до 1 мегабайта в секунду).

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

wget -q -O PythonQuiet.tgz https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz

Эта команда не покажет никакого вывода, но файл будет загружен. Вы можете проверить это с помощью:

ls -lh

Теперь вы также должны увидеть файл PythonQuiet.tgz в своей директории.

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

В реальных сценариях вам часто нужно загружать несколько файлов. Ввод каждой команды wget вручную было бы неэффективно. К счастью, wget может загружать несколько файлов из списка, что идеально подходит для автоматизации.

Создание файла со списком URL

Сначала создадим текстовый файл, содержащий URL-адреса файлов, которые мы хотим загрузить:

cd ~/project/download_resources
echo "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz" > download_list.txt
echo "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz" >> download_list.txt
echo "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz" >> download_list.txt

В этих командах:

  • Первая команда echo создает новый файл с именем download_list.txt и добавляет первый URL.
  • Последующие команды echo добавляют дополнительные URL в файл с использованием >> (двойной перенаправитель).

Проверим содержимое нашего файла, чтобы убедиться, что все правильно:

cat download_list.txt

Вы должны увидеть три URL, каждый на отдельной строке:

https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

Использование wget с входным файлом

Теперь мы можем использовать опцию -i с wget для чтения URL из нашего файла и загрузки всех файлов:

wget -i download_list.txt

Эта команда сообщает wget прочитать URL из download_list.txt и загрузить каждый файл последовательно. Вы увидите вывод для каждой загрузки, аналогичный тому, когда вы загружали один файл:

--2024-01-10 10:30:51--  https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22808518 (22M) [application/octet-stream]
Saving to: 'Python-3.7.0.tgz'

Python-3.7.0.tgz                  100%[=============================================================>]  21.75M  25.9MB/s    in 0.8s

2024-01-10 10:30:52 (25.9 MB/s) - 'Python-3.7.0.tgz' saved [22808518/22808518]

--2024-01-10 10:30:52--  https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
...

Проверка загруженных файлов

После завершения загрузки убедимся, что все файлы были загружены правильно:

ls -lh Python-3.7.*

Вы должны увидеть три файла Python 3.7.x, которые мы загрузили из списка:

-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.0.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.1.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:31 Python-3.7.2.tgz

Создание скрипта пакетной загрузки

Для будущего использования создадим простой скрипт на шелле, который может загружать файлы из списка. Это демонстрирует, как wget можно использовать в автоматизации:

cd ~/project/download_resources
nano batch_download.sh

Введите следующее содержимое в файл:

#!/bin/bash
## A simple script to download files from a list
if [ -f "$1" ]; then
  echo "Downloading files from list: $1"
  wget -i "$1"
else
  echo "Error: File $1 not found"
  exit 1
fi

Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите, нажав Ctrl+X.

Сделайте скрипт исполняемым:

chmod +x batch_download.sh

Теперь вы можете использовать этот скрипт для загрузки файлов из любого списка в будущем:

./batch_download.sh download_list.txt

Эта команда сделает то же самое, что и наша предыдущая команда wget -i download_list.txt, но она обернута в скрипт, который вы можете использовать повторно.

Резюме

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

  • Загрузки отдельных файлов с использованием базовых команд wget.
  • Сохранения загруженных файлов с пользовательскими именами с помощью опции -O.
  • Создания списка URL-адресов и загрузки нескольких файлов сразу с использованием опции -i.
  • Создания простых скриптов автоматизации для пакетной загрузки.

Эти навыки ценны для системных администраторов, разработчиков и любых пользователей Linux, которые должны эффективно загружать файлы из командной строки. Неинтерактивная загрузка особенно полезна для автоматизации, управления удаленными серверами и в ситуациях, когда графический интерфейс недоступен.

Некоторые дополнительные функции wget, которые вы можете изучить самостоятельно, включают:

  • Рекурсивную загрузку с помощью -r для создания зеркала веб-сайтов.
  • Загрузку в фоновом режиме с помощью -b для длительных загрузок.
  • Использование аутентификации с помощью --user и --password для доступа к защищенным ресурсам.
  • Установку таймаутов, повторных попыток и других параметров соединения.

С этими возможностями вы можете эффективно обрабатывать широкий спектр сценариев загрузки из командной строки Linux.