萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux su 命令無反應?可能是語系與終端編碼衝突

在 CentOS 6.3 64 位元環境下,使用 SecureCRT 連線時,su 或 su - 按下 Enter 後長時間無回應,甚至出現亂碼錯誤。經排查,根本原因是 系統語系設為中文(GB18030)而終端編碼設為 UTF-8,導致提示訊息編碼不匹配,造成命令卡住。

SecureCRT 編碼設定

問題環境

  • OS:CentOS 6.3 x64
  • 終端:SecureCRT 7.0.0
  • 現象:su/su - 無反應,等待約 1 分鐘後出現亂碼提示

根因分析

  1. 使用者先前為解決 vi 編輯中文檔案亂碼,將 SecureCRT 的 Character encoding 從 Default 改為 UTF-8。
  2. 同時系統 /etc/sysconfig/i18n 設定為中文環境:
    LANG="zh_CN.GB18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
  3. su 執行時會輸出提示訊息(如密碼提示),系統以 GB18030 編碼送出,但終端以 UTF-8 解碼,導致解碼失敗、卡住等待。

解決步驟

1. 將系統語系改回英文 UTF-8

# 編輯 /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
# 其餘行可註解或移除

2. 終端編碼保持 UTF-8

SecureCRT → Options → Session Options → Terminal → Appearance → Character encoding:**UTF-8**

3. 重新登入驗證

  • su 正常提示密碼並切換身分。
  • vi 編輯中文檔案不再亂碼(因系統與終端同為 UTF-8)。

關鍵原則

系統語系(LANG)與終端編碼必須一致。 推薦統一使用 en_US.UTF-8 + 終端 UTF-8,同時支援中文顯示與命令正常運作。

適用範圍

此問題常見於 CentOS 6 / RHEL 6 系列,搭配 SecureCRT、Xshell 等終端且手動修改過語系或終端編碼的情境。新版 CentOS 7/8/9、Ubuntu 等預設皆為 UTF-8,較少發生。

copyright © 萬盛學電腦網 all rights reserved