ロケール
多くのソフトウェアは利用者の地域情報 (ロケール) に従って表示言語や表示書式を変更できるように作られている。
ロケールは、メッセージの出力言語 (LCMESSAGES) や通貨 (LCMONETARY) などのカテゴリに分かれており、すべてのカテゴリに同じ値を設定するときは、環境変数 LANG または LC_ALL に設定する。
主なカテゴリは以下。
カテゴリ | 説明 |
---|---|
LC_CTYPE | 文字の種類やその比較* 分類の規定 |
LC_COLLATE | 文字の称号や整列に関する規定 |
LC_MESSAGES | メッセージ表示に使用する言語 |
LC_MONETARY | 通貨に関する規定 |
LC_NUMERIC | 数値の書式に関する規定 |
LC_TIME | 日付や時刻の書式に関する規定 |
これらのカテゴリは個々に別々の値を設定することができる。
主なロケールの値は以下。
ロケール | 説明 |
---|---|
C, POSIX | 英語 |
jaJP.utf8 (jaJP.UTF-8) | 日本語/Unicode |
ja_JP.eucJP | 日本語/EUC-JP |
ja_JP.shiftJIS | 日本語/シフトJIS |
en_US.utf8 | 英語/Unicode |
locale コマンドにより現在のロケールを確認可能。
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=ja_JP.UTF-8
LC_TIME=ja_JP.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ja_JP.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ja_JP.UTF-8
LC_NAME=ja_JP.UTF-8
LC_ADDRESS=ja_JP.UTF-8
LC_TELEPHONE=ja_JP.UTF-8
LC_MEASUREMENT=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_ALL=
$ LANG=ja_JP.UTF-8
$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC=ja_JP.UTF-8
LC_TIME=ja_JP.UTF-8
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY=ja_JP.UTF-8
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER=ja_JP.UTF-8
LC_NAME=ja_JP.UTF-8
LC_ADDRESS=ja_JP.UTF-8
LC_TELEPHONE=ja_JP.UTF-8
LC_MEASUREMENT=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_ALL=
$ ls a
ls: a にアクセスできません: そのようなファイルやディレクトリはありません
文字コード
Linux は様々な文字コードを扱うことができる。
文字コード | 説明 |
---|---|
ASCII | 7 bit で表現される基本的な 128 種類の文字 |
ISO-8859 | ASCII を拡張した 8 bit の文字コードで 256 種類の文字 |
UTF-8 | Unicode を使った文字コードで、1 文字を 1 byte ~ 6 bytes で表す |
EUC-JP | UNIX 環境で標準的に利用されていた日本語の文字コード |
ShiftJIS | Windows で利用される日本語の文字コード |
ISO-2022-JP | 電子メールなどで利用される日本語の文字コード(JIS コード) |
現在、多くのディストリビューションでは UTF-8 を使用しているが、日本ではいくつかの文字コードが混在しているので、例えば Windows で作成したファイルを Linux で開くと文字化けする。
文字コードを変換する場合は iconv コマンドを用いる。
$ iconv -f utf8 -t eucjp testfile.txt > testfile-eucjp.txt
また、指定可能な文字コードは -l オプションで調べることができる。
$ iconv -l
The following list contain all the coded character sets known. This does
not necessarily mean that all combinations of these names can be used for
the FROM and TO command line parameters. One coded character set can be
listed with several different names (aliases).
437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,
8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,
ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,
ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,
タイムゾーン
タイムゾーンの情報は /usr/share/zoneinfo ディレクトリ以下のバイナリファイルに格納されている。
$ ls -l /usr/share/zoneinfo/ | head -10
total 416
drwxr-xr-x 2 root root 4096 4月 13 00:08 Africa
drwxr-xr-x 6 root root 4096 4月 13 00:08 America
drwxr-xr-x 2 root root 4096 4月 13 00:08 Antarctica
drwxr-xr-x 2 root root 4096 4月 13 00:08 Arctic
drwxr-xr-x 2 root root 4096 4月 13 00:08 Asia
drwxr-xr-x 2 root root 4096 4月 13 00:08 Atlantic
drwxr-xr-x 2 root root 4096 4月 13 00:08 Australia
drwxr-xr-x 2 root root 4096 4月 13 00:08 Brazil
-rw-r--r-- 1 root root 2102 4月 4 18:59 CET
システムで利用するタイムゾーンは、上記のファイルを /etc/localtime にコピーすれば良い。
日本は /usr/share/zoneinfo/Asia/Tokyo なので、以下のコマンドを実行する。(cp でも良い)
$ sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 6月 5 17:36 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
$ date
2018年 6月 5日 火曜日 17:37:19 JST
また、タイムゾーンは環境変数 TZ で設定することもできる。
$ export TZ="Asia/Tokyo"
この値を全ユーザーで利用するには /etc/timezone ファイルに Asia/Tokyo と設定する必要がある。
tzselect コマンドでタイムゾーンの設定値を確認可能。
$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.