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

公開: 2022-06-16
いくつかの壁掛け時計が混み合っており、すべて異なる時間を示しています。
POR666 / Shutterstock.com

Linuxのtimedatectlコマンドを使用すると、システムクロックとリアルタイムクロックの時刻、日付、およびタイムゾーンを設定できます。 少し時間を取ってください。すべてがどのように機能するかを説明します。

それはすべて相対的です

コンピューターの時間の扱いは、非常に簡単であると期待できるものの1つです。 少なくとも、あなたがそれを調べ始めるまでは。

Unixエポックとは何ですか?Unix時間はどのように機能しますか?
関連Unixエポックとは何ですか、Unix時間はどのように機能しますか?

Linuxシステムクロックは、Unixエポックからの秒数をカウントします。 これは、UTCの1970年1月1日の00:00:00でした。 UTCは協定世界時の略ですが、通常、協定世界時または単に協定世界時と呼ばれます。 これは、世界が時間を管理および規制する時間基準です。 異なるタイムゾーンは、UTCにオフセットを適用して、現地時間を取得します。 一部のタイムゾーンはUTCより進んでおり、他のタイムゾーンは遅れています。

Linuxコンピュータのシステムクロックはソフトウェアベースです。 明らかに、コンピュータの電源がオフのときは実行できません。 別の時計、バッテリーでバックアップされたハードウェアベースのリアルタイムクロックは、コンピューターの電源がオフのときに実行できます。 その目的は、Linuxが起動するたびにシステムクロックに何時かを知らせることです。 ネットワークタイムプロトコル(NTP)サーバーへのアクセスが可能でない限り。

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

広告

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

  • システムクロックにアクセスしてUTCを取得する
  • それがどのタイムゾーンにあるかを知り、正しいオフセットを適用します
  • 夏時間が有効であるかどうかを考慮に入れてください

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

Linuxのsystemdが何年も経ってもまだ分裂している理由
Linuxのsystemdが何年も経ってもまだ分裂している理由

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

timedatectl入門

現在のデータと時刻およびその他の値を表示するには、 status演算子を指定してtimedatectlコマンドを使用します。

 timedatectlステータス

status演算子を使用したtimedatectlコマンドからの出力

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

 timedatectl 

演算子なしのtimedatectlコマンドからの出力

出力の両方のセットは次のことを示しています。

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

次のように入力すると、 timedatectlコマンドがサポートするタイムゾーンの数を確認できます。

 timedatectl list-timezones | wc -l 

timedatectlタイムゾーンのカウント

広告

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

 timedatectl list-timezones | grep "America /" | 以下

grepを使用してアメリカのタイムゾーンを除外する

そのリストを確認すると、「アメリカ」が可能な限り広い意味を持っていることがわかります。 次に気付くのは、ほとんどのエントリが実際のタイムゾーンではないことです。

少ない「アメリカの」タイムゾーンリスト

タイムゾーンの設定

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

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

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

 timedatectl set-timezone "America / Edmonton"
 timedatectl 

新しいタイムゾーンと時間設定

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

関連: Linuxでパイプを使用する方法

時刻と日付を手動で設定する

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

 timedatectl set-time 10:30:00 

時間同期が有効であるため、エラーメッセージが表示されます

広告

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

 sudo systemctl stop systemd-timesyncd.service

timedatectl set-time演算子を使用して、時刻、日付、またはその両方を設定できます。 日付は年-月-日の順序でYYY-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 

NTPサービスを再起動し、正しい時刻値を復元する

RTC:UTCまたはLTZ?

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

広告

この方法を紹介する理由は、時間設定で奇妙な問題が発生しているマシンに遭遇する可能性があるためです。 これは、リアルタイムクロックをUTCに戻す方法です。

まず、ローカルタイムゾーンに設定する必要があります。

 timedatectl set-local-rtc 1

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

 timedatectl 

リアルタイムクロックをローカルタイムゾーンに設定し、それに伴う警告

彼らは自分の気持ちをはっきりさせたと思います。

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

 timedatectl set-local-rtc 0

それを設定し、それを忘れる

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

広告

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

それらがすべて設定されている場合、コンピュータのタイムシステムは自分自身の面倒を見るでしょう。

関連: Linuxサーバーの時刻をネットワークタイムサーバー(NTP)と同期する方法