Cách ra lệnh hiển thị thời gian và ngày ping của ping Ping Ping


39

Khi tôi ping tôi có màn hình này:

> 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

Tôi muốn có thời gian ping trước đây.

Cái gì đó như:

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

Làm thế nào bạn sẽ làm điều này trong một dòng lệnh (nếu có thể)?


Câu trả lời:


77

Sử dụng:

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

Bạn sẽ nhận được kết quả như thế này:

nhập mô tả hình ảnh ở đây


1
Wow rất đẹp. Và hữu ích để tìm hiểu công cụ vỏ. Cảm ơn bạn!
Olivier Pons

Thời gian hoạt động tính bằng giâyping 192.168.70.1 | while read pong; do echo "$(awk '{print $1}' /proc/uptime): $pong"; done
dps

16

Một khả năng khác để sử dụng ping -Dtùy chọn giúp bạn có dấu thời gian là thời gian 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:~$ 

Đây là một phiên bản của lệnh "Achu" với định dạng hơi khác nhau:

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

Điều đó giúp bạn:

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

Có một tiện ích được gọi ts, đọc stdin, thêm dấu thời gian và ghi nó vào thiết bị xuất chuẩn:

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

Nó có thể được cài đặt trong Ubuntu với .sudo apt install moreutils


1
+1 Giống như một sidenote - ts không được cài đặt trong Ubuntu (ít nhất là 16.04) theo mặc định, vì vậy bạn cần cài đặt nó dưới dạngapt install moreutils
dmikam

3

Bạn cũng có thể sử dụng gawk(hoặc awk, nếu /etc/alternatives/awkđiểm của bạn /usr/bin/gawk):

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

Điều này tương tự như cách tiếp cận trong câu trả lời của Achu , nhưng pingđầu ra của nó được dẫn đến gawkthay vì một vòng lặp shell gọi date. Như với cách tiếp cận đó, nó hoạt động mà không có -c, nhưng nếu bạn không vượt qua để làm cho ping dừng lại sau n ping và bạn dừng vòng lặp với + , sẽ không in các số liệu thống kê thông thường.-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

Điều này xảy ra cho dù pingđầu ra của đường ống được dẫn đến gawkhoặc một whilevòng lặp shell . Lý do là lệnh đó ở phía bên phải của đường ống, thay vì pingnhận SIGINT khi nhấn Ctrl+ Cpingkhông biết in các số liệu thống kê trước khi bị chấm dứt.

Nếu bạn đã chạy pingmà không -cở bên trái của một đường ống (như được hiển thị ở trên) và bạn muốn chấm dứt nó theo cách mà nó vẫn in các số liệu thống kê, thì thay vì nhấn Ctrl+ Ctrong thiết bị đầu cuối nơi nó đang chạy, bạn có thể chạy từ một thiết bị đầu cuối khác, thay thế bằng ID tiến trình của lệnh. Nếu bạn chỉ chạy một phiên bản thì bạn có thể sử dụng .kill -INT PIDPIDpingpingkillall -INT ping

Ngoài ra, bạn có thể thay thế pinglệnh ở phía bên trái của đường ống bằng lệnh chạy shell, báo cáo ID tiến trình của shell đó và sau đó thay thế shell đó bằng pinglệnh (khiến nó có cùng một PID):

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

Sau đó, dòng đầu ra đầu tiên, sẽ hiển thị ID tiến trình của pinglệnh (thường sẽ khác nhau mỗi lần). Nó sẽ trông như thế này, nhưng với thời gian và ngày khác nhau và có thể là ID quá trình khác nhau:

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

Sau đó, từ một thiết bị đầu cuối khác, bạn có thể chạy kill -INT 7557, thay thế 7557bằng ID tiến trình thực tế mà bạn đã thấy, để chấm dứt pinglệnh theo cách khiến nó phải in số liệu thống kê.

(Nếu bạn tận dụng các tính năng kiểm soát công việc của shell , thì bạn cũng có thể đạt được điều này trong cùng một thiết bị đầu cuối. Nhưng nếu bạn muốn sao chép văn bản từ thiết bị đầu cuối của mình mà không phải xóa bất kỳ phần ngoại lai nào khi bạn chạy các lệnh trong thiết bị đầu cuối đó, thì bạn sẽ chạy các lệnh trong thiết bị đầu cuối đó, sau đó bạn nên chấm dứt pingtừ một thiết bị đầu cuối riêng biệt.)

Đọc thêm:


Có cách nào để gửi ctrl + c đến ping trước không?
atti

1
@atti Có, bạn có thể gửi SIGINT(đó là cách nhấn Ctrl + C) cho pingquy trình cụ thể, bằng cách sử dụng killhoặc killall. Tôi đã mở rộng câu trả lời này với các chi tiết.
Eliah Kagan

Sử dụng tốt đẹp của awk. +1
ripat

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

Nếu bạn quan tâm đến việc lưu nó trong tệp, sau đó nhập lệnh dưới đây trong thiết bị đầu cuối

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"

Bạn không cần tạo bất kỳ tệp văn bản nào, nó sẽ tự động làm

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

(cảm ơn Achu và Eliah Kagan vì những ý tưởng) có một cách để

  • thêm thời gian để pingđầu ra
  • giữ chú thích của ping
  • và chấm dứt toàn bộ công trình này với ctrl+c

Để làm điều này, ta nên hướng dẫn phần bên phải của lệnh (sau đường ống) bỏ qua SIGINTbằng cách sử dụng 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.