在 Linux 命令行中检查网站可用性有多种方法,可以根据需求选择工具和策略。以下是常用的命令和技巧:
1. 使用 curl
检查 HTTP 响应
curl
是最常用的工具,可获取详细的 HTTP 响应信息。
基本用法:
# 获取完整响应内容(包括状态码) curl -I https://example.com # 仅显示 HTTP 状态码 curl -s -o /dev/null -w "%{http_code}\n" https://example.com
参数解释:
-
-I
:仅显示响应头(快速检查状态码)。 -
-s
:静默模式(不显示进度或错误信息)。 -
-o /dev/null
:丢弃响应内容。 -
-w "%{http_code}"
:输出 HTTP 状态码(如200
、404
、500
等)。
示例输出:
-
正常响应:
200
-
页面不存在:
404
-
服务器错误:
500
2. 使用 wget
测试连接
wget
支持下载文件并显示连接状态,适合检查可用性。
# 静默下载并检查退出码 wget -q --spider https://example.com # 查看退出码(0 表示成功,非 0 表示失败) echo $?
参数解释:
-
--spider
:模拟下载,不保存文件。 -
-q
:静默模式。
3. 使用 ping
检查网络连通性
测试目标服务器的网络层连通性(不涉及 HTTP 服务):
ping -c 4 example.com
-
结果分析:
-
收到回复(
64 bytes from ...
):网络连通正常。 -
100% packet loss
:网络不可达(可能防火墙禁用了 ICMP)。
-
4. 使用 nc
(netcat)检查端口开放状态
确认目标网站的端口(如 HTTP 80/HTTPS 443)是否开放:
nc -zv example.com 80 # 检查 HTTP 端口 nc -zv example.com 443 # 检查 HTTPS 端口
参数解释:
-
-z
:扫描模式(不发送数据)。 -
-v
:显示详细信息。
示例输出:
-
成功:
Connection to example.com 80 port [tcp/http] succeeded!
-
失败:
nc: connect to example.com port 80 (tcp) failed: Connection refused
5. 使用 telnet
手动测试 HTTP 连接
通过原始 TCP 连接手动发送 HTTP 请求(适合调试):
telnet example.com 80
GET / HTTP/1.1
Host: example.com
输入后按两次回车,观察服务器返回的 HTTP 响应头和状态码。
6. 使用 httpie
(更友好的 HTTP 客户端)
需要先安装 httpie
:
sudo apt install httpie # Debian/Ubuntu sudo dnf install httpie # Fedora
基本用法:
http GET https://example.com
7. 检查 DNS 解析
确认域名能否正确解析为 IP 地址:
nslookup example.com dig example.com
8. 自动化脚本示例
结合退出码和条件判断,编写自动化检查脚本:
#!/bin/bash URL="https://example.com" STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" $URL) if [ $STATUS_CODE -eq 200 ]; then echo "网站正常(状态码:$STATUS_CODE)" else echo "网站异常(状态码:$STATUS_CODE)" fi
常见问题排查
-
超时问题:
-
使用
curl
的--connect-timeout
参数:curl --connect-timeout 10 https://example.com
-
-
HTTPS 证书错误:
-
忽略证书验证(不推荐长期使用):
curl -k https://example.com
-
-
跟随重定向:
-
使用
-L
参数追踪重定向:curl -L https://example.com
-
总结工具对比
工具 | 用途 | 优点 | 缺点 |
---|---|---|---|
curl |
HTTP 请求、状态码、内容检查 | 功能全面,支持 HTTPS | 输出可能需要过滤 |
wget |
下载文件、模拟请求 | 简单易用 | 默认显示冗余信息 |
ping |
网络层连通性检查 | 快速判断是否可达 | 不检查应用层服务 |
nc |
端口扫描 | 快速确认端口开放 | 不支持 HTTPS 内容检查 |
telnet |
手动调试 TCP 连接 | 灵活 | 需要手动输入请求 |
根据需求选择合适的工具,组合使用可以更全面地诊断问题。