第3章 日付と時刻の設定

最新のオペレーティングシステムは、以下の 2 つのタイプのクロックを区別します。

  • リアルタイムクロック (RTC) は、一般に ハードウェアクロック と呼ばれ、通常、システムボード上の集積回路で、オペレーティングシステムの状態からは完全に独立しており、コンピューターがシャットダウンしても稼働します。
  • システムクロックソフトウェアクロック とも呼ばれ、カーネルが維持し、その初期値はリアルタイムクロックに基づいています。システムが起動するとシステムクロックは初期化され、リアルタイムクロックからは完全に独立したものになります。

システム時間は常に 協定世界時 (UTC) で維持され、必要に応じてアプリケーション内でローカル時間に変換されます。ローカルタイム は、夏時間 (DST) を考慮に入れた現行タイムゾーンの実際の時刻です。リアルタイムクロックは UTC またはローカルタイムのいずれかを使用できます。これは推奨オプションです。

Red Hat Enterprise Linux 7 は、システムの日付と時刻に関する情報を設定および表示するのに使用できる 3 つのコマンドラインツールを提供します。

  • この timedatectl ユーティリティーは、Red Hat Enterprise Linux 7 の新機能で、systemd に含まれています。
  • 従来の date コマンド。
  • ハードウェアクロックにアクセスするための hwclock ユーティリティー

3.1. timedatectl コマンドの使用

timedatectl ユーティリティーは、systemd システムおよびサービスマネージャーの一部として配布されており、システムクロック設定を確認および変更できます。このツールを使用すると、現在の日付および時間の変更、タイムゾーンの設定、リモートサーバーとシステムクロックとの自動同期の有効化が可能になります。

カスタマイズした形式で現在の日付と時間を表示する方法は 「date コマンドの使用」 も参照してください。

3.1.1. システムの現在日時の表示

現在の日時をシステムおよびハードウェアクロック設定の詳細情報と共に表示するには、timedatectl コマンドをオプションなしで実行します。

timedatectl

これで、ローカル時間、ユニバーサル時間、現在使用しているタイムゾーン、ネットワーク時刻プロトコル (NTP) 設定、DST に関する追加情報が表示されます。

例3.1 システムの現在日時の表示

以下の例は、システムクロックとリモートサーバーの同期に NTP を使用しないシステムで timedatectl コマンドを実行したときの出力です。

~]$ timedatectl
   Local time: Mon 2016-09-16 19:30:24 CEST
 Universal time: Mon 2016-09-16 17:30:24 UTC
    Timezone: Europe/Prague (CEST, +0200)
   NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
   DST active: yes
 Last DST change: DST began at
         Sun 2016-03-31 01:59:59 CET
         Sun 2016-03-31 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
         Sun 2016-10-27 02:59:59 CEST
         Sun 2016-10-27 02:00:00 CET
重要

chrony または ntpd のステータスへの変更は、timedatectl によってすぐには認識されません。これらのツールの設定またはステータスを変更した場合は、以下のコマンドを実行します。

~]# systemctl restart systemd-timedated.service

3.1.2. システムの現在時刻の変更

システムの現在時刻を変更するには、root でシェルプロンプトに以下を入力します。

timedatectl set-time HH:MM:SS

HH は時間、MM は分、SS は秒 (すべて 2 桁) の数字に置き換えます。

このコマンドは、システム時間とハードウェアクロックの両方を更新します。結果は、date --set および hwclock --systohc コマンドの両方を使用するのに類似しています。

NTP サービスが有効になっていると、このコマンドは失敗します。このサービスを一時的に無効にする方法は 「システムクロックのリモートサーバーとの同期」 を参照してください。

例3.2 システムの現在時刻の変更

システムの現在時刻を午後 11 時 26 分に変更するには、root で以下のコマンドを実行します。

~]# timedatectl set-time 23:26:00

デフォルトでは、システムは UTC を使用するように設定されています。ローカルタイムでクロックを維持するようにシステムを設定するには、rootset-local-rtc オプションを指定して timedatectl コマンドを実行します。

timedatectl set-local-rtc boolean

ローカルタイムでクロックを維持するようにシステムを設定するには、booleanyes (または ytruet、または 1) に置き換えます。UTC を使用するようにシステムを設定するには、booleanno (または nfalse0、または f) に置き換えます。デフォルトオプションは no です。

