LANG=en_US.UTF-8
だとファイルの並びがおかしくなる。
~ $ mkdir /tmp/a && cd /tmp/a
/tmp/a $ touch 犬
/tmp/a $ touch あ
/tmp/a $ touch 1
まずこんな感じにファイルを作ってen_US.UTF-8
で見てみる。
/tmp/a $ LANG=en_US.UTF-8 ls -l
total 4
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 あ
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 1
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 犬
おかしい。これはls
だけでなくデスクトップ上のファイルブラウザも同様だ。ja_JP.UTF-8
やC
だと思ったように並んでくれるのに……!地味に困るんだけど、今更日本語でLinuxデスクトップなんて使いたくないし、C
もC
でいろいろ不都合が多いので困ったとなるわけ。
LC_COLLATE
を使おう
そんなときはLC_COLLATE
を使用する。ご存知の通り言語設定は日付や通貨などルールごとにも設定できるようになっているが、並び替えについてもロケールが存在している。なのでこれをC
したり、
/tmp/a $ LC_COLLATE=C ls -l
total 4
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 1
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 あ
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 犬
ja_JP.UTF-8
にしてやると、
/tmp/a $ LC_COLLATE=ja_JP.UTF-8 ls -l
total 4
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 1
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 あ
-rw-r--r-- 1 ken ken 0 Oct 16 06:17 犬
いい感じに並んでくれる。各ロケールは/etc/locale.conf
で指定するので、
LANG=en_US.UTF-8
LC_COLLATE=ja_JP.UTF-8
としておいた。