Cara memerintahkan "Ping" menampilkan waktu dan tanggal ping

39

Ketika saya melakukan ping saya memiliki tampilan ini:

> 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

Saya ingin memiliki waktu ping sebelumnya.

Sesuatu seperti:

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

Bagaimana Anda melakukan ini di baris perintah (jika mungkin)?

Olivier Pons
sumber

Jawaban:

77

Menggunakan:

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

Anda akan mendapatkan hasil seperti ini:

masukkan deskripsi gambar di sini

Achu
sumber
1
Wow sangat bagus. Dan sangat membantu untuk mempelajari hal-hal shell. Terima kasih!
Olivier Pons
Waktu aktif dalam hitungan detikping 192.168.70.1 | while read pong; do echo "$(awk '{print $1}' /proc/uptime): $pong"; done
dps
16

Kemungkinan lain untuk menggunakan ping -Dopsi yang memberi Anda cap waktu sebagai waktu 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:~$ 

Di sini versi perintah "Achu" dengan format yang sedikit berbeda:

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

Itu membuat Anda:

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
TiloBunt
sumber
6

Ada sebuah utilitas bernama ts, yang membaca stdin, menambahkan stempel waktu, dan menulisnya ke 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

Ini dapat diinstal di Ubuntu dengan .sudo apt install moreutils

AMADANON Inc.
sumber
1
+1 Sama seperti sidenote - ts tidak diinstal di Ubuntu (setidaknya 16,04) secara default, jadi Anda harus menginstalnya sebagaiapt install moreutils
dmikam
3

Anda juga dapat menggunakan gawk(atau awk, jika /etc/alternatives/awkingin /usr/bin/gawk):

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

Ini mirip dengan pendekatan dalam jawaban Achu , tetapi pingoutput disalurkan ke gawkbukan loop shell yang memanggil date. Seperti dengan pendekatan itu, ia bekerja tanpa -c, tetapi jika Anda tidak lulus untuk membuat ping berhenti setelah n ping, dan Anda menghentikan loop dengan + , tidak akan mencetak statistik biasa.-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

Ini terjadi apakah pingoutput disalurkan ke gawkatau shell whileloop. Alasannya adalah bahwa perintah di sisi kanan pipa, bukannya ping, menerima SIGINT ketika Ctrl+C ditekan, dan pingtidak tahu untuk mencetak statistik sebelum diakhiri.

Jika Anda telah menjalankan pingtanpa -cdi sisi kiri pipa (seperti yang ditunjukkan di atas) dan Anda ingin menghentikannya sedemikian rupa sehingga masih mencetak statistik, maka alih-alih menekan Ctrl+ Cdi terminal tempat ia berjalan, Anda bisa menjalankan dari terminal lain, ganti dengan ID proses dari perintah. Jika Anda hanya menjalankan satu instance darikill -INT PIDPIDpingping maka Anda bisa menggunakannya killall -INT ping.

Atau, Anda bisa mengganti pingperintah di sisi kiri pipa dengan perintah yang menjalankan shell, melaporkan ID proses shell itu, dan kemudian mengganti shell itu dengan pingperintah (menyebabkannya memiliki PID yang sama):

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

Kemudian baris pertama output, akan menampilkan ID proses dari pingperintah (yang biasanya akan berbeda setiap kali). Akan terlihat seperti ini, tetapi dengan waktu dan tanggal yang berbeda dan mungkin ID proses yang berbeda:

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

Kemudian, dari terminal lain, Anda dapat menjalankan kill -INT 7557, mengganti7557 dengan ID proses yang sebenarnya Anda lihat, untuk mengakhiri pingperintah sedemikian rupa sehingga menyebabkannya untuk mencetak statistik.

(Jika Anda mengambil keuntungan dari kontrol pekerjaan shell Anda fitur , maka Anda dapat mencapai ini dalam terminal yang sama juga. Tetapi jika Anda ingin menyalin teks dari terminal Anda tanpa harus menghapus bagian asing di mana Anda menjalankan perintah di terminal itu, maka Anda harus berhenti pingdari terminal terpisah.)

Bacaan lebih lanjut:

Eliah Kagan
sumber
apakah ada cara untuk mengirim ctrl + c ke ping terlebih dahulu?
atti
1
@atti Ya, Anda dapat mengirim SIGINT(yang dilakukan dengan menekan Ctrl + C) ke pingproses secara khusus, menggunakan killatau killall. Saya telah memperluas jawaban ini dengan detail.
Eliah Kagan
Penggunaan awk yang bagus. +1
ripat
0
ping google.in | xargs -n1 -i bash -c 'echo `date +"%Y-%m-%d %H:%M:%S"`" {}"'

Jika Anda tertarik untuk menyimpannya dalam file, ketikkan perintah di bawah ini di 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"

Anda tidak perlu membuat file teks apa pun, itu akan dilakukan secara otomatis

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
Nɪsʜᴀɴᴛʜ ॐ
sumber
-1

(terima kasih kepada Achu dan Eliah Kagan untuk ide-idenya) ada cara untuk melakukannya

  • tambahkan waktu ke pingkeluaran
  • menyimpan catatan kaki ping
  • dan hentikan seluruh konstruksi ini dengan ctrl+c

untuk melakukan ini orang harus menginstruksikan bagian kanan dari perintah (setelah pipa) untuk diabaikan SIGINTmenggunakan 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
atti
sumber