3.1.3. システムの現在日の変更

システムの現在の日付を変更するには、root でシェルプロンプトに以下を入力します。

timedatectl set-time YYYY-MM-DD

YYYY は 4 桁の年に、MMDD は 2 桁の月と日に置き換えます。

時間を指定せずに日付を変更すると、時間は 00:00:00 に設定されることに注意してください。

例3.3 システムの現在日の変更

システムの現在日を 2017 年 6 月 2 日に変更し、現在時刻は変更しない (午後 11:26) 場合は、root で以下のコマンドを実行します。

~]# timedatectl set-time 2017-06-02 23:26:00

3.1.4. タイムゾーンの変更

利用可能なタイムゾーンの一覧を表示するには、シェルプロンプトで以下を入力します。

timedatectl list-timezones

現在使用中のタイムゾーンを変更するには、root で以下を入力します。

timedatectl set-timezone time_zone

time_zone を、timedatectl list-timezones コマンドで一覧表示される値に置き換えます。

例3.4 タイムゾーンの変更

現在地に最も適したタイムゾーンを確認するには、timedatectl コマンドを list-timezones コマンドラインオプションとともに使用します。たとえば、ヨーロッパのタイムゾーンの一覧を表示するには、以下のコマンドを実行します。

~]# timedatectl list-timezones | grep Europe
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Bratislava

タイムゾーンを Europe/Prague に変更するには、root で以下のように入力します。

~]# timedatectl set-timezone Europe/Prague

3.1.5. システムクロックのリモートサーバーとの同期

上記の説明にある手動での調整の他に、timedatectl コマンドで NTP プロトコルを使用して、システムクロックを自動でリモートサーバーのグループと同期させる方法もあります。NTP を有効にすると、chronyd または ntpd サービスのうち、インストールされている方が有効になります。

NTP サービスは、以下のコマンドを使用して有効または無効にできます。

timedatectl set-ntp boolean

システムでシステムクロックをリモートの NTP サーバーと同期させるには、ブール値yes に置き換えます (デフォルトのオプション)。この機能を無効にするには、ブール値no に置き換えます。

例3.5 システムクロックのリモートサーバーとの同期

システムクロックとリモートサーバーの自動同期を有効にするには、以下を入力します。

~]# timedatectl set-ntp yes

このコマンドは、NTP サービスがインストールされていないと失敗します。詳細は「chrony のインストール」を参照してください。

3.2. date コマンドの使用

date ユーティリティーはすべての Linux システムで利用可能で、システムの現在日時の表示および設定を可能にします。システムクロックに関する詳細情報をカスタマイズされた形式で表示するために、スクリプト内で使用されることがよくあります。

タイムゾーンの変更、またはシステムクロックとリモートサーバーの自動同期を有効にする方法は timedatectl コマンドの使用」 を参照してください。

3.2.1. システムの現在日時の表示

現在の日時を表示するには、date コマンドをオプションを付けずに実行します。

date

このコマンドを実行すると、曜日、日付、ローカルタイム、タイムゾーンの省略形、年が表示されます。

date コマンドは、デフォルトではローカルタイムを表示します。UTC の時間を表示するには、コマンドラインオプション--utc または-u を指定してコマンドを実行します。

date --utc

また、+"format" オプションをコマンドラインに指定することで、表示される情報のフォーマットをカスタマイズすることもできます。

date +"format"

例3.6「システムの現在日時の表示」 を参考にして、フォーマットを、サポートされる 1 つまたは複数のコントロールシーケンスに置き換えます。よく使用されるフォーマットオプションのリストは 表3.1「よく使われるコントロールシーケンス」 を参照してください。これらのオプションの完全なリストは、man ページの date(1) を参照してください。

表3.1 よく使われるコントロールシーケンス

コントロールシーケンス詳細

%H

HH フォーマットでの時間 (例: 17)。

%M

MM フォーマットでの分 (例: 30)。

%S

SS フォーマットでの秒 (例: 24)。

%d

DD フォーマットでの日 (例: 16)。

%m

MM フォーマットでの月 (例: 09)。

%Y

YYYY フォーマットでの年 (例: 2016)。

%Z

タイムゾーンの省略形 (例: CEST)。

%F

