掌握命令行网络工具是系统管理员、开发者及高级用户的核心技能,在服务器管理、资源受限设备操作及自动化任务中发挥关键作用。
基础工具:获取网络内容
-
curl
– 强大的数据传输工具- 功能: 支持多种协议(HTTP, HTTPS, FTP, FTPS, SCP, SFTP 等),用于下载文件、上传数据、测试 API、获取网页内容等,以输出内容或保存文件为目标。
- 常用命令:
- 获取网页内容并显示在终端:
curl https://www.example.com
- 保存到文件:
curl -o output.html https://www.example.com
- 下载文件并保留原始文件名:
curl -O https://www.example.com/files/bigfile.zip
- 跟随重定向 (重要!很多网站需要):
curl -L https://www.example.com/redirected-page
- 发送 GET 请求带查询参数:
curl "https://api.example.com/data?param1=value1¶m2=value2"
- 发送 POST 请求带表单数据:
curl -X POST -d "username=admin&password=secret" https://api.example.com/login
- 发送 POST 请求带 JSON 数据:
curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://api.example.com/data
- 包含 HTTP 头信息 (User-Agent, Cookie):
curl -H "User-Agent: MyCustomAgent" -H "Cookie: name=value" https://www.example.com
- 使用基本认证:
curl -u username:password https://secure.example.com
- 获取网页内容并显示在终端:
- 优势: 功能极其丰富,脚本友好,支持协议多,输出处理灵活。
-
wget
– 可靠的递归下载工具- 功能: 主要用于从 web 下载文件,支持 HTTP, HTTPS, FTP。核心优势在于递归下载整个网站或目录结构。
- 常用命令:
- 下载单个文件:
wget https://www.example.com/images/logo.png
- 下载文件并指定保存文件名:
wget -O customname.zip https://www.example.com/files/download.zip
- 断点续传:
wget -c https://www.example.com/largefile.iso
- 后台下载:
wget -b https://www.example.com/largefile.iso
- 递归下载整个网站 (谨慎使用!尊重 robots.txt 和网站负载):
wget --recursive --page-requisites --convert-links --no-parent https://www.example.com/section/
--recursive
: 递归下载--page-requisites
: 下载页面所需的所有元素(图片、CSS、JS)--convert-links
: 转换链接以便本地浏览--no-parent
: 不下载父目录
- 限制下载速率 (避免占用过多带宽):
wget --limit-rate=200k https://www.example.com/largefile.iso
- 下载单个文件:
- 优势: 递归下载能力强,支持断点续传,简单可靠。
命令行网页浏览器:浏览与交互
-
lynx
– 经典文本浏览器- 功能: 纯文本模式的网页浏览器,可以浏览网页、填写表单、跟随链接。
- 基本使用:
- 启动并打开网址:
lynx https://news.ycombinator.com
- 使用方向键导航,
Enter
键跟随链接,Q
键退出, 键查看帮助。
- 启动并打开网址:
- 特点: 极其轻量,在低带宽或纯终端环境下非常有用,适合快速查看网页文本内容、阅读文档或新闻聚合站点(如 Hacker News)。
-
links
/elinks
– 增强型文本浏览器- 功能: 类似
lynx
,但通常提供更多功能,如框架支持、部分表格渲染、鼠标支持(在支持鼠标的终端如xterm
中)、选项卡浏览(elinks
)。 - 基本使用:
links https://en.wikipedia.org/wiki/Command-line_interface # 或 elinks https://en.wikipedia.org/wiki/Command-line_interface
- 特点: 比
lynx
更现代,界面和功能更丰富一些,仍然是纯文本/简易图形(links -g
)模式。
- 功能: 类似
高级技巧与配置
-
处理代理服务器
- 如果网络需要通过代理访问互联网,需要为命令行工具配置代理:
- 环境变量 (最常用):
- HTTP 代理:
export http_proxy="http://proxy-server:port" export https_proxy="http://proxy-server:port" # 或 "https://proxy-server:port",但很多代理用 HTTP 代理 HTTPS 流量
- 需要认证的代理:
export http_proxy="http://username:password@proxy-server:port" export https_proxy="http://username:password@proxy-server:port"
- HTTP 代理:
- 命令行参数 (工具特定):
curl
使用-x
或--proxy
:curl -x http://proxy-server:port https://www.example.com curl -x http://user:pass@proxy-server:port https://www.example.com
wget
在配置文件 (/etc/wgetrc
或~/.wgetrc
) 中设置或使用-e
选项:wget -e use_proxy=yes -e http_proxy=http://proxy-server:port https://www.example.com
lynx
/links
/elinks
通常也支持通过环境变量或自身配置文件设置代理。
-
ssh
隧道 (端口转发)- 当需要安全地通过一个中间服务器(跳板机/堡垒机)访问网络资源或绕过某些限制时:
- 动态 SOCKS 代理 (功能强大):
ssh -D 1080 user@jump-server
此命令在你的本地机器 (
0.0.1
) 的1080
端口创建了一个 SOCKS5 代理,然后配置你的命令行工具(通过环境变量或参数)使用socks5h://127.0.0.1:1080
作为代理。curl
示例:curl --proxy socks5h://127.0.0.1:1080 https://www.internal-site.com
(
socks5h
让代理解析主机名,避免本地 DNS 泄露问题)。 - 本地端口转发: 将远程服务器的某个端口映射到本地。
- 远程端口转发: 将本地端口映射到远程服务器。
-
处理 HTTPS/SSL 证书问题
curl
/wget
遇到自签名证书或证书错误:- 临时忽略验证 (不推荐,有安全风险!仅用于测试或可信环境):
curl --insecure https://internal-site-with-self-signed-cert wget --no-check-certificate https://internal-site-with-self-signed-cert
- 指定自定义 CA 证书包 (推荐):
curl --cacert /path/to/custom-ca-bundle.pem https://internal-site wget --ca-certificate=/path/to/custom-ca-bundle.pem https://internal-site
- 临时忽略验证 (不推荐,有安全风险!仅用于测试或可信环境):
安全与注意事项
- 警惕管道 () 执行: 避免直接将
curl
或wget
的输出通过管道传递给sh
或bash
执行,除非你 100% 信任来源且明确知道脚本内容,这有严重的安全风险!- 危险示例:
curl http://some-site.com/install.sh | sh
- 安全做法: 先下载脚本,检查内容,然后再执行:
curl -O http://some-site.com/install.sh less install.sh # 仔细检查内容! chmod +x install.sh # 如果需要 ./install.sh
- 危险示例:
- 保护敏感信息: 不要在命令行历史中留下包含密码、API 密钥的命令,使用环境变量、配置文件(设置适当权限)或交互式输入。
- 尊重
robots.txt
: 使用wget
递归下载时,默认会遵守目标网站的robots.txt
规则,使用-e robots=off
可以忽略,但请确保你的行为符合道德规范和法律法规,避免对目标网站造成过大负担。 - 注意带宽和资源: 在服务器或共享环境中使用下载工具时,注意限制下载速率 (
wget --limit-rate
,curl --limit-rate
),避免耗尽带宽或磁盘空间。 - 理解工具差异:
curl
更侧重数据传输和协议交互,wget
更侧重文件下载(尤其是递归),选择最适合任务的工具。 - Windows 用户: 上述工具(
curl
,wget
,lynx
)在 Windows 上可通过 Cygwin, MSYS2, 或 WSL 获得,PowerShell 也内置了Invoke-WebRequest
(iwr
或curl
别名) 和Invoke-RestMethod
(irm
) 等强大的网络命令。
命令行上网提供了高效、灵活、可脚本化的网络访问能力,核心工具 curl
和 wget
用于获取数据和文件,lynx
/links
/elinks
提供基本的交互式浏览,掌握代理配置、ssh
隧道和 SSL 证书处理是应对复杂网络环境的关键。始终将安全性放在首位,谨慎处理下载内容、保护敏感信息并尊重网络规则。 熟练运用这些工具将极大提升你在服务器管理、开发和自动化任务中的效率。
引用说明:
curl
官方文档: https://curl.se/docs/wget
GNU 手册: https://www.gnu.org/software/wget/manual/lynx
官方信息: https://lynx.invisible-island.net/links
主页: http://links.twibright.com/elinks
主页: http://elinks.cz/- OpenSSH 手册页 (关于端口转发):
man ssh
(本地终端查看) - Mozilla 开发者网络 (MDN) – HTTP: https://developer.mozilla.org/en-US/docs/Web/HTTP (理解协议基础)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5310.html