UNIX 和 Linux ping 命令示例
您可以使用该ping命令测试本地服务器/计算机与远程 UNIX 和 Linux 服务器之间的连接。ping 命令每秒向主机发送一次 ICMP 回显请求 (ECHO_REQUEST) 数据包。通过 ICMP 回显响应数据包回显的每个数据包都会写入标准输出,包括往返时间。使用 ping 命令找出:
- 如果远程服务器已启动并正在运行。
- 测试网络问题。
- 验证网络问题。
- 测试与本地或远程网关的网络连接。
让我们看看针对新系统管理员和开发人员的 ping 命令语法和示例。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 网络实用程序 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 4 分钟 |
Unix ping 命令语法
基本语法如下:
$ ping serverNameHere
$ ping ServerIPAddress
$ ping 192.168.1.2
$ ping www.example.com
$ ping [options] server-ip
$ ping [options] server-name-here
Unix ping 命令示例
打开终端应用程序并输入以下命令来测试与服务器 yahoo.com 服务器的连接,输入:
$ ping yahoo.com
示例输出:
PING yahoo.com (209.191.93.53) 56(84) bytes of data. 64 bytes from b1.www.vip.mud.yahoo.com (209.191.93.53): icmp_seq=1 ttl=50 time=311 ms 64 bytes from b1.www.vip.mud.yahoo.com (209.191.93.53): icmp_seq=2 ttl=50 time=310 ms 64 bytes from b1.www.vip.mud.yahoo.com (209.191.93.53): icmp_seq=3 ttl=50 time=309 ms 64 bytes from b1.www.vip.mud.yahoo.com (209.191.93.53): icmp_seq=4 ttl=50 time=310 ms ^C --- yahoo.com ping statistics --- 5 packets transmitted, 4 received, 20% packet loss, time 4007ms rtt min/avg/max/mdev = 309.710/310.718/311.594/0.966 ms
您需要按CTRL+c来终止 ping 会话。
在 Unix 和 Linux 中发送有限数量的 ping
您可以在发送 4 个 ECHO_REQUEST 数据包后停止,选项-c如下:
示例输出:
# Controlling the number of pings i.e. #
# only send 4 ping requests to example.com server #
$ ping -c 4 example.com
图 01 基本 Unix ping 命令示例
避免 DNS 查找
传递该-n选项可避免查找主机地址的符号名称,即仅输出数字:
$ ping -n -c 4 example.com
换句话说,将网络地址显示为数字,而不解析 DNS 名称。这会加快 ping 命令的速度。
当远程服务器上线时获取声音输出
假设您重新启动了远程服务器,或者您的家庭网络和 ISP 网络之间的连接中断。您可以使用 small-a选项收到通知。当收到任何数据包时,以下命令将在输出中输出一个铃声 (ASCII 0x07) 字符:
$ ping -a host-name-here
$ ping -a 192.168.1.254
自适应 ping
以下(大写-A)将在传输下一个数据包之前未接收到任何数据包时输出铃声字符:
$ ping -A www.example.com
$ ping -A 192.168.1.254
记录路线
通过传递选项显示给定地址/ DNS 名称的路由-R:
$ ping -R www.example.com
输出:
PING www.example.com (172.66.43.53): 56 data bytes 64 bytes from 172.66.43.53: icmp_seq=0 ttl=59 time=58.880 ms RR: 139.162.0.14 162.158.160.215 162.158.160.1 172.70.140.1 172.66.43.53 172.66.43.53 172.70.140.1 162.158.160.1 64 bytes from 172.66.43.53: icmp_seq=1 ttl=59 time=57.453 ms (same route) 64 bytes from 172.66.43.53: icmp_seq=2 ttl=59 time=86.837 ms (same route) 64 bytes from 172.66.43.53: icmp_seq=3 ttl=59 time=51.402 ms (same route)
但是,traceroute 命令仍然是更好的选择。
洪水 ping 测试
传递-f选项并且必须以 root 用户身份运行:
$ sudo ping -f example.com
输出:
Password: PING example.com (172.66.43.53): 56 data bytes .........................................................................................................................^C --- example.com ping statistics --- 2550 packets transmitted, 2429 packets received, 4.7% packet loss round-trip min/avg/max/stddev = 43.296/51.730/130.055/17.132 ms
它会以数据包返回的速度或每秒 100 次的速度输出数据包,以较大者为准。对于每个发送的 ECHO_REQUEST,都会打印一个句点“。”,而对于每个收到的 ECHO_REPLY,都会打印一个退格键。
如何使用 ping 预加载模式
您可以使用-l {packets}选项设置预加载模式。然后 ping 命令会尽可能快地发送那么多数据包,然后才会进入其正常行为模式。只有超级用户 (root) 可以使用此选项。比如说,发送 10 个预加载数据包:
$ ping -l 10 www.example.com
设置 ping 超时时间
您可以在 ping 命令退出之前设置一个超时秒数,无论使用该选项已收到多少个数据包-t {SECONDS}:
超时在您的 shell 脚本中很有用:
$ ping -t 10 google.com
$ ping -t 12 example.com
if ! ping -q -t 20 backup-nas03.example.net>/dev/null then echo "Failed. Nas server is offline." else echo "Starting backup ... " #/path/to/backup-agent --opt1 --opt2 fi
这-q是安静的输出,即除了启动时和完成时的摘要行之外不显示任何内容,并且为了隐藏它,我使用 /dev/null 重定向输出。
IPv4 与 IPv6 ping 请求
传递-4选项以使用 IPv4 地址,而不管目标如何解析。同样,传递选项-6以强制使用 IPv6,而不管目标名称如何解析。
$ ping -4 www.example.com # IPv4 ping
$ ping -6 www.example.com # IPv6 ping
$ ping6 www.example.com # Always use the IPv6
总结
您学习了如何向网络主机发送 ICMP ECHO_REQUEST 数据包(乒乓):
- 通过 IP 或主机名(包括FQDN) Ping 主机:
$ ping <host>
$ ping <IP_Address>
$ ping <FQDN> - 仅发送特定次数的 ping 请求:
$ ping -c <count> <host>
$ ping -c <count> <IP_Address> - 以下是如何 ping 主机,指定请求之间的间隔(以秒为单位)(默认为 1 秒):
$ ping -i <seconds> <host>
$ ping -i <seconds> <IP_Address> - 禁用 DNS 查找:
$ ping -n <host>
$ ping -n <IP_Address> - 当收到数据包时,ping 主机并响铃。当您使用reboot 命令或shutdown 命令重新启动机器时很有用。这仅在您的 Linux 或 Unix 终端支持时才有效:
$ ping -a <host>
$ ping -a <IP_Address> - 如果使用 ping 命令时没有收到响应,还会显示一条消息“ no answer yet for icmp_seq= ”:输出:
$ ping -O <host>
$ ping -O <IP_Addresst>
$ ping -O 192.168.2.19
PING 192.168.2.19 (192.168.2.19) 56(84) bytes of data. no answer yet for icmp_seq=1 no answer yet for icmp_seq=2 From 192.168.2.25 icmp_seq=1 Destination Host Unreachable From 192.168.2.25 icmp_seq=2 Destination Host Unreachable From 192.168.2.25 icmp_seq=3 Destination Host Unreachable no answer yet for icmp_seq=3 From 192.168.2.25 icmp_seq=4 Destination Host Unreachable --- 192.168.2.19 ping statistics --- 4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3080ms pipe 3
我为 Unix、*BSD 和 macOS 桌面用户解释了各种 ping 命令示例。但是,ping 命令还有其他选项。因此,我建议您使用 man 命令或传递 --help 选项来阅读文档,如下所示:
$ man ping
$ ping --help #<---GNU/ping