rootにsuするとファイル名や設定ファイル内の日本語が文字化けする

2023/11/04
表題の問題.最近Debianに戻ってきて躓いたのでメモする*1

ロケールの問題だと思ったので関連を調べた.
“env”コマンドでログインしているアカウントの環境設定がわかる.
出力結果の“LANG=C”,これが問題の原因である.
一般ユーザはちゃんと日本語の“ja_JP.UTF-8”になっているのに,
“su -”でrootへログインした際はこの設定になってしまう.
root@bigowl2nd:~# env
SHELL=/bin/bash
PWD=/var/○○○
LOGNAME=root
HOME=/root
LANG=C
TERM=xterm
USER=root
SHLVL=1
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAIL=/var/mail/root
_=/usr/bin/env
OLDPWD=/var/○○△
root@bigowl2nd:~#
つまりroot用の設定ファイルが怪しいので,rootのホーム“/root”を探す.
“ls -lah”でそれっぽいファイルを探すと“.profile”があることに気づく(普段カスタマイズは基本しないのでノーマークだった).
root@bigowl2nd:~# cat .profile
# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n 2> /dev/null || true
# Installed by Debian Installer:"
#  no localization for root because ja_JP.UTF-8"
#  cannot be properly displayed at the Linux console"
LANG=C
LANGUAGE=C
理由もしっかり書いてある*2.この記述内容を書き換えれば解決である.

バックアップしてから“.profile”を下のように編集し,ログインし直す.
root@bigowl2nd:~# cp .profile .profile_org
root@bigowl2nd:~# vim .profile
root@bigowl2nd:~# diff -u .profile_org .profile
--- .profile_org        2023-11-03 22:53:38.094015640 +0900
+++ .profile    2023-11-03 22:54:45.714040588 +0900
@@ -10,5 +10,6 @@
 # Installed by Debian Installer:"
 #  no localization for root because ja_JP.UTF-8"
 #  cannot be properly displayed at the Linux console"
-LANG=C
+# LANG=C
+LANG=ja_JP.UTF-8
 LANGUAGE=C
root@bigowl2nd:~# exit
再ログイン後にもう一度“env”コマンドを実行すると直ってると思う.
root@bigowl2nd:~# env
SHELL=/bin/bash
PWD=/root
LOGNAME=root
HOME=/root
LANG=ja_JP.UTF-8
TERM=xterm
USER=root
SHLVL=1
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAIL=/var/mail/root
OLDPWD=/var/samba
_=/usr/bin/env
root@bigowl2nd:~#

*1 : しばらく,CentOSとRocky Linuxを使っていたのだが,開発関係のゴタゴタが気になってきたので,Debianへ本格的に帰還することにした.

*2 : Debianを最近のPCへインストールする際は,デスクトップ環境も初期状態で入れると思うのであまり関係ないが,貧弱なスペックのサーバ・パソコンや,シングルボードコンピュータなど,メモリやCPUパワーを節約したい環境へインストールする場合はローカルからCUIのみで操作することもある.このときに“LANG=C”でないと文字化けで操作不能に陥る可能性があるため,デフォルト設定は“LANG=C”にしているという訳だ.Debianは色々なところで使うものね.