Comment commander “Ping” afficher l'heure et la date du ping


39

Quand je ping, j'ai cet affichage:

> 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

J'aimerais avoir l'heure du ping avant.

Quelque chose comme:

> (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

Comment feriez-vous cela en ligne de commande (si c'est possible)?


1
Version générique - Existe
Piotr Dobrogost le

Réponses:


77

Utilisation:

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

Vous obtiendrez le résultat comme ceci:

entrez la description de l'image ici


1
Wow très agréable. Et utile pour apprendre des choses shell. Merci!
Olivier Pons

Disponibilité en secondesping 192.168.70.1 | while read pong; do echo "$(awk '{print $1}' /proc/uptime): $pong"; done
dps

16

Une autre possibilité d'utiliser l' ping -Doption qui vous donne le timestamp comme heure Unix.

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:~$ 

Voici une version de la commande "Achu" avec un format légèrement différent:

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

Cela vous amène:

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

Il existe un utilitaire appelé ts, qui lit stdin, ajoute des horodatages et l’écrit sur stdout:

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

Il peut être installé dans Ubuntu avec .sudo apt install moreutils


1
+1 Par défaut, sidenote - ts n’est pas installé dans Ubuntu (au moins 16.04), vous devez donc l’installer en tant queapt install moreutils
dmikam

3

Vous pouvez également utiliser gawk(ou awk, si vos /etc/alternatives/awkpoints sont /usr/bin/gawk):

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

Ceci est similaire à l'approche de la réponse d'Achu , mais pingla sortie est dirigée vers gawkau lieu d'une boucle shell qui appelle date. Comme avec cette approche, cela fonctionne sans -c, mais si vous ne réussissez pas à arrêter ping après n pings, et que vous arrêtez la boucle avec + , les statistiques habituelles ne seront pas imprimées.-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

Cela se produit que pingla sortie soit dirigée vers gawkou une whileboucle shell . La raison en est que la commande située sur le côté droit du tuyau, plutôt que ping, reçoit SIGINT lorsque vous appuyez sur Ctrl+ C, et pingne sait pas imprimer les statistiques avant d'être terminée.

Si vous avez exécuté pingsans -csur le côté gauche d'un tuyau (comme indiqué ci-dessus) et que vous souhaitez le terminer de manière à imprimer les statistiques, alors au lieu d'appuyer sur Ctrl+ Cdans le terminal où il est exécuté, vous pouvez exécuter depuis un autre terminal, en le remplaçant par l'ID de processus de la commande. Si vous n'exécutez qu'une seule instance de, vous pouvez simplement utiliser .kill -INT PIDPIDpingpingkillall -INT ping

Vous pouvez également remplacer la pingcommande située à gauche du canal par une commande qui exécute un shell, signale l'ID de processus de ce shell, puis remplace ce shell par la pingcommande (le même PID lui est alors attribué):

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

Ensuite, la première ligne de sortie affiche l’ID de processus de la pingcommande (qui sera généralement différent à chaque fois). Cela ressemblerait à ceci, mais avec une heure et une date différentes et probablement un identifiant de processus différent:

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

Ensuite, à partir d'un autre terminal, vous pouvez exécuter kill -INT 7557, en remplaçant 7557par l'ID de processus réel que vous avez vu, pour mettre fin à la pingcommande de manière à lui faire imprimer des statistiques.

(Si vous tirez parti des fonctionnalités de contrôle des tâches de votre shell , vous pourrez le faire également dans le même terminal. Toutefois, si vous souhaitez copier du texte de votre terminal sans supprimer aucune partie extranet dans laquelle vous avez exécuté des commandes, vous devez terminer à pingpartir d'un terminal séparé.)

Lectures complémentaires:


Existe-t-il un moyen d'envoyer ctrl + c à ping en premier?
Atti

1
@atti Oui, vous pouvez envoyer SIGINT(ce que fait Ctrl + C) au pingprocessus en utilisant killou killall. J'ai développé cette réponse avec des détails.
Eliah Kagan

Belle utilisation de awk. +1
Ripat

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

Si vous souhaitez le sauvegarder dans un fichier, tapez la commande ci-dessous dans le terminal.

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"

Vous n'avez pas besoin de créer de fichier texte, ça le fera automatiquement

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

(merci à Achu et Eliah Kagan pour les idées), il existe un moyen de

  • ajouter du temps à la pingsortie
  • garder les notes de bas de page de ping
  • et terminer cette construction avec ctrl+c

pour faire cela, il faut indiquer à la partie droite de la commande (après le tube) à ignorer en SIGINTutilisant 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.