GNU/Linux >> Linux の 問題 >  >> Linux

7 ハードウェア クロックの日付時刻を設定する Linux hwclock コマンドの例

Linux カーネルによって管理されるクロックは、ハードウェア クロックと同じではありません。

システムをシャットダウンしても、ハードウェア クロックは動作します。

ハードウェアクロックは、BIOS クロックとも呼ばれます。 BIOS からハードウェア クロックの日付と時刻を変更できます。

ただし、システムが稼働している場合でも、このチュートリアルで説明されているように、Linux hwclock コマンドを使用してハードウェアの日付と時刻を表示および設定できます。

1.ハードウェア クロックの日付と時刻を表示

hwclock と入力するだけで、システムのハードウェア クロックの日付と時刻が表示されます。これは、BIOS 画面に表示される日付と時刻と同じです。オプション -r または –show を使用して日付と時刻を表示することもできます。

# hwclock
Sat 10 Aug 2013 08:26:12 AM PDT  -0.312862 seconds

# hwclock -r
Sat 10 Aug 2013 08:20:54 AM PDT  -0.109748 seconds

# hwclock --show
Sat 10 Aug 2013 08:21:12 AM PDT  -0.640982 seconds

注:date コマンドの出力は、hwclock コマンドの出力と同じになる場合があります (実際には同じである必要があります)。ただし、date コマンドは、Linux カーネルが管理する時計から日付と時刻を取得します。この例では、それらの間に約 10 分の違いがあります。

# date
Sat Aug 10 08:11:21 PDT 2013

2.システム時刻をハードウェア時刻にコピー

ハードウェア クロックがシステム クロックと同じ日付と時刻であることを確認する必要があります。

現在ご覧のとおり、システム クロックとハードウェア クロックの時間には違いがあります。

# date
Sat Aug 10 08:16:17 PDT 2013

# hwclock
Sat 10 Aug 2013 08:26:53 AM PDT  -0.687841 seconds

そのため、以下に示すように hwclock コマンドを使用して、ハードウェア クロックをシステム クロックと同じに設定します。これは、hwclock コマンドの一般的な使用方法です。

# hwclock -w

# hwclock
Sat 10 Aug 2013 08:16:27 AM PDT  -0.625382 seconds

# date
Sat Aug 10 08:16:28 PDT 2013

注:-w オプションと –systohc オプションはどちらも同じことを行います。覚えやすいので、–systohc を使用するのが好きです。 –systohc は「システムからハードウェア クロックへ」の略で、システムからハードウェア クロックに時刻をコピーします。

# hwclock --systohc

3.ハードウェア クロックの日付と時刻を手動で設定

システムの日付と時刻をハードウェア クロックにコピーする代わりに、以下に示すように –set および –date オプションを使用して手動で値を設定することもできます。

以下は、日付を 2013 年 8 月 11 日に設定します。時刻を指定しない場合、午前 12:00:00 に設定されることに注意してください。

# hwclock --set --date 8/11/2013

# hwclock
Sun 11 Aug 2013 12:00:04 AM PDT  -0.703489 seconds

以下に示すように、日付と時刻の両方を同時に設定することもできます。デフォルトでは現地時間が使用されることに注意してください。

# hwclock --set --date "8/11/2013 23:10:45"

# hwclock
Sun 11 Aug 2013 11:10:48 PM PDT  -0.562862 seconds

以下に示すように、date コマンドの出力を取得して、–set および –date オプションに渡すこともできます。

# hwclock --set --date "Sat Aug 10 08:31:24 PDT 2013"

# hwclock
Sat 10 Aug 2013 08:31:28 AM PDT  -0.594118 seconds

4.ハードウェア時刻をシステム時刻にコピー

ハードウェア クロックが正しい日付と時刻を示しているが、システム クロックが表示されていない場合は、以下に示すように -s オプションを使用して、ハードウェア時刻をシステム時刻にコピーできます。

# hwclock
Sat 10 Aug 2013 08:20:28 AM PDT  -0.687872 seconds

# date
Sat Aug 10 08:34:48 PDT 2013

# hwclock -s

# date
Sat Aug 10 08:20:55 PDT 2013

注:-s オプションと –hctosys オプションはどちらも同じことを行います。覚えやすいので、–hctosys を使用するのが好きです。 –hctosys は「hardware clock to system」の略で、ハードウェア クロックからシステム クロックに時刻をコピーします。

# hwclock -hctosys

