タイムゾーンの設定
タイムゾーンを変更するには、2つのやり方があります。1つ目は、export TZ="Asia/Tokyo"
コマンドをうって、TZ
環境変数に日本標準時の設定を行う方法です。
ただし、このコマンドをうつだけでは、一時的な設定になるだけであるため、毎回、このコマンドが流れるようにするため、.profile
の中にコマンドを記述することになります。.bashrc
に記述しても悪くはありませんが、環境変数系の設定は慣用的に.profile
の方に書かれることが多いようです。(チームで同じ環境を触っているのであれば、他人が見て分かり易いように記述するべきですが、全く個人の環境であれば、それ程、意識する必要はないかと思います。)Ubuntuの場合は.profile
ですが、RedHat系のOSの場合は、.bash_profile
となります。微妙にファイル名が異なります。
環境変数でタイムゾーンを設定すると、設定したユーザーにしか反映されないことになります。別のユーザーでログインした場合は反映されません。特別な理由がない限り、環境変数で設定する機会はほぼないと思われます。環境変数でタイムゾーンの設定ができるやり方はあまり知らなくてもいいんじゃないかと思います。しかし、LPICとか資格を取りたい人は、問題で問われるようなので、試験対策のために、しっかりと知っておいて下さい。
どのユーザーでログインしても、OS共通で設定したタイムゾーンが反映されるようにするには、環境変数で設定するのではなく、/etc/localtime
ファイルに設定を組み込むことになります。これが2つ目の方法です。
/etc/localtime
をcat
で表示すると分かりますがバイナリファイルです。file --mime /etc/localtime
で確認すると、 確かにcharset=binary
となっています。つまり、エディタを使って設定ファイルを触って、タイムゾーンの設定をするような方法で設定する方法ではないということが想像できます。更に、/etc/localtime
をls -l
で表示すると分かりますが、/usr/share/zoneinfo
配下に沢山存在する、タイムゾーン関連の設定ファイルのシンボリックリンクになっています。つまり、例えば、タイムゾーンを東京にしたい場合、/etc/localtime
のシンボリックリンク先を、/usr/share/zoneinfo/Asia/Tokyo
に変更してやればいいということになります。それか、シンボリックリンクを張らずに、/usr/share/zoneinfo/Asia/Tokyo
を、/etc/localtime
にリネームしてコピーしても同じことになります。ただし、シンボリックリンクを張って設定しておいた方が、後々、確認した時に何をやっているのか分かり易くなるためベターです。海外に引っ越しをすることでもない限り、タイムゾーンを変更する事は、ほぼほぼないとは思いますが。
タイムゾーンを設定する方法で2通りのやり方を紹介しました。タイムゾーン関連のファイルで、Debian系
Linuxには存在していて、RedHat系
Linuxには存在していないファイルがあります。それが、/etc/timezone
です。/etc/timezone
は、/etc/localtime
ファイルと異なりテキスト形式のファイルです。つまり、Debian系
Linuxには、/etc/localtime
を使う代わりに、エティタで/etc/timezone
を直接編集して、タイムゾーンを変更する方法も用意されているということです。/etc/timezone
を使う場合は注意が必要になります。Debian系
Linuxで、/etc/localtime
と/etc/timezone
の2つのファイルが混在している場合は、/etc/localtime
で設定した内容の方が有効となり、/etc/timezone
の方は無効となります。
同じ設定ができるファイルが、2種類存在していること自体混乱の元ですが、基本的には、/etc/localtime
の方を使って、/etc/timezone
は使わないと考えておいていいかと思います。そもそも、/etc/timezone
は、詳しくは分かりませんが、特別な用途でしか使われないようです。
タイムゾーンの設定をしようとして、/etc/localtime
のシンボリックリンクを変更する場合、ln -s
コマンドを使って編集してもいいが、そんなことはしないで、タイムゾーンを変更するための専用コマンドが用意されています。しかも2つあります。それが、timedatectl
コマンドとtzselect
コマンドです。どちらを使って設定してもOKです。tzselect
は対話的に設定できるインターフェースが用意されているコマンドであるのに対し、timedatectl
は対話的でないコマンドとなります。
参考URL