Linuxでtimedatectlコマンドを使用する方法

Linuxのtimedatectlコマンドを使用すると、システムクロックとリアルタイムクロックの時刻、日付、タイムゾーンを設定できます。少し時間を取って、その仕組みを説明しましょう。

すべては相対的です

コンピュータが時間を扱うのは、かなり単純なことのように思われるかもしれません。少なくとも、それを調べ始めるまでは。

Linuxのシステムクロックは、UNIXエポックからの経過秒数をカウントします。これは、1970年1月1日午前0時0分0秒UTCです。UTCは協定世界時を表しますが、通常は協定世界時または単に世界時と呼ばれます。これは、世界が時間を管理および調整する際の時間基準です。さまざまなタイムゾーンは、UTCにオフセットを適用して現地時間を取得します。UTCより進んでいるタイムゾーンもあれば、遅れているタイムゾーンもあります。

Linuxコンピュータのシステムクロックは、ソフトウェアベースです。当然ながら、コンピュータの電源が切れているときは実行できません。もう1つのクロックである、バッテリ駆動のハードウェアベースのリアルタイムクロックは、コンピュータの電源が切れているときでも実行できます。その目的は、Linuxが起動するたびに、システムクロックに時刻を伝えることです。ただし、ネットワークタイムプロトコル(NTP)サーバーへのアクセスが可能な場合を除きます。

NTPサーバーは、要求するコンピュータに正確な時刻情報を提供するサーバーです。コンピュータまたはラップトップを起動し、インターネットにアクセスできない場合、またはNTPサーバーを使用するように設定されていない場合、リアルタイムクロックがNTPサーバーの代わりにシステムクロックを初期化するために使用されます。

システムクロックは常にUTCです。現地時刻を取得する必要があるアプリケーションは次のことを行う必要があります。

  • システムクロックにアクセスしてUTCを取得する
  • 自分がいるタイムゾーンを知っていて、正しいオフセットを適用する
  • 夏時間が適用されているかどうかを考慮する

UTCから現地時間への変換は、システムクロックではなく、アプリケーションによって行われます。または、より正確には、アプリケーションがリンクされている時刻と日付のライブラリによって変換が実行されます。コンピュータが自分のタイムゾーン、UTC時刻、UNIXエポックからの経過秒数、夏時間が適用されているかどうかを知ることが重要であるのはそのためです。

systemdベースのLinuxディストリビューションでは、timedatectlコマンドを使用して、それらの設定と値を確認または変更します。

timedatectlを使い始める

現在のデータと時刻、およびその他の値を確認するには、timedatectlコマンドと

<code>status</code>

演算子を使用します。

timedatectl status

実際には、statusを削除しても同じ出力が得られます。

timedatectl

どちらの出力を合わせると、次のようになります。

  • 現地時刻: コンピュータが自分のタイムゾーンに従って認識している時刻。
  • 協定世界時: UTC時刻。
  • RTC時刻: リアルタイムクロックが使用している時刻。通常、これはUTCです。
  • タイムゾーン: 設定されたタイムゾーンに関する情報。
  • システムクロックの同期: システムクロックがNTPサーバーと同期されているかどうか。
  • NTPサービス: コンピュータのNTPサービスがアクティブかどうか。
  • ローカルTZのRTC: リアルタイムクロックがUTCではなく現地時刻を使用しているかどうか。

次のように入力することで、timedatectlコマンドでサポートされているタイムゾーンの数を調べることができます。

timedatectl list-timezones | wc -l

これは、世界にあるタイムゾーンの数よりもはるかに多いです。出力をgrepにパイプして「America」のエントリをフィルタリングし、それをlessにパイプすると、より管理しやすいリストをスクロールできます。

timedatectl list-timezones | grep "America/" | less

そのリストを確認すると、「America」が最も広義の意味で解釈されていることがわかります。次に気付くことは、ほとんどのエントリが実際のタイムゾーンではないということです。

タイムゾーンの設定

timedatectlでサポートされているタイムゾーンのフィルタリングされていないリストを見ると、タイムゾーンだけでなく場所も表示されます。タイムゾーンを設定するには、ESTやGMTなどの名前で指定するか、ロンドンやニューヨークなど、自分と同じタイムゾーンの場所を選択できます。

タイムゾーンのリセットは頻繁に行うことではありませんが、引っ越したり、しばらく離れて仕事をするためにラップトップをローカライズしたい場合があります。タイムゾーンをリセットする必要がある場合は、使用するタイムゾーンの場所を選択します。

このコンピュータをエドモントンと同じタイムゾーンである山岳部に設定します。その後、設定がどのように変更されたかを確認します。

timedatectl set-timezone "America/Edmonton"

timedatectl

タイムゾーンが変更され、現地時刻が変わり、UTCからのオフセットが増加しました。

時刻と日付の手動設定

時刻と日付を手動で設定することは可能ですが、通常は必要ありません。時刻同期とNTPを使用することが、コンピュータの時刻と日付を正確に保つための推奨される方法です。コンピュータの日付または時刻を変更しようとすると、時刻同期が使用中であることを示すエラーが表示される可能性があります。

timedatectl set-time 10:30:00

次のコマンドを使用して、時刻同期サービスをオフにします。

sudo systemctl stop systemd-timesyncd.service

timedatectlset-time演算子を使用して、時刻、日付、またはその両方を設定できます。日付はYYYY-MM-DDの年-月-日の順で、時刻はHH:MM:SSの時-分-秒の順です。次のコマンドで時刻と日付を設定します。

timedatectl set-time "2022-01-30 10:30:00"

次に、timedatectlを使用して変更が行われたことを確認します。

timedatectl

日付と時刻が変更されました。また、コンピュータが誤ったUTC時刻を使用していることに注意してください。システムクロックが同期されておらず、NTPサービスが非アクティブであることも通知されます。

インターネットにアクセスできる場合は、時刻同期サービスを復元するとすぐに時刻が取得され、すべての詳細が正しくリセットされます。

sudo systemctl start systemd-timesyncd.service

timedatectl

RTC: UTCまたはLTZ?

リアルタイムクロックをUTCではなくローカルタイムゾーン時刻に設定することは可能ですが、可能であってもお勧めできません。変更を行うと、将来システムに重大な影響を与える可能性があるという警告が表示されます。

この方法をお見せした理由は、時刻設定に奇妙な問題が発生しているマシンに遭遇する可能性があるからです。リアルタイムクロックをUTCに戻す方法は次のとおりです。

最初に、それをローカルタイムゾーンに設定する必要があります。

timedatectl set-local-rtc 1

次に、timedatectlにそのステータスを尋ねます。

timedatectl

彼らは自分の気持ちを明確にしていると思います。

リアルタイムクロックをUTCに復元するには、次のコマンドを使用します。

timedatectl set-local-rtc 0

設定したら忘れてしまう

Linuxディストリビューションのインストール中にエラーが発生した場合、または移動した場合を除き、通常、システムクロックとリアルタイムクロックの設定を変更する理由はありません。

システムクロックをタイムゾーンに設定し、リアルタイムクロックをUTCに設定し、システムがネットワークタイムプロトコルサーバーをポーリングしていることを確認します。ほとんどのインストール後のデフォルトの状態です。

すべてが設定されていれば、コンピュータの時刻システムはそれ自体で面倒を見てくれます。