介绍
欢迎来到这个关于 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 表示成功)
- 文件大小(约 21MB)
- 下载进度
- 下载速度和时间
- 确认文件已以其原始名称保存
让我们验证文件是否已正确下载:
ls -lh
你应该会在目录中看到 Python-3.6.1.tgz 文件及其相应的大小。
使用自定义文件名进行下载
在这一步中,我们将探讨如何下载文件并使用自定义文件名保存,而不是使用 URL 中的默认文件名。
使用 -O 选项
-O(大写字母 O,不是数字 0)选项允许你指定输出文件的名称。在以下情况下,这个选项非常有用:
- 你想要一个更具描述性的文件名
- 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(安静模式):抑制输出,适用于脚本-c(继续):恢复部分下载的文件--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,每个 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 读取输入文件
现在,我们可以使用 wget 的 -i 选项从文件中读取 URL 并下载所有文件:
wget -i download_list.txt
这个命令告诉 wget 从 download_list.txt 中读取 URL,并按顺序下载每个文件。你会看到每个下载的输出,类似于下载单个文件时的输出:
--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
创建批量下载脚本
为了方便以后使用,让我们创建一个简单的 shell 脚本,用于从列表中下载文件。这展示了如何在自动化操作中使用 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 命令相同,但它被封装在一个脚本中,你可以重复使用。
总结
在本次实验中,你学习了如何在 Linux 中使用 wget 命令进行非交互式下载。现在你具备以下技能:
- 使用基本的
wget命令下载单个文件 - 使用
-O选项以自定义名称保存下载的文件 - 创建 URL 列表,并使用
-i选项一次性下载多个文件 - 创建简单的自动化脚本进行批量下载
这些技能对于系统管理员、开发者以及任何需要从命令行高效下载文件的 Linux 用户来说都非常有价值。非交互式下载在自动化操作、远程服务器管理以及没有图形界面的场景中尤其有用。
你可以自行探索 wget 的其他一些特性,包括:
- 使用
-r进行递归下载,用于镜像网站 - 使用
-b在后台进行长时间下载 - 使用
--user和--password进行身份验证,以访问受保护的资源 - 设置超时时间、重试次数和其他连接参数
有了这些功能,你可以在 Linux 命令行上高效地处理各种下载场景。



