Làm thế nào để biết thời gian hiện tại từ internet từ dòng lệnh trong Linux?


26

Làm thế nào để biết thời gian hiện tại từ internet từ dòng lệnh trong Linux?

Chẳng hạn, với ntpqchương trình?

Lưu ý: không phải từ máy tính hay đồng hồ hệ điều hành, mà từ internet?

Lưu ý: Tôi không muốn THAY ĐỔI hoặc đến thời gian SYNC. Chỉ cần BIẾT nó.


Câu trả lời:


30

Nếu bạn sử dụng bash, dòng sau sẽ thực hiện công việc

$ cat </dev/tcp/time.nist.gov/13

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *

Nó tận dụng khả năng tạo mạng tích hợp của vỏ bash. Nếu bạn sử dụng vỏ POSIX hoặc bất kỳ vỏ nào khác, bạn có thể sử dụng ví dụ netcat.

$ nc time.nist.gov 13

56525 13-08-21 23:07:09 50 0 0  55.6 UTC(NIST) *

Cả hai lệnh truy vấn máy chủ hẹn giờ trên cổng TCP 13 của Viện Tiêu chuẩn và Công nghệ Quốc gia và xuất dữ liệu nhận được trên thiết bị xuất chuẩn.

¹ EDIT: Từ trang người đàn ông Bash: Bash xử lý vài tên tập tin đặc biệt khi chúng được sử dụng trong chuyển hướng, như mô tả trong bảng sau:

/dev/tcp/host/port
Nếu máy chủ lưu trữ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng số nguyên hoặc tên dịch vụ, bash sẽ cố gắng mở kết nối TCP đến ổ cắm tương ứng.

/dev/udp/host/port
Nếu máy chủ lưu trữ là tên máy chủ hoặc địa chỉ Internet hợp lệ và cổng là số cổng số nguyên hoặc tên dịch vụ, bash sẽ cố gắng mở kết nối UDP đến ổ cắm tương ứng.


Đẹp, +1. Bạn có thể mở rộng một chút về cách thức này hoạt động? Hoặc, vì dường như tôi đang thiếu một khối lượng lớn kiến ​​thức bash ở đây, hãy cho tôi một cái tên để xem xét hành vi này? Là gì </dev/tcp/dạng?
terdon

Hai nhược điểm nhỏ mà tôi thấy với cách tiếp cận này là các múi giờ khác nhau không dễ dàng được hỗ trợ và không có định dạng nào có thể được chỉ định theo cách đơn giản. Để khắc phục tình trạng đó, người ta có thể sử dụng thời gian api . Ví dụ: để truy vấn thời gian thực tế cho trung tâm châu Âu theo cách dễ đọc hơn của con người, người ta chỉ cần gọi:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki

Không chắc chắn nếu time.nist.gov có bất kỳ tỷ lệ giới hạn hoặc bị quá tải nhưng tôi nhận được kết quả khác nhau với máy chủ này.
Snowcrash

22

Có một số dịch vụ NTP có sẵn trên mỗi bản phân phối.

Nếu bạn muốn thực hiện đồng bộ một lần :

date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"

Đặt thời gian hệ thống thành phần cứng Đồng hồ thời gian thực

hwclock -r --utc
hwclock -w --utc
hwclock -r --utc

(Lưu ý: điều này xảy ra để hoạt động tốt với Google vì họ có toàn bộ máy chủ)


Nếu bạn muốn xem máy chủ gần nhất của Google gửi vào thời gian nào:

date -d "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"

17

Các ntpdatelệnh có thể làm điều này với -qcờ:

$ ntpdate -q 1.debian.pool.ntp.org
server 88.191.120.99, stratum 3, offset -0.015076, delay 0.06604
server 88.191.235.218, stratum 2, offset -0.000676, delay 0.06592
server 188.165.240.21, stratum 3, offset 0.001191, delay 0.07005
server 91.121.34.166, stratum 2, offset 0.000565, delay 0.06998
22 Aug 00:56:21 ntpdate[31373]: adjust time server 88.191.235.218 offset -0.000676 sec

Từ man ntpdate:

   -q     Query only - don't set the clock.

0

Bạn cũng có thể lấy thời gian qua Internet bằng cách sử dụng HTTP bằng HTP có sẵn trên nhiều hệ thống vì htpdatethường chỉ có độ chính xác đến giây gần nhất hoặc bạn có thể lấy nó bằng TLS bằng cách sử dụng tlsdatecó thể cung cấp độ chính xác cao hơn:

tlsdate -nV google.com

Ngoài ra, vì ntpdate không được dùng nữa, bạn có thể sử dụng sntp(được cài đặt mặc định trên MacOS và là một phần của bản phân phối ntp) để có được ngày chính xác hơn nhiều:

sntp pool.ntp.org 
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.