gnu coreutils `date`はどのように機能しますか? [閉鎖]

gnu coreutils `date`はどのように機能しますか? [閉鎖]

このサイトには同様の質問はありません。 、manpage方法を説明するのに役立ちますが、使用 date、背景情報はあまりありません。ページinfo(マンページで指定されています:)でも、変数に基づいて動作するinfo '(coreutils) date invocation'方法にすぎません。TZ

dateコマンドラインユーティリティがどのように機能するかを知りたいです。具体的には、

date +%s

エポック以降の秒数を返します1467743297(例1970-01-01 00:00:00 UTC:)。

たとえば、インターネット接続は必要ないと思います。それではまたそうですか?時々特定のソースと再同期しようとしていますか?では、このソースはどのように指定されますか?そうでなければ、特定のマシンで日付別に報告された値についてどのくらい確信できますか?

セクション21.1.5このinfoページはdateシステム/ソフトウェアクロックのみを扱い、それとの同期はhwclockOSによって異なります。だから...おそらく、この質問はより適切なようです。「どのシステムがより正確に報告しますかdate +%s?」dateこれは、精度がシステムハードウェアクロックの精度に制限され、特にシステム/ソフトウェアクロックの影響を受けることを意味するとも考えられます。 (たとえば、高精度のハードウェア時計を使用しても、ソフトウェア時計が精度を妨げる可能性があります。)

答え1

date何も同期しようとせずに、strace date ...システムに知られているエイリアスの後の時間を見つけるために、いくつかのシステムコール(Linuxに表示または表示されない場合があります)のみを実行します。

システム自体はBIOSクロックと同期できます。あるいは、仮想マシンは、実行中の親マシンから現在時刻を取得できます。あるいは、rdateNTP(またはほぼ同じ機能を持つ他のソフトウェア、レガシーまたは精密時間プロトコル(PTP)を使用)またはハードウェアGPSまたはラジオを使用して時間を設定できます。date管理者がBBCラジオを聞いてdateシステム時間を時間どおりに手動で設定しない限り(まだ時間どおりにdoot doot doot deeをしていますか?)、これらのどれも関係ありません。

システムクロックの精度は、NTP設定(または使用されている他のソフトウェア)、NTP(または同様のソフトウェア)が破損しているか、BIOSが破損しているか(4年後にシステムが起動するのを見たことがあります。サーバーですMakefile...)、ハードウェアクロックが誤動作しているかどうか、その他のさまざまな詳細。 NTPを使用している場合は、peersコマンドntpqまたはドリフトファイルを確認する価値があります。

最も正確な時間を得るために(除外各ホストに原子時計を配置する...) 読んでみたいかもしれないPTP「より高い精度に向けて」(また学んだ。時間は幻想です)。

答え2

dateインターネット接続が必要ないという仮定は正しいです。単にシステムクロックに保存されている現在時刻を出力します。 (詳細は時刻と日付のコマンド)

ハードウェア時計は、システムの電源が切れたときやプラグが抜かれたときに現在の時間を維持するマザーボードのバッテリ駆動回路です。

システムが起動すると、カーネルはハードウェア時間を抽出し、システム(ソフトウェア)クロックを設定します。これは、低電力ハードウェアクロックよりもはるかに正確なプロセッサクロックで実行されます。 (もっとここ)

ハードウェアとソフトウェアのクロックはコマンドhwclock --systohcに従って同期できますが、互いに独立して実行されます。hwclock --hctosysソフトウェアクロックは通常、システムがシャットダウンするとハードウェアクロックに記録されます。

外部タイミング機関と同期するには、rdateワンタイム同期を使用するか、継続的な更新のためにntpユーティリティを設定します。また、ntpデーモンはインターネットソースのシステムクロックのドリフトを計算し、インターネット接続が失われてもそれを修正します。

関連情報