このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】タイムゾーンの確認と変更

タイムゾーンの確認と変更

 Linuxシステムにおけるタイムゾーンの設定は、システム全体の時間管理において非常に重要な役割を果たします。正確なタイムゾーン設定は、ログファイルのタイムスタンプ、スケジュールされたジョブの実行時間、そして各種アプリケーションの動作に直接影響を与えます。

 まず、タイムゾーン設定がどのように構成されているかを理解することが重要です。Linuxでは、タイムゾーン設定が /etc/localtime ファイルによって管理されており、このファイルは実際のタイムゾーンデータファイルへのシンボリックリンクとして機能します。また、タイムゾーンデータファイルは /usr/share/zoneinfo ディレクトリに格納されており、世界中のあらゆる地域に対応しています。

タイムゾーンの確認

1.デフォルトのタイムゾーン設定の確認

 デフォルトのタイムゾーンは /etc/localtime ファイルで設定されています。このファイルはタイムゾーン情報へのシンボリックリンクであり、リンク先のファイルによってタイムゾーンが決まります。

確認方法

・「ls -l /etc/localtime」コマンドを実行します。

user01@ubuntu-vm:~$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30  7月  8 23:24 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

 上記の例では、/etc/localtime/usr/share/zoneinfo/Asia/Tokyo というタイムゾーンファイルへのリンクであることが分かります。これは、タイムゾーンが「Asia/Tokyo」(日本時間)に設定されていることを示しています。

2.現在のシステム時間の確認

確認方法

・「date」コマンドを実行します。

user01@ubuntu-vm:~$ date
2024年  7月 19日 金曜日 23:57:19 JST

 出力に「JST」と表示されることから、日本標準時(Japan Standard Time)であることが確認できます。


/usr/share/zoneinfo ディレクトリ

タイムゾーン情報の格納場所

 タイムゾーン情報は /usr/share/zoneinfo ディレクトリにバイナリデータとして格納されています。このディレクトリには、世界中のさまざまな地域に対応するタイムゾーン情報が含まれています。

確認方法

・「ls /usr/share/zoneinfo」コマンドを実行します。

user01@ubuntu-vm:~$ ls /usr/share/zoneinfo
Africa      Cuba     GMT+0      Kwajalein  Poland     Zulu
America     EET      GMT-0      Libya      Portugal   iso3166.tab
Antarctica  EST      GMT0       MET        ROC        leap-seconds.list
Arctic      EST5EDT  Greenwich  MST        ROK        leapseconds
Asia        Egypt    HST        MST7MDT    Singapore  localtime
Atlantic    Eire     Hongkong   Mexico     Turkey     posix
Australia   Etc      Iceland    NZ         UCT        posixrules
Brazil      Europe   Indian     NZ-CHAT    US         right
CET         Factory  Iran       Navajo     UTC        tzdata.zi
CST6CDT     GB       Israel     PRC        Universal  zone.tab
Canada      GB-Eire  Jamaica    PST8PDT    W-SU       zone1970.tab
Chile       GMT      Japan      Pacific    WET        zonenow.ta

 この例から、世界中のタイムゾーン情報が含まれていることが確認できます。ファイルの内容はバイナリデータであるため、cat コマンドでは直接内容を確認できません。

タイムゾーンの変更

 タイムゾーンを変更するには、/etc/localtime のリンク先を変更するか、/usr/share/zoneinfo にあるタイムゾーンファイルを /etc/localtime にコピーする方法があります。

タイムゾーン変更手順

たとえば、日本時間からアメリカの「New York」タイムゾーンに変更する場合の手順は以下の通りです。

1.タイムゾーンファイルの確認

・「ls /usr/share/zoneinfo/America/New_York」コマンドを実行します。

このファイルが存在することを確認します。

user01@ubuntu-vm:~$ ls /usr/share/zoneinfo/America/New_York
/usr/share/zoneinfo/America/New_York

2.タイムゾーンをニューヨークに変更

・「sudo ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime」コマンドを実行します。

 ln -sf コマンドを使用して、/etc/localtime のリンクを America/New_York のタイムゾーンファイルに変更します。パスワードの入力が求められたら、パスワードを入力します。

user01@ubuntu-vm:~$ sudo ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
[sudo] user01 のパスワード: 

「 ln -sf」コマンドの意味

 このコマンドを使うと、指定されたターゲットのシンボリックリンクを強制的に作成または更新します。既存のリンクやファイルが存在する場合でも、それらを削除して新しいリンクを作成します。

ln コマンド

ln コマンドはリンク(ハードリンクまたはシンボリックリンク)を作成するためのコマンドです。

-s オプション

 -s は「シンボリックリンク(symbolic link)」を作成するためのオプションです。シンボリックリンクは、指定されたターゲットファイルまたはディレクトリのパスを指す特殊なファイルです。シンボリックリンクは、ターゲットファイルが移動または削除された場合に無効になりますが、ハードリンクはそのまま残ります。

-f オプション

 -f は「強制(force)」のオプションです。すでに存在する同名のファイルやリンクがある場合、そのファイルやリンクを強制的に上書きします。

3.変更の確認

・「date」コマンドを実行します。

 出力が「EDT」(Eastern Daylight Time)であることから、タイムゾーンが「America/New_York」に変更されたことが確認できます。

user01@ubuntu-vm:~$ date
2024年  7月 19日 金曜日 11:23:22 EDT

4.タイムゾーンを日本に戻す

・「sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime」コマンドを実行します。

 /etc/localtime のリンクを日本のタイムゾーンファイルに変更します。パスワードの入力が求められたら、パスワードを入力します。

user01@ubuntu-vm:~$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
[sudo] user01 のパスワード:

5.変更の確認

・「date」コマンドを実行します。

 変更後、date コマンドでタイムゾーンが戻されたことを確認します。「JST」(Japan Standard Time)が表示されれば、タイムゾーンが日本に戻されたことが確認できます。

user01@ubuntu-vm:~$ date
2024年  7月 20日 土曜日 00:37:26 JST

まとめ

タイムゾーンの確認

  • /etc/localtime がタイムゾーンファイルへのシンボリックリンク。
  • date コマンドで現在のタイムゾーンと時間を確認できる。
  • /usr/share/zoneinfo ディレクトリ
  • 世界中のタイムゾーン情報がバイナリ形式で格納されている。

タイムゾーンの変更

  • シンボリックリンクを変更するか、タイムゾーンファイルをコピーして変更する。
  • 変更後は date コマンドで確認する。

この方法で、タイムゾーンの確認と変更を適切に行うことができます。