So geben Sie den Befehl „Ping“ ein, um Uhrzeit und Datum des Pings anzuzeigen


39

Wenn ich pinge, habe ich diese Anzeige:

> ping -i 4 www.google.fr 
64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=503 ttl=46 time=45.5 ms
.......
.......
64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=508 ttl=46 time=44.9 ms
64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=509 ttl=46 time=45.1 ms

Ich hätte gerne vorher die Zeit des Ping.

So etwas wie:

> (right functions) + ping -i 7 www.google.fr 
mardi 15 mai 2012, 10:29:06 (UTC+0200) - 64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=503 ttl=46 time=45.5 ms
.......
.......
mardi 15 mai 2012, 10:29:13 (UTC+0200) - 64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=508 ttl=46 time=44.9 ms
mardi 15 mai 2012, 10:29:20 (UTC+0200) - 64 bytes from wi-in-f94.1e100.net (173.194.67.94): icmp_seq=509 ttl=46 time=45.1 ms

Wie würden Sie dies in einer Befehlszeile tun (wenn es möglich ist)?


Antworten:


77

Verwenden:

ping www.google.fr | while read pong; do echo "$(date): $pong"; done

Sie erhalten das Ergebnis wie folgt:

Bildbeschreibung hier eingeben


1
Wow, sehr nett. Und hilfreich, um Shell-Sachen zu lernen. Danke!
Olivier Pons

Betriebszeit in Sekundenping 192.168.70.1 | while read pong; do echo "$(awk '{print $1}' /proc/uptime): $pong"; done
dps

16

Eine weitere Möglichkeit, die ping -DOption zu verwenden, mit der Sie den Zeitstempel als Unix-Zeit erhalten.

tilo@t-ubuntu:~$ ping google.com -D
PING google.com (173.194.33.73) 56(84) bytes of data.
[1388886989.442413] 64 bytes from sea09s15-in-f9.1e100.net (173.194.33.73): icmp_req=1 ttl=57 time=11.1 ms
[1388886990.443845] 64 bytes from sea09s15-in-f9.1e100.net (173.194.33.73): icmp_req=2 ttl=57 time=11.0 ms
[1388886991.445200] 64 bytes from sea09s15-in-f9.1e100.net (173.194.33.73): icmp_req=3 ttl=57 time=10.8 ms
[1388886992.446617] 64 bytes from sea09s15-in-f9.1e100.net (173.194.33.73): icmp_req=4 ttl=57 time=10.9 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 10.860/11.005/11.139/0.123 ms
tilo@t-ubuntu:~$ 

Hier eine Version des "Achu" -Befehls mit etwas anderem Format:

ping www.google.com -i 10 -c 3000 | while read pong; do echo "$(date +%Y-%m-%d_%H%M%S): $pong"; done >PingTest_2014-01-04.log

Das bringt dir:

2014-01-04_175748: 64 bytes from sea09s16-in-f19.1e100.net (173.194.33.115): icmp_req=13 ttl=57 time=10.5 ms

6

Es gibt ein Hilfsprogramm ts, das stdin liest, Zeitstempel hinzufügt und in stdout schreibt:

me@my-laptop:~$ ping localhost | ts
Nov 08 09:15:41 PING localhost (127.0.0.1) 56(84) bytes of data.
Nov 08 09:15:41 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.060 ms
Nov 08 09:15:42 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.098 ms
Nov 08 09:15:43 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.082 ms
Nov 08 09:15:44 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.091 ms

Es kann in Ubuntu mit installiert werden .sudo apt install moreutils


1
1 Wie Nebenbei bemerkt - ts in Ubuntu (mindestens 16,04) standardmäßig installiert ist nicht, so dass Sie es als eine Installation erforderlichapt install moreutils
dmikam

3

Sie können auch Folgendes verwenden gawk(oder awk, wenn Sie /etc/alternatives/awkdarauf hinweisen /usr/bin/gawk):

ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'

Dies ähnelt dem Ansatz in Achus Antwort , aber pingdie Ausgabe wird an gawkeine Shell-Schleife weitergeleitet, die aufruft date. Wie bei diesem Ansatz funktioniert es auch ohne -c, aber wenn Sie Ping nicht nach n Pings anhalten und die Schleife mit + anhalten , werden die üblichen Statistiken nicht gedruckt.-c nCtrlCping

ek@Io:~$ ping -c 4 www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:09:51 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:09:51 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=327 ms
Tue 03 Jan 2017 10:09:52 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=302 ms
Tue 03 Jan 2017 10:09:53 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=282 ms
Tue 03 Jan 2017 10:09:54 AM EST: 64 bytes from sea15s08-in-f3.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=349 ms
Tue 03 Jan 2017 10:09:54 AM EST:
Tue 03 Jan 2017 10:09:54 AM EST: --- www.google.fr ping statistics ---
Tue 03 Jan 2017 10:09:54 AM EST: 4 packets transmitted, 4 received, 0% packet loss, time 3003ms
Tue 03 Jan 2017 10:09:54 AM EST: rtt min/avg/max/mdev = 282.035/315.227/349.166/25.398 ms
ek@Io:~$ ping www.google.fr | gawk '{print strftime("%c: ") $0}'
Tue 03 Jan 2017 10:10:35 AM EST: PING www.google.fr (216.58.193.99) 56(84) bytes of data.
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=1 ttl=51 time=305 ms
Tue 03 Jan 2017 10:10:35 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=2 ttl=51 time=365 ms
Tue 03 Jan 2017 10:10:36 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=3 ttl=51 time=390 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=4 ttl=51 time=824 ms
Tue 03 Jan 2017 10:10:38 AM EST: 64 bytes from sea15s08-in-f99.1e100.net (216.58.193.99): icmp_seq=5 ttl=51 time=287 ms
^C

