Jak poznać aktualny czas z Internetu z wiersza poleceń w systemie Linux?


Odpowiedzi:


30

Jeśli użyjesz bash, następujący wiersz wykona zadanie

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

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

Wykorzystuje wbudowane możliwości sieciowe¹ powłoki bash. Jeśli używasz powłoki POSIX lub innej powłoki, możesz użyć np . Netcat.

$ nc time.nist.gov 13

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

Oba polecenia odpytują serwer timera na porcie TCP 13 Narodowego Instytutu Standardów i Technologii i wysyłają otrzymane dane na standardowe wyjście.

¹ EDYCJA: Ze strony podręcznika użytkownika Bash: Bash obsługuje wiele nazw plików, szczególnie gdy są one używane w przekierowaniach, jak opisano w poniższej tabeli:

/dev/tcp/host/port
Jeśli host jest poprawną nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, bash próbuje otworzyć połączenie TCP z odpowiednim gniazdem.

/dev/udp/host/port
Jeśli host jest prawidłową nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, bash próbuje otworzyć połączenie UDP z odpowiednim gniazdem.


Fajnie, +1. Czy mógłbyś się trochę dowiedzieć, jak to działa? Lub, skoro wydaje mi się, że brakuje mi tutaj dużej wiedzy na temat bashów, podaj mi nazwę, dzięki której sprawdzę to zachowanie? Jaki jest </dev/tcp/format
terdon

Dwie niewielkie wady, które dostrzegam w tym podejściu, polegają na tym, że różne strefy czasowe nie są łatwo obsługiwane i żaden format nie może być określony w prosty sposób. Aby temu zaradzić, można użyć interfejsu API czasu . Na przykład, aby zapytać o rzeczywistą godzinę dla Europy Środkowej w bardziej czytelny dla człowieka sposób, wystarczy curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
przywołać

Nie jestem pewien, czy time.nist.gov ma jakieś ograniczenia lub jest przeciążony, ale otrzymuję różne wyniki z tym hostem.
Snowcrash

22

Istnieje kilka usług NTP dostępnych dla każdej dystrybucji.

Jeśli chcesz zrobić synchronizację czasową :

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

Ustaw czas systemowy na sprzętowy zegar czasu rzeczywistego

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

(Uwaga: tak się dzieje, że działa dobrze z Google, ponieważ mają one wszystkie serwery)


Jeśli chcesz zobaczyć, o której godzinie najbliższy serwer Google wysyła:

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

17

ntpdateKomenda może to zrobić z -qflagą:

$ 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

Od man ntpdate:

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

0

Możesz również uzyskać czas przez Internet za pomocą protokołu HTTP za pomocą protokołu HTP, który jest dostępny w wielu systemach, ponieważ htpdatezwykle ma dokładność z dokładnością do najbliższej sekundy, lub możesz go uzyskać za pomocą protokołu TLS, tlsdatektóry może zapewnić lepszą dokładność:

tlsdate -nV google.com

Ponieważ ntpdate jest przestarzałe, możesz go użyć sntp(jest on instalowany domyślnie na MacOS i wchodzi w skład dystrybucji ntp), aby uzyskać dokładniejszą datę:

sntp pool.ntp.org 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.