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
としておいた。