Como comandar a hora de exibição do “Ping” e a data do ping

34

Quando faço ping, tenho esta exibição:

> 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

Eu gostaria de ter o tempo do ping antes.

Algo como:

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

Como você faria isso em uma linha de comando (se for possível)?

    
por Olivier Pons 15.05.2012 / 10:30

6 respostas

65

Uso:

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

Você receberá o resultado assim:

    
por Achu 15.05.2012 / 11:04
13

Outra possibilidade de usar a opção ping -D , que fornece o timestamp como hora do 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:~$ 

Aqui está uma versão do comando "Achu" com um formato ligeiramente diferente:

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

Isso faz com que você:

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
    
por TiloBunt 05.01.2014 / 03:00
3

Existe um utilitário chamado 'ts', que lê stdin, adiciona registros de data e hora e os grava para 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

    
por 07.11.2018 / 21:16
2

Você também pode usar gawk (ou awk , se o seu /etc/alternatives/awk aponta para /usr/bin/gawk ):

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

Isso é semelhante à abordagem em resposta do Achu , mas a saída de ping é canalizada para gawk em vez de um loop de shell que chama date . Como com essa abordagem, ele funciona sem -c , mas se você não passar -c n para fazer o ping parar após n pings, e você parar o loop com Ctrl + C , ping não imprime as estatísticas usuais.

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

Isso acontece se a saída de ping é canalizada para gawk ou um loop while do shell. A razão é que o comando no lado direito do canal, em vez de ping , recebe SIGINT quando Ctrl + C é pressionado, e ping não sabe imprimir as estatísticas antes de terminar.

Se você executou ping sem -c no lado esquerdo de um canal (como mostrado acima) e deseja finalizá-lo de forma que ainda imprima as estatísticas, então, em vez de pressionar Ctrl + C no terminal onde está sendo executado, você pode executar kill -INT PID de outro terminal, substituindo PID pelo ID do processo do ping comando. Se você só estiver executando uma instância de ping , poderá simplesmente usar killall -INT ping .

Como alternativa, você pode substituir o comando ping no lado esquerdo do canal por um comando que executa um shell, relata o ID do processo desse shell e, em seguida, substitui esse shell pelo comando ping (fazendo com que ele tenha o mesmo PID):

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

Em seguida, a primeira linha de saída mostrará o ID do processo do comando ping (que normalmente será diferente a cada vez). Seria assim, mas com hora e data diferentes e provavelmente um ID de processo diferente:

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

Em seguida, a partir de outro terminal, você pode executar kill -INT 7557 , substituindo 7557 pelo ID do processo real que viu, para finalizar o comando ping de modo a fazer com que ele imprima as estatísticas.

(Se você aproveitar os recursos do controle de trabalho do seu shell, você pode conseguir isso dentro do mesmo terminal também, mas se você quiser copiar o texto do seu terminal sem ter que remover qualquer parte extranum onde você executou comandos naquele terminal, então você deve terminar ping de um terminal separado.) / p>

Leitura adicional:

por Eliah Kagan 03.01.2017 / 16:15
0
ping google.in | xargs -n1 -i bash -c 'echo 'date +"%Y-%m-%d %H:%M:%S"'" {}"'

Se você está interessado em salvá-lo no arquivo, digite o comando abaixo no 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"

Você não precisa criar nenhum arquivo de texto, ele fará automaticamente

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
    
por Nishanth ॐ 19.04.2018 / 12:11
-1

(graças a Achu e Eliah Kagan pelas idéias) há uma maneira de

  • adicione tempo a ping output
  • manter notas de rodapé de ping
  • e finalizar toda essa construção com ctrl+c

para fazer isso, deve-se instruir a parte direita do comando (após o canal) para ignorar SIGINT usando trap "" INT :

$ ping www.google.fr | bash -c 'trap "" INT; awk "{print strftime(\"%c - \") \
$ ping www.google.fr | bash -c 'trap "" INT; awk "{print strftime(\"%c - \") \%pre%}"'  
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
}"' 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
    
por atti 26.03.2018 / 21:23