Dies geschieht unabhängig davon ping, ob die Ausgabe an gawkeine Shell- whileSchleife weitergeleitet wird. Der Grund dafür ist, dass der Befehl auf der rechten Seite der Pipe statt SIGINTping empfängt, wenn + gedrückt wird, und nicht weiß, ob die Statistik vor dem Beenden gedruckt werden soll.CtrlCping

Wenn Sie ausgeführt haben , pingohne -cauf der linken Seite eines Rohres (wie oben dargestellt) und wollen , dass es in einer solchen Art und Weise zu beenden , dass es nach wie vor die Statistik gedruckt werden kann , statt Drücken Ctrl+ Cin dem Terminal , wo es läuft, könnten Sie laufen von einem anderen Terminal, ersetzt durch die Prozess-ID des Befehls. Wenn Sie nur eine Instanz von ausführen, können Sie einfach verwenden .kill -INT PIDPIDpingpingkillall -INT ping

Alternativ können Sie den pingBefehl auf der linken Seite der Pipe durch einen Befehl ersetzen , der eine Shell ausführt, die Prozess-ID dieser Shell meldet und diese Shell dann durch den pingBefehl ersetzt (wodurch dieselbe PID verwendet wird):

sh -c 'echo $$; exec ping www.google.fr' | gawk '{print strftime("%c: ") $0}'

In der ersten Ausgabezeile wird dann die Prozess-ID des pingBefehls angezeigt (die sich normalerweise jedes Mal unterscheidet). Es würde so aussehen, aber mit einer anderen Uhrzeit und einem anderen Datum und wahrscheinlich einer anderen Prozess-ID:

Tue 20 Mar 2018 12:11:13 PM EDT: 7557

Von einem anderen Terminal aus können Sie dann den Befehl ausführen kill -INT 7557und 7557durch die tatsächliche Prozess-ID ersetzen, die Sie gesehen haben, um den pingBefehl so zu beenden , dass er Statistiken druckt.

(Wenn Sie die Jobsteuerungsfunktionen Ihrer Shell nutzen , können Sie dies auch innerhalb desselben Terminals erreichen. Wenn Sie jedoch Text von Ihrem Terminal kopieren möchten, ohne einen externen Teil entfernen zu müssen, in dem Sie Befehle in diesem Terminal ausgeführt haben, dann Sie sollten pingvon einem separaten Terminal aus kündigen .)

Weitere Lektüre:


Gibt es eine Möglichkeit, Strg + C zuerst an Ping zu senden?
Atti

1
@atti Ja, Sie können mit oder speziell SIGINTan den pingProzess senden (was durch Drücken von Strg + C erreicht wird) . Ich habe diese Antwort um Details erweitert. killkillall
Eliah Kagan

Gute Verwendung von awk. +1
22.

0
ping google.in | xargs -n1 -i bash -c 'echo `date +"%Y-%m-%d %H:%M:%S"`" {}"'

Wenn Sie es in einer Datei speichern möchten, geben Sie den folgenden Befehl im Terminal ein

ping google.in | xargs -n1 -i bash -c 'echo `date +"%Y-%m-%d %H:%M:%S"`" {}"' >> "/home/name_of_your_computer/Desktop/Ping_Test.txt"

Sie müssen keine Textdateien erstellen, dies wird automatisch durchgeführt

Ping_Test.txt

2018-04-19 15:35:53 PING google.in (216.58.203.164) 56(84) bytes of data.
2018-04-19 15:35:53 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=1 ttl=57 time=23.0 ms
2018-04-19 15:35:53 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=2 ttl=57 time=38.8 ms
2018-04-19 15:35:54 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=3 ttl=57 time=32.6 ms
2018-04-19 15:35:55 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=4 ttl=57 time=22.2 ms
2018-04-19 15:35:56 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=5 ttl=57 time=22.1 ms
2018-04-19 15:35:59 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=7 ttl=57 time=23.6 ms
2018-04-19 15:36:00 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=8 ttl=57 time=22.6 ms
2018-04-19 15:36:01 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=9 ttl=57 time=22.3 ms
2018-04-19 15:36:02 64 bytes from bom07s11-in-f4.1e100.net (216.58.203.164): icmp_seq=10 ttl=57 time=26.3 ms

-1

(Danke an Achu und Eliah Kagan für die Ideen) Es gibt einen Weg zu

  • Zeit für die pingAusgabe hinzufügen
  • Fußnoten von ping
  • und beende diese ganze Konstruktion mit ctrl+c

zu tun , sollen diese eine rechten Teil des Befehls anweisen (nachdem das Rohr) zu ignorieren , SIGINTunter Verwendung von trap "" INT:

$ ping www.google.fr | bash -c 'trap "" INT; awk "{print strftime(\"%c - \") \$0}"'  
lun 26 Mar 2018 22:05:08 +0300 - PING www.google.fr (173.194.73.94) 56(84) bytes of data.
lun 26 Mar 2018 22:05:08 +0300 - 64 bytes from lq-in-f94.1e100.net (173.194.73.94): icmp_seq=1 ttl=47 time=19.6 ms
lun 26 Mar 2018 22:05:09 +0300 - 64 bytes from lq-in-f94.1e100.net (173.194.73.94): icmp_seq=2 ttl=47 time=20.1 ms
^Clun 26 Mar 2018 22:05:09 +0300 - 
lun 26 Mar 2018 22:05:09 +0300 - --- www.google.fr ping statistics ---
lun 26 Mar 2018 22:05:09 +0300 - 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
lun 26 Mar 2018 22:05:09 +0300 - rtt min/avg/max/mdev = 19.619/19.866/20.114/0.284 ms
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.