Bagaimana cara mengetahui waktu saat ini dari internet dari command line di Linux?

26

Bagaimana cara mengetahui waktu saat ini dari internet dari command line di Linux?

Misalnya dengan ntpqprogram?

Catatan: bukan dari komputer atau sistem operasi jam, tetapi dari internet?

Catatan: Saya tidak ingin MENGUBAH atau waktu SYNC. TAHU saja.

Dims
sumber
terkait: unix.stackexchange.com/questions/79112/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

30

Jika Anda menggunakan bash, baris berikut akan melakukan pekerjaan itu

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

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

Ini memanfaatkan kapabilitas jaringan built-in¹ dari bash shell. Jika Anda menggunakan shell POSIX atau shell lain, Anda dapat menggunakan mis . Netcat.

$ nc time.nist.gov 13

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

Kedua perintah meminta server timer pada port TCP 13 dari Institut Nasional Standar dan Teknologi dan mengeluarkan data yang diterima di stdout.

¹ EDIT: Dari halaman Bash man: Bash menangani beberapa nama file khusus ketika mereka digunakan dalam pengalihan, seperti yang dijelaskan dalam tabel berikut:

/dev/tcp/host/port
Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, bash mencoba untuk membuka koneksi TCP ke soket yang sesuai.

/dev/udp/host/port
Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, bash mencoba membuka koneksi UDP ke soket yang sesuai.

Marco
sumber
Bagus, +1. Bisakah Anda sedikit mengembangkan cara kerjanya? Atau, karena saya sepertinya kehilangan banyak pengetahuan di sini, beri saya nama untuk mencari tahu perilaku ini? Apa </dev/tcp/formatnya?
terdon
Dua kelemahan kecil yang saya lihat dengan pendekatan ini adalah bahwa zona waktu yang berbeda tidak mudah didukung dan tidak ada format yang dapat ditentukan secara langsung. Untuk memperbaiki situasi itu, seseorang dapat menggunakan api waktu . Misalnya, untuk menanyakan waktu aktual untuk Eropa tengah dengan cara yang lebih dapat dibaca manusia, kita cukup memanggil:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki
Tidak yakin apakah time.nist.gov memiliki batasan tingkat atau kelebihan beban tetapi saya mendapatkan hasil yang berbeda dengan host ini.
Snowcrash
22

Ada beberapa layanan NTP yang tersedia per distro.

Jika Anda ingin melakukan clocksync satu kali :

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

Atur waktu sistem ke perangkat keras Real-Time-Clock

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

(Catatan: ini bekerja dengan baik pada Google karena mereka memiliki severs di seluruh)


Jika Anda hanya ingin melihat jam berapa server terdekat Google mengirim:

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

The ntpdateperintah dapat melakukan ini dengan -qbendera:

$ 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

Dari man ntpdate:

   -q     Query only - don't set the clock.
terdon
sumber
0

Anda juga dapat memperoleh waktu melalui Internet menggunakan HTTP menggunakan HTP yang tersedia di banyak sistem karena htpdatebiasanya hanya memiliki akurasi hingga detik terdekat, atau Anda dapat menggunakannya menggunakan TLS tlsdateyang dapat memberikan akurasi yang lebih baik:

tlsdate -nV google.com

Juga karena ntpdate sedang tidak digunakan lagi, Anda dapat menggunakan sntp(ini diinstal secara default pada MacOS dan datang sebagai bagian dari distribusi ntp) untuk mendapatkan tanggal yang jauh lebih akurat:

sntp pool.ntp.org 
Pierz
sumber