非省略形の YYYY-MM-DD フォーマットでの日付 (例: 2016-09-16)。このオプションは %Y-%m-%d と同様です。

%T

非省略形の HH:MM:SS フォーマットでの時間 (例: 17:30:24)。このオプションは %H:%M:%S と同様です。

例3.6 システムの現在日時の表示

現在日とローカル時間を表示するには、シェルプロンプトで以下を入力します。

~]$ date
Mon Sep 16 17:30:24 CEST 2016

UTC で現在日時を表示するには、シェルプロンプトで以下を入力します。

~]$ date --utc
Mon Sep 16 15:30:34 UTC 2016

date コマンドの出力をカスタマイズするには、以下を入力します。

~]$ date +"%Y-%m-%d %H:%M"
2016-09-16 17:30

3.2.2. システムの現在時刻の変更

システムの現在時刻を変更するには、--set または -s オプションを指定して、rootdate コマンドを実行します。

date --set HH:MM:SS

HH は時間、MM は分、SS は秒 (すべて 2 桁) の数字に置き換えます。

date コマンドは、デフォルトでは、システムクロックをローカルタイムに設定します。システムクロックを UTC で設定するには、コマンドラインオプション --utc または -u を指定してコマンドを実行します。

date --set HH:MM:SS --utc

例3.7 システムの現在時刻の変更

システムの現在時刻を午後 11 時 26 分に変更するには、root で以下のコマンドを実行します。

~]# date --set 23:26:00

3.2.3. システムの現在日の変更

システムの現在の日付を変更するには、--set または -s オプションを指定して、rootdate コマンドを実行します。

date --set YYYY-MM-DD

YYYY は 4 桁の年に、MMDD は 2 桁の月と日に置き換えます。

時間を指定せずに日付を変更すると、時間は 00:00:00 に設定されることに注意してください。

例3.8 システムの現在日の変更

システムの現在日を 2017 年 6 月 2 日に変更し、現在時刻は変更しない (午後 11:26) 場合は、root で以下のコマンドを実行します。

~]# date --set "2017-06-02 23:26:00"

3.3. hwclock コマンドの使用

hwclock は、ハードウェアクロックにアクセスするためのユーティリティーです。これは、リアルタイムクロック (RTC) とも呼ばれています。ハードウェアクロックは使用中のオペレーティングシステムから独立しており、マシンがシャットダウンしても作動します。このユーティリティーは、ハードウェアクロックからの時間を表示するために使用されます。また、hwclock には、ハードウェアクロック内のシステム上のドリフトを補正する機能も含まれています。

ハードウェアクロックタイムは、年、月、日、時間、分、秒の値を保存します。ローカルタイムや協定世界時 (UTC) の時刻を保存したり、夏時間 (DST) を設定したりすることはできません。

hwclock ユーティリティーは、/etc/adjtime ファイルにその設定を保存します。このファイルは、時刻を手動で設定したり、ハードウェアクロックをシステム時間に同期したりするなどの初回の変更時に作成されます。

注記

Red Hat Enterprise Linux 6 では、システムのシャットダウンまたは再起動ごとに hwclock コマンドが自動的に実行されていましたが、Red Hat Enterprise Linux 7 には含まれていません。システムクロックが Network Time Protocol (NTP) または Precision Time Protocol (PTP) に同期される場合は、カーネルが 11分ごとに自動的にハードウェアクロックをシステムクロックに同期します。

NTP の詳細は 18章chrony スイートを使用した NTP 設定 および 19章ntpd を使用した NTP 設定 を参照してください。PTP の詳細は 20章ptp4l を使用した PTP の設定 を参照してください。ntpdate を実行した後のハードウェアクロックの設定方法は 「ハードウェアクロック更新の設定」 を参照してください。

3.3.1. システムの現在日時の表示

hwclock ユーザーで、オプションを付けずに root を実行すると、標準出力にローカルタイムの日時が返されます。

hwclock

hwclock コマンドで --utc または --localtime オプションを使用しても、ハードウェアクロックタイムが UTC またはローカルタイムで表示されるわけではありません。これらのオプションは、ハードウェアクロックのいずれかの設定を変更するために使用されます。この時間は常にローカル時間で表示されます。また、hwclock --utc または hwclock --local コマンドを使用しても、/etc/adjtime ファイルのレコードは変更されません。このコマンドは、/etc/adjtime に保存されている設定が正しくないことを把握していて設定を変更したくない場合に便利です。一方、このコマンドを誤った方法で使用すると、誤解を招く情報を受け取る可能性があります。詳細は、hwclock(8) man ページを参照してください。

