Linux

相當於 Linux 上的 ping -o

  • November 19, 2021

顯然,MacOsping有一個-o選項,意思是“一旦收到第一個成功的響應就返回”或類似的東西。請參閱:https ://stackoverflow.com/a/6119327/4561887 。

Linux Ubuntu上是否有等價物?我們怎樣才能最好地達到同樣的結果?

我的版本ping utility, iputils-s20161105ping -V.

更新:我在這裡找到了 MacOs 文件:https ://ss64.com/osx/ping.html

-o         Exit successfully after receiving one reply packet.

可以有各種變通方法來嘗試使ping行為像 Mac 一樣ping -o,但是有一個命令fping可以做到這一點,並且旨在同時用於腳本和多個目標。從手冊

$$ … $$ 在預設模式下,如果目標回复,則將其記錄並從目標列表中刪除以進行檢查;如果目標在特定時間限制和/或重試限制內沒有響應,則將其指定為不可達。

$$ … $$

例子:

$ time fping example.com
example.com is alive

real    0m0.074s
user    0m0.000s
sys 0m0.004s
$ echo $?
0

$ fping 192.0.2.3 127.0.0.1
ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3
127.0.0.1 is alive
ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3
ICMP Host Unreachable from 203.0.113.1 for ICMP Echo sent to 192.0.2.3
192.0.2.3 is unreachable
$ echo $?
1
$ fping -q 192.0.2.3
$ echo $?
1
使用 ping:
ping -c 1 ping_address
ping -c 1 192.168.1.68 #example
  • c參數用於計算數據包,所以你只需要1這就是為什麼 –>-c 1
  • 如果您$?在使用 ping 後立即使用命令(退出狀態)成功,您應該得到0(成功,OK)。否則,您會得到12來自輸入$?,含義,錯誤
PING 返回輸出:

1 received, 0% packet loss–>成功 echo $?返回0

0 received, 100% packet loss–>失敗 echo $?返回1

對於無限循環和服務可用時停止,需要在while循環中進行管道

while ! ping -c1 -W1 192.168.1.68; :;done
  • while NOT alive 繼續循環並始終以退出狀態成功退出 :
  • -W1等待 1 秒

將其複製到具有名稱的文件中pingo

#!/usr/bin/bash
while ! ping -c1 -W1 "$1"; do
   : && echo "NOT ALIVE"
done
  • :是 Null 命令或無效果,命令什麼也不做或退出狀態總是成功,在這種情況下,類似於鍵入 true。是 內置的 Bourne Shell
  • 手段$1論點$$ ping address in this case $$, example pingo $1-> 在這種情況下是一個數字地址。pingo 192.168.1.68

這意味著 –> 創建一個具有 name 的文件夾bin,在該文件夾中創建一個具有 name 的文件pingo允許將文件作為程序執行

mkdir ~/bin    # make directory at /home/user/bin
cd ~/bin       # change to /home/user/bin directory
touch pingo    # create file pingo copy the above command and save it
chmod +x pingo # give permission to execute
  • /home/user/bin文件夾是您自己的程序的預設文件夾,無論您是什麼,都可以在終端中執行,就像 ping

就是這樣,現在您可以pingo使用任何地址執行,就像ping -o.

來自 PING 手冊:
  • 如果 ping 根本沒有 收到 任何回複數據包,它將以程式碼 1退出。

  • 如果同時指定了數據包計數截止日期,並且在截止日期到達時收到的數據包少於計數,它也會以程式碼 1退出。在其他錯誤中,它以****程式碼 2退出。範例:

    • 計數 1 並等待 2 秒,在第 2 秒沒有到達,然後退出並出現錯誤
  • 否則,它以程式碼 0退出。$$ OK $$

這使得可以使用**退出程式碼**查看主機是否處於活動**狀態。

引用自:https://unix.stackexchange.com/questions/678045