Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux su 命令無反應?字元編碼與語系衝突排查實錄

編輯:關於 Linux

CentOS 6.3 x64 + SecureCRT 環境下,su 或 su - 按 Enter 後長時間無回應,最終出現亂碼錯誤。根因:系統語系設為中文(GB18030)而終端編碼設為 UTF-8 導致提示訊息編碼不匹配,造成 su 進程掛起。

問題環境

  • OS:CentOS 6.3 64-bit
  • 終端:SecureCRT 7.0
  • 現象:su/su - 無回應,約 1 分鐘後出現亂碼提示

排查過程

  1. 回憶前次操作:為解決 vi 編輯中文檔案亂碼,將 SecureCRT Options → Session Options → Terminal → Appearance → Character encoding 從 Default 改為 UTF-8。
  2. 檢查系統語系 /etc/sysconfig/i18n:
    #LANG="en_US.UTF-8"
    #SYSFONT="latarcyrheb-sun16"
    LANG="zh_CN.GB18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
    SYSFONT="lat0-sun16"
  3. 驗證假設:系統語系 = 中文(GB18030) + 終端編碼 = UTF-8 會導致 su 卡住。改回英文 UTF-8 環境即解決。

解決方案

修改 /etc/sysconfig/i18n 為:

LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

SecureCRT 保持 UTF-8。重新登入後:

  • su 正常運作
  • vi 編輯中文檔案不再亂碼

核心原理

su 提示訊息(如 "Password:")由系統語系決定編碼;終端以 UTF-8 解碼顯示,產生亂碼甚至導致讀取阻塞。統一「系統語系編碼 = 終端編碼」即可避免此類問題。

最佳實踐

  • 伺服器建議統一使用 en_US.UTF-8 或 zh_CN.UTF-8,避免 GB18030/GB2312 舊編碼。
  • 終端軟體編碼務必與系統語系一致。
  • 需中文介面時,安裝 zhcon 或使用支援 UTF-8 的桌面環境。

編碼不一致是跨平台管理常見坑,統一 UTF-8 是現代 Linux 運維的標準做法。

Copyright © Windows教程網 All Rights Reserved