Linux 环境下 wget 命令深度解析与实战技巧
递归目录下载实战
在 Linux 运维场景中,经常需要从远程服务器同步整个资源目录。使用 wget 的递归模式配合特定参数,可以精确控制下载范围。
wget -r -np -nH --cut-dirs=2 --accept '*.tar.gz' http://mirror.example.org/pub/software/
上述命令的关键参数含义如下:
- -r: 启用递归下载模式。
- -np: 禁止向上追溯父级目录,防止拉取无关数据。
- -nH: 移除本地文件结构中的主机名层级。
- --cut-dirs=2: 忽略目标 URL 的前两级路径。
- --accept: 白名单机制,仅保留指定后缀的文件(如 .tar.gz)。
核心功能参数速查
wget 支持断点续传、后台运行及代理配置等功能,以下是高频使用的选项分类整理。
连接与重试策略
- -c, --continue: 开启断点续传,自动检测已存在文件片段并从中继位置继续。
- -t, --tries: 设定最大重试次数,输入
0表示无限重试直至成功。 - -T, --timeout: 定义连接超时阈值(秒),默认通常为 17 秒。
文件控制
- -nc: 避免覆盖服务器上已有的同名文件。
- --convert-links: 将下载后的 HTML 或 CSS 内部链接转换为本地相对路径。
- --no-clobber: 若文件不存在则下载,存在则跳过。
批量部署脚本示例
下载完成后,通常需要对本地软件包进行自动化安装。以下脚本展示了如何遍历 RPM 包进行批量安装,并在出错时提供反馈。
#!/bin/bash
# 定义软件包存储目录
PKG_ROOT="/opt/deploy/packages"
# 检查目录是否存在
if [ ! -d "$PKG_ROOT" ]; then
echo "错误:目录 $PKG_ROOT 未找到"
exit 1
fi
# 循环安装所有 rpm 文件
install_count=0
for pkg_file in "${PKG_ROOT}"/*.rpm; do
if [ -f "$pkg_file" ]; then
echo "正在安装:$(basename "$pkg_file")"
rpm -ivh --force "$pkg_file" 2>&1 && ((install_count++)) || echo "安装失败:$pkg_file"
fi
done
echo "完成安装,总数:$install_count"
定时任务与自动化调度
对于大文件或带宽受限场景,建议结合 crontab 实现夜间自动更新。配置时需确保服务进程被正确管理,避免占用白天高峰资源。
# 编辑 crontab
*/0 * * * * wget -c -N -q http://data.example.net/update.tar.gz -P /tmp/backup
利用 -N (--timestamping) 参数可比较服务端时间戳,仅当源文件较新时才触发传输。同时建议在非工作时段执行,并设置系统清理任务以释放缓存空间。
网络环境与认证配置
部分内网环境需要通过代理访问外部资源。需在用户主目录下创建 .wgetrc 配置文件来持久化代理设置:
http-proxy = http://proxy.internal:8080
https-proxy = http://proxy.internal:8080
ftp-proxy = http://proxy.internal:8080
若目标站点启用了 HTTP Basic Auth,可通过命令行参数直接注入凭证:
wget --user=admin --password=Secret123 http://secure.server.com/auth-resource.zip
URL 列表生成方法
当需要下载网页内链生成的多个文件时,可先生成索引列表再喂给 wget。
# 提取包含特定后缀的资源地址
curl -L http://source.website/files/index.html | \
grep -o 'href="[^"]*\.(jpg|png)">' | \
sed 's/href="//' | sed 's/">//' > url_list.txt
# 批量读取执行
wget -i url_list.txt
常用参数汇总
下表罗列了 wget 的主要参数及其应用场景。
| 参数 | 作用描述 |
|---|---|
| -r | 递归下载整个站点 |
| -m | 镜像模式,等同 -r -N -l inf --no-remove-listing |
| -k | 转换链接为本地路径 |
| -P PREFIX | 设定下载文件的保存前缀目录 |
| -o FILE | 将日志输出重定向至指定文件 |
| -b | 后台运行并记录到 wget-log |
| A LIST | 接受列表(Accept List) |
| R LIST | 拒绝列表(Reject List) |