Linux の時計には、「ハードウェアクロック」と「システムクロック」という2つのクロックが存在します。
ハードウェアクロックは、マザーボードが持つ内部時計であり、BIOS クロックやCMOS クロックとも呼ばれます。
システムクロックは、Linux がカーネル内部に持っている時計であり、私達が画面上で見るのはこのシステムクロックになります。
Linux は、システムが起動する時に一度だけハードウェアクロックを参照し、その時刻をシステムクロックに設定します。
これは、Linux が起動するたびに行われる動作であり、ハードウェアクロックがおかしな時刻になっていると、システムクロックも同様におかしな時刻を表示します。
従って、システムクロックの値がおかしいからと言って、システムクロックだけを設定しなおしても、ハードウェアクロックを書き換えない限りは、再起動するたびにシステムクロックを再設定し直さなければなりません。
そこで、クロックを設定する時には、以下のいずれかの順で設定します。
- ハードウェアクロックを設定し、システムクロックをこれに同期させる
- システムクロックを設定し、ハードウェアクロックをこれに同期させる
一つ目の手順では、ハードウェアクロックを先に書き換えるので、ハードウェアクロック設定後は次回起動時に自動的にシステムクロックが同期されます(再起動しないで同期させる事もできます)。
二つ目の手順では、システムクロックを設定しただけでは再起動したときに設定内容が初期化されるので、きちんとハードウェアクロックも書き換える必要があります。
どちらの方法でも、正確な時刻を取得する場合には、公開されているNTP サーバを利用します。
NTP サーバを利用しない場合には、自分で他の時計を参照して時刻を設定します。
尚、クロックの設定はroot 権限でなければ実行できません。
ハードウェアクロックを扱うには、clock コマンドといくつかのオプションを使用します。
以下に、ハードウェアクロック関連のコマンドとオプションの例を示します。
尚、clock コマンドとhwclock コマンドは同じものとして扱います。
clock コマンドのオプション
オプション |
意味 |
-u |
世界標準時(UTC)として扱う |
-r または --show |
ハードウェアクロックを表示する |
-w または --systohc |
ハードウェアクロックにシステムクロックを書き込む |
-s または --hctosys |
ハードウェアクロックをシステムクロックに書き込む |
--set --date |
ハードウェアクロックに任意の日時を設定する |
-h または --help |
ヘルプを表示する |
上記のように、-s オプションと -w オプションは逆を示すので注意してください。
また、オプションを指定しない場合には、ハードウェアクロックが表示されます。
以下に、使用例をいくつか示します。
ハードウェアクロックを表示させるには、次のようにします。
# clock
2005年12月22日 15時01分29秒 -0.824783 秒
ハードウェアクロックに任意の日時を設定するには、次のようにします。
この例では、2005年12月22日、15:03に設定しています。
設定を入力するとすると、設定内容が表示されます。
# date --set="2005/12/22 15:03"
2005年 12月 22日 木曜日 15:03:00 JST
ハードウェアクロックを基準にする場合には、システムクロックをこれに合わせなければなりません。
先に述べたように、システムクロックはOS を再起動すれば起動時にハードウェアクロックに同期しますが、直ぐに同期させたい場合には次のようにします。
# clock -s
また、システムクロックを基準にした場合には、ハードウェアクロックにシステムクロックを書き込まなければなりません。
次のようなコマンドで、システムクロックをハードウェアクロックに書き込みます。
書き込んだ後は、システムクロックを表示するdate コマンドを使用すれば、同期されているか確認できます。
# clock -w
システムクロックを扱うには、date コマンドといくつかのオプションを使用します。
以下に、システムクロック関連のコマンドとオプションの例を示します。
date コマンドのオプション
オプション |
意味 |
-u |
世界標準時(UTC)として扱う |
-s または--set |
システムクロックに任意の時刻を設定する |
--help |
ヘルプを表示する |
オプションを指定しない場合には、システムクロックが表示されます。
以下に、使用例をいくつか示します。
システムクロックを表示させるには、次のようにします。
# date
2005年 12月 22日 木曜日 15:01:24 JST
システムクロックに任意の日時を設定するには、次のようにします。
この例では、2005年12月22日、15:03に設定しています。
指定する日時は、一般的な形式ならば良いようです。
設定を入力するとすると、設定内容が表示されます。
# date --set="15:03"
2005年 12月 22日 木曜日 15:03:00 JST
# date --set="2005/12/22 15:03"
2005年 12月 22日 木曜日 15:03:00 JST
システムクロックを基準にする場合には、ハードウェアクロックをこれに合わせなければなりません。
ハードウェアクロックをシステムクロックに同期させるには、先に述べた clock -w コマンドを使用します。
また、ハードウェアクロックとシステムクロックを同時に表示したい場合には、シェルの機能を使用して、次のようにします。
セミコロンを利用する事で、複数のコマンドを続けて入力する事ができます。
# date;clock
2005年 12月 22日 木曜日 15:04:22 JST
2006年12月22日 15時04分22秒 -0.847888 秒
# clock;date
2006年12月22日 15時05分05秒秒 -0.938274 秒
2005年 12月 22日 木曜日 15:05:05 JST