Uso:
ping www.google.fr | while read pong; do echo "$(date): $pong"; done
Você receberá o resultado assim:
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)?
Uso:
ping www.google.fr | while read pong; do echo "$(date): $pong"; done
Você receberá o resultado assim:
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
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
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:
man ping
- " Quando o número especificado de pacotes tiver sido enviado (e recebido) ou se o programa é terminado com um SIGINT, um breve resumo é exibido. "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
(graças a Achu e Eliah Kagan pelas idéias) há uma maneira de
ping
output ping
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
Tags command-line ping