![如何在运行 ping 时抑制“目标主机不可达”](https://linux22.com/image/1332706/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%BF%90%E8%A1%8C%20ping%20%E6%97%B6%E6%8A%91%E5%88%B6%E2%80%9C%E7%9B%AE%E6%A0%87%E4%B8%BB%E6%9C%BA%E4%B8%8D%E5%8F%AF%E8%BE%BE%E2%80%9D.png)
当我运行 ping 命令时,我经常会想了解某台机器何时启动,例如重新启动。但最近(阅读:在过去几年中)我注意到,在 10 或 15 秒没有收到回复后,ping 开始变得非常混乱,反复显示“目标主机无法访问”每一个第二!这非常烦人。ping 的一个很棒的诊断用途用过的任何输出都意味着主机已启动。
那么,我怎样才能摆脱这种愚蠢而烦人的行为,让它只打印实际的 ping?这些“目标主机无法访问”不会像我期望的那样进入 stderr,就像一个行为良好的程序处理错误一样,所以我无法重定向 stderr 来摆脱它们!
答案1
当系统不知道如何向远程主机发送 ping 请求时,系统会给出“目标主机不可访问”信息。这意味着您的系统或中间的路由器没有允许其将数据包转发到负责该网络的路由器的路由表条目/规则。
并且它变得“极其繁琐”,因为这种情况发生在每个数据包上(即它没有丢失,但本质上你收到了每个数据包的“不知道如何传送这个数据包”的消息)。
您可以通过 grep 过滤掉它们
ping 192.168.5.1 | grep -v "host unreachable"
答案2
-i 选项可以帮助您(来自 ping 手册页):
-i interval
Wait interval seconds between sending each packet. The
default is to wait for one second between each packet
normally, or not to wait in flood mode. Only super-user
may set interval to values less 0.2 seconds.