Linuxのコマンドラインからインターネットの現在時刻を知る方法は?


26

Linuxのコマンドラインからインターネットの現在時刻を知る方法は?

たとえば、ntpqプログラムで?

注:コンピューターやオペレーティングシステムのクロックではなく、インターネットからですか?

注:時刻を変更したり、同期したりしたくありません。知ってください。


回答:


30

あなたがbashを使用する場合、次の行が仕事をします

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

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

bashシェルの組み込みネットワーク機能¹を活用します。POSIXシェルまたはその他のシェルを使用する場合は、たとえばnetcatを使用できます

$ nc time.nist.gov 13

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

どちらのコマンドも、米国標準技術局の TCPポート13でタイマーサーバーに照会し、受信したデータを標準出力に出力します。

¹ EDIT:からBashのmanページ:彼らはリダイレクトに使用されている場合は、次の表に示すようにbashは、特別にいくつかのファイル名を処理します。

/dev/tcp/host/port
hostが有効なホスト名またはインターネットアドレスであり、portが整数のポート番号または サービス名である場合、bashは対応するソケットへのTCP接続を開こうとします。

/dev/udp/host/port
hostが有効なホスト名またはインターネットアドレスであり、portが整数のポート番号または サービス名である場合、bashは対応するソケットへのUDP接続を開こうとします。


いいですね、+ 1。これがどのように機能するかについて少し拡大していただけますか?または、ここでbashの知識の大部分を失っているように見えるので、この動作を調べるための名前を教えてください?</dev/tcp/フォーマットは何ですか?
テルドン

このアプローチで見られる2つの小さな欠点は、異なるタイムゾーンが簡単にサポートされず、形式を簡単に指定できないことです。その状況を改善するには、時間APIを使用できます。例えば、より人間に読みやすいように、中央ヨーロッパのための実際の時間を照会するために、一つは単純に呼び出します:curl -G --data-urlencode "format=%D-%T\n" http://www.timeapi.org/cet/now?
Moreaki

time.nist.govにレート制限があるか、オーバーロードされているかはわかりませんが、このホストではさまざまな結果が得られます。
スノークラッシュ

22

ディストリビューションごとにいくつかのNTPサービスを利用できます。

1回のclocksyncを実行する場合:

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

システム時刻をハードウェアのリアルタイムクロックに設定する

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

(注:Googleはすべてのサーバーを持っているため、これはたまたまGoogleでうまく機能します)


Googleの最も近いサーバーが送信する時刻を確認したい場合:

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

17

このntpdateコマンドは、-qフラグを使用してこれを行うことができます。

$ 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

からman ntpdate

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

0

また、多くのシステムで使用可能なHTPを使用するHTTPを使用してインターネット経由で時間を取得することもできます。これはhtpdate通常、最も近い秒単位の精度しか持たないか、TLSを使用しtlsdateて取得できます。

tlsdate -nV google.com

また、ntpdateは非推奨になっているため、sntp(MacOSにデフォルトでインストールされ、ntpディストリビューションの一部として提供されます)を使用して、より正確に日付を取得できます。

sntp pool.ntp.org 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.