Linux'ta internetten komut satırından şimdiki zamanı nasıl öğrenirim?


Yanıtlar:


30

Bash kullanıyorsanız, aşağıdaki satır işi yapacak

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

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

Bash kabuğunun yerleşik ağ yeteneklerini¹ güçlendirir. POSIX kabuğu veya başka bir kabuk kullanıyorsanız, örneğin netcat kullanabilirsiniz .

$ nc time.nist.gov 13

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

Her iki komut da, zamanlayıcı sunucusunu Ulusal Standartlar ve Teknoloji Enstitüsü'nün 13 numaralı TCP bağlantı noktasında sorgular ve alınan verileri stdout'ta verir.

¹ DÜZENLEME: Gönderen Bash adam sayfası: Bash aşağıdaki tabloda açıklandığı gibi onlar, yönlendirmeler kullanıldığında özellikle birkaç dosya ele alır:

/dev/tcp/host/port
Ana bilgisayar geçerli bir ana bilgisayar adı veya Internet adresiyse ve bağlantı noktası bir tam sayı bağlantı noktası numarası veya hizmet adıysa, bash ilgili sokete bir TCP bağlantısı açmaya çalışır.

/dev/udp/host/port
Ana bilgisayar geçerli bir ana bilgisayar adı veya Internet adresiyse ve bağlantı noktası bir tam sayı bağlantı noktası numarası veya hizmet adıysa, bash ilgili sokete bir UDP bağlantısı açmaya çalışır.


Güzel, +1. Bunun nasıl çalıştığını biraz daha genişletebilir misiniz? Veya, burada büyük bir bash bilgisinin eksik olduğunu göründüğü için, bu davranışa bakmak için bana bir isim verin? Nedir </dev/tcp/formatı?
terdon

Bu yaklaşımla gördüğüm iki küçük dezavantaj, farklı zaman dilimlerinin kolay desteklenemediği ve herhangi bir biçimin düz bir şekilde belirtilemediğidir. Bu durumu düzeltmek için kişi api zamanını kullanabilir . Örneğin, Orta Avrupa’nın gerçek zamanını daha okunaklı bir şekilde sorgulamak için, basitçe şunu curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
söyler

Time.nist.gov 'un sınırlayıcı olup olmadığından veya aşırı yüklendiğinden emin değilim, ancak bu konağa göre farklı sonuçlar alıyorum.
Snowcrash

22

Dağıtım başına birkaç NTP servisi var.

Tek seferlik bir saat yapmak istiyorsanız :

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

Sistem saatini donanıma Gerçek Zamanlı Saat olarak ayarlayın

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

(Not: Bu, Google’la iyi çalışır, çünkü heryerde başkaları da vardır)


Google’ın en yakın sunucusunun saat kaçta gönderildiğini görmek istiyorsanız:

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

17

ntpdateKomut ile yapabilirsiniz -qbayrak:

$ 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

Kimden man ntpdate:

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

0

Ayrıca, genellikle yalnızca en yakın saniyeye doğrulukta olan birçok sistemde bulunan HTP kullanarak HTTP kullanarak İnternet üzerinden zaman elde edebilir htpdateveya tlsdatedaha iyi doğruluk sağlayabilen TLS kullanarak elde edebilirsiniz:

tlsdate -nV google.com

Ayrıca ntpdate kullanımdan kaldırıldığından sntp, tarihi daha doğru bir şekilde elde etmek için (varsayılan olarak MacOS'ta yüklü ve ntp dağıtımlarının bir parçası olarak gelir) kullanabilirsiniz:

sntp pool.ntp.org 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.