これをテストしているときに、システム時刻を台無しにしてしまった場合は、date コマンドの例を使用して正しい日付と時刻に設定できます。

5. hwclock デバッグ モード

–debug オプションを hwclock に渡すと、hwclock コマンドが何をするかを正確に示すデバッグ情報が表示されます。

以下は、システム時間をハードウェア時間にコピーするときの動作を正確に示しています。

# hwclock --systohc --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375974983 seconds after 1969
Last calibration done at 1375974983 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:16:37
Hw clock time : 2013/08/10 15:16:37 = 1375974997 seconds since 1969
Time elapsed since reference time has been 0.009002 seconds.
Delaying further to reach the new time.
Setting Hardware Clock to 15:16:37 = 1375974997 seconds since 1969
ioctl(RTC_SET_TIME) was successful.
Not adjusting drift factor because it has been less than a day since the last calibration.

以下は、ハードウェア時間をシステム時間にコピーするときの動作を正確に示しています。

# hwclock -hctosys --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:23:20
Hw clock time : 2013/08/10 15:23:20 = 1375975400 seconds since 1969
Calling settimeofday:
        tv.tv_sec = 1375975400, tv.tv_usec = 0
        tz.tz_minuteswest = 420

注:alpha マシンでは、getepoch を使用してエポックを表示し、setepoch を使用してエポックを設定できます。これを Alpha マシンで実行しようとすると、次のエラー マシンが表示されます。

# hwclock --setepoch --epoch=1952
The kernel keeps an epoch value for the Hardware Clock only on an Alpha machine.
This copy of hwclock was built for a machine other than Alpha
(and thus is presumably not running on an Alpha now).  No action taken.

6.ハードウェア クロックを調整する

システムが起動すると、ハードウェア クロックから時間がかかります。 /etc/adjtime ファイルは、調整を制御するために hwclock –adjust オプションによって使用されます。

# hwclock --adjust

/etc/adjtime ファイルには次の 3 行があります。

# cat /etc/adjtime
-3.019877 1375975224 0.000000
1375975224
UTC
  • 最初の行の 3 つの値は、1) 1 日あたりの秒単位の体系的な変動率、2) 最近の調整の 1969 UTC からの秒数、3) ちょうど 0 を表します
  • 2 行目は、1 行目の 2 番目の値と同じ値です。つまり、最近の調整の 1969 UTC からの秒数
  • 3 行目は UTC または LOCAL のいずれかになります

7. hwclock テスト モード

–test オプションを使用して hwclock を使用して何かを変更すると、実際には何も変更せずにコマンドを実行できます。

–systz オプションは、それに応じてシステムのタイムゾーンを変更します。ただし、–test を指定したため、実際には変更されませんが、コマンドは問題なく実行されます。

# hwclock --systz --test
Not setting system clock because running in test mode.

テスト モードの最適な使用法は、デバッグ オプションと組み合わせる場合です。つまり、hwclock コマンドの動作を確認したいが、何も変更しない場合。

# hwclock --systz --test --debug
hwclock from util-linux-ng 2.17.2
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Current system time: 1375975586 = 2013/08/10 15:26:26
Calling settimeofday:
        UTC: 2013/08/10 15:26:26
        tv.tv_sec = 1375975586, tv.tv_usec = 556277
        tz.tz_minuteswest = 420
Not setting system clock because running in test mode.

以下は、実際には調整を行わずに –adjust オプションが何をするかを正確に示しています。

# hwclock --adjust --test --debug
hwclock from util-linux-ng 2.17.2
Using /dev interface to clock.
Last drift adjustment done at 1375975224 seconds after 1969
Last calibration done at 1375975224 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2013/08/10 15:30:35
Hw clock time : 2013/08/10 15:30:35 = 1375975835 seconds since 1969
Time since last adjustment is 611 seconds
Need to insert -1 seconds and refer time back 0.978644 seconds ago
Needed adjustment is less than one second, so not setting clock.

Linux
  1. Linux 時間コマンドの例

  2. 7 Linux df コマンドの例

  3. 8 Linux TR コマンドの例

  1. 7 システムの日付時刻を表示および設定するLinux Dateコマンドの例

  2. Linux での hwclock コマンドの例

  3. Linux での date コマンドの例

  1. Linuxでの8つのクイック日付コマンドの例

  2. 初心者向けのLinux日付コマンドチュートリアル(8例)

  3. Linux での uptime コマンドの例