例3.9 システムの現在日時の表示

ハードウェアクロックからシステムの現在の日付およびローカルタイムを表示するには、root で以下を実行します。

~]# hwclock
Tue 15 Apr 2017 04:23:46 PM CEST   -0.329272 seconds

CEST は 中央ヨーロッパ夏時間 (Central European Summer Time) の省略形です。

タイムゾーンの変更方法は 「タイムゾーンの変更」 を参照してください。

3.3.2. 日付と時刻の設定

ハードウェアクロックは、日付と時刻を表示するほかに、手動で特定の時刻に設定することができます。

ハードウェアクロックの日時を変更する場合は、コマンドに --set および --date オプションを追加します。

hwclock --set --date "dd mmm yyyy HH:MM"

dd は日 (2 桁)、mmm は月の省略形 (3 文字) に、yyyy は年 (4 桁)、HH は時間 (2 桁)、MM は分 (2 桁) に置き換えます。

同時に、--utc または --localtime オプションをそれぞれ追加して、UTC またはローカルタイムのいずれかで時刻を維持するようにハードウェアクロックを設定することもできます。この場合、UTC または LOCAL/etc/adjtime ファイルに記録されます。

例3.10 ハードウェアクロックの特定の日時への設定

たとえば、日時を 2016 年 10 月 21 日 21:17 に設定し、UTC のハードウェアクロックを維持する場合は、root で以下のコマンドを実行します。

~]# hwclock --set --date "21 Oct 2016 21:17" --utc

3.3.3. 日付と時刻の同期

ハードウェアクロックとシステムの現在時刻の同期を両方向で実行できます。

  • 以下のコマンドを使用して、ハードウェアクロックを、システムの現在時刻に設定できます。

    hwclock --systohc

    NTP を使用すると、ハードウェアクロックは 11 分ごとにシステムクロックに自動的に同期されるため、このコマンドは、システムのブート時に、妥当な初期のシステム時間を取得するためにのみ役立つことに注意してください。

  • または、以下のコマンドを使用してハードウェアクロックからシステム時間を設定できます。

    hwclock --hctosys

ハードウェアクロックとシステム時間を同期する場合は、--utc または --localtime を追加してローカルタイムまたは UTC でハードウェアクロックを保持するかどうかを指定できます。を使用する場合と同様に --setUTC または LOCAL/etc/adjtime ファイルに記録されます。

hwclock --systohc --utc コマンドは機能的に、timedatectl set-local-rtc false に類似しており、hwclock --systohc --local コマンドは timedatectl set-local-rtc true の代替手段となります。

例3.11 システムタイムへのハードウェアクロックの同期

ハードウェアクロックをシステムの現在時刻に設定し、ハードウェアクロックをローカルタイムで維持するには、root で以下のコマンドを実行します。

~]# hwclock --systohc --localtime

タイムゾーンおよび DST の切り替えに関する問題を避けるには、ハードウェアクロックを UTC で維持することを推奨します。例3.11「システムタイムへのハードウェアクロックの同期」 は、Windows システムとのマルチブートの場合などに役立ちます。この場合、デフォルトでハードウェアクロックがローカルタイムで実行されることが想定され、その他のシステムもすべてローカルタイムを使用して対応する必要があります。同様に仮想マシンでも必要になる場合があります。ホストが提供する仮想ハードウェアクロックがローカルタイムで実行中の場合は、ゲストシステムもローカルタイムを使用するように設定する必要があります。

3.4. 関連資料

Red Hat Enterprise Linux 7 でキーボードレイアウトを設定する方法は、以下を参照してください。

インストールされているドキュメント

  • timedatectl(1): timedatectl コマンドラインユーティリティーの man ページでは、このツールを使用して、システムクロックおよびその設定をクエリーして変更する方法が説明されています。
  • date(1): date コマンドの man ページでは、サポートされるオプションの完全なリストが提供されます。
  • hwclock(8): hwclock コマンドの man ページでは、サポートされるオプションの完全なリストが提供されます。

関連項目


このページには機械翻訳が使用されている場合があります (詳細はこちら)。