วิธีคำสั่ง "Ping" แสดงเวลาและวันที่ของการ ping


39

เมื่อฉัน ping ฉันมีจอแสดงผลนี้:

> 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

ฉันต้องการมีเวลาปิงมาก่อน

สิ่งที่ต้องการ:

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

คุณจะทำสิ่งนี้ในบรรทัดคำสั่ง (ถ้าเป็นไปได้)?


คำตอบ:


77

ใช้:

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

คุณจะได้ผลลัพธ์เช่นนี้:

ป้อนคำอธิบายรูปภาพที่นี่


1
ว้าวสวยมาก และเป็นประโยชน์ในการเรียนรู้สิ่งเปลือก ขอขอบคุณ!
Olivier Pons

ระยะเวลาใช้งานในไม่กี่วินาทีping 192.168.70.1 | while read pong; do echo "$(awk '{print $1}' /proc/uptime): $pong"; done
dps

16

อีกความเป็นไปได้ที่จะใช้ping -Dตัวเลือกที่ทำให้คุณได้รับการประทับเวลาเป็นเวลา 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:~$ 

นี่คือเวอร์ชันของคำสั่ง "Achu" ที่มีรูปแบบแตกต่างกันเล็กน้อย:

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

นั่นทำให้คุณ:

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

มียูทิลิตี้ที่เรียกว่าtsซึ่งอ่าน stdin เพิ่ม timestamps และเขียนลงใน 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

มันสามารถติดตั้งในอูบุนตูกับsudo apt install moreutils


1
+1 เช่นเดียวกับ sidenote - ts ไม่ได้ติดตั้งใน Ubuntu (อย่างน้อย 16.04) โดยค่าเริ่มต้นดังนั้นคุณต้องติดตั้งเป็นapt install moreutils
dmikam

3

คุณยังสามารถใช้gawk(หรือawkหาก/etc/alternatives/awkคะแนนของคุณเป็น/usr/bin/gawk):

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

นี้จะคล้ายกับวิธีการในคำตอบ Achu ของแต่pingของเอาท์พุทประปาแทนที่จะเป็นห่วงเชลล์ที่โทรgawk dateเช่นเดียวกับวิธีการที่จะทำงานได้โดยไม่ต้อง-cแต่ถ้าคุณไม่ผ่านจะทำให้หยุด ping หลังจากnปิงและคุณหยุดห่วงกับ+ , จะไม่พิมพ์สถิติปกติ-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

สิ่งนี้เกิดขึ้นไม่ว่าจะเป็นการpingส่งออกของไปป์ไลน์gawkหรือเชลล์whileลูป เหตุผลก็คือคำสั่งนั้นทางด้านขวาของไปป์แทนที่จะpingได้รับSIGINTเมื่อกดCtrl+ Cและpingไม่ทราบว่าจะพิมพ์สถิติก่อนที่จะถูกยกเลิก

หากคุณทำงานpingโดยไม่ต้อง-cอยู่ทางด้านซ้ายของไพพ์ (ดังที่แสดงไว้ด้านบน) และคุณต้องการที่จะยุติมันในแบบที่มันยังพิมพ์สถิติอยู่ดังนั้นแทนที่จะกดCtrl+ Cในเทอร์มินัลที่มันทำงานอยู่จากเทอร์มินัลอื่นแทนที่ด้วย ID กระบวนการของคำสั่ง หากคุณใช้เพียงหนึ่งอินสแตนซ์คุณก็สามารถใช้งานได้kill -INT PIDPIDpingpingkillall -INT ping

หรือคุณสามารถแทนที่pingคำสั่งทางด้านซ้ายของไพพ์ด้วยคำสั่งที่รันเชลล์รายงาน ID กระบวนการของเชลล์นั้นจากนั้นแทนที่เชลล์นั้นด้วยpingคำสั่ง (ทำให้มี PID เดียวกัน):

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

จากนั้นบรรทัดแรกของเอาต์พุตจะแสดง ID กระบวนการของpingคำสั่ง (ซึ่งโดยทั่วไปจะแตกต่างกันในแต่ละครั้ง) มันจะมีลักษณะเช่นนี้ แต่ด้วยเวลาและวันที่ที่แตกต่างกันและอาจเป็น ID กระบวนการที่แตกต่างกัน:

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

จากเทอร์มินัลอื่นคุณสามารถเรียกใช้kill -INT 7557แทนที่7557ด้วย ID กระบวนการจริงที่คุณเห็นเพื่อยกเลิกpingคำสั่งในลักษณะที่จะทำให้มันพิมพ์สถิติ

(ถ้าคุณใช้ประโยชน์จากคุณสมบัติการควบคุมงานของเชลล์คุณสามารถทำสิ่งนี้ได้ในเทอร์มินัลเดียวกันเช่นกัน แต่ถ้าคุณต้องการคัดลอกข้อความจากเทอร์มินัลของคุณโดยไม่ต้องลบส่วน extranous ใด ๆ คุณควรยกเลิกpingจากเทอร์มินัลแยกต่างหาก)

อ่านเพิ่มเติม:


มีวิธีส่ง ctrl + c ไป ping ก่อนไหม
atti

1
@atti ใช่คุณสามารถส่งSIGINT(ซึ่งเป็นสิ่งที่กด Ctrl + C ไม่) กับpingกระบวนการโดยเฉพาะการใช้หรือkill killallฉันได้ขยายคำตอบนี้พร้อมรายละเอียดแล้ว
Eliah Kagan

การใช้ที่ดีของ awk +1
ripat

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

หากคุณสนใจที่จะบันทึกไว้ในไฟล์ให้พิมพ์คำสั่งด้านล่างในเทอร์มินัล

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"

คุณไม่จำเป็นต้องสร้างไฟล์ข้อความมันจะทำโดยอัตโนมัติ

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

(ขอบคุณ Achu และ Eliah Kagan สำหรับแนวคิด) มีวิธีการ

  • เพิ่มเวลาในการpingส่งออก
  • เชิงอรรถ ping
  • และยุติการก่อสร้างทั้งหมดนี้ด้วย ctrl+c

หากต้องการทำสิ่งนี้ควรสั่งส่วนด้านขวาของคำสั่ง (หลังไพพ์) เพื่อละเว้นการSIGINTใช้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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.