『忘了再學』Shell基礎 — 15、環境變數(三)

繁華似錦Fighting 發表於 2022-05-20

提示:

在Linux系統中,環境變數分為兩種。一種是使用者自定義的環境變數,另一種是系統自帶的環境變數。

而在系統自帶的環境變數中,PATH環境變數、PS1環境變數、LANG語系變數需要進行說明一下。

本篇文章主要說明系統自帶的環境變數中的LANG語系環境變數。

1、LANG語系變數介紹

我們之前說過中文輸出的問題,Linux系統的中文支援包括兩個前提條件:

  • 安裝了中文字型和編碼(安裝的時候選擇中文安裝就安裝過了)
  • 操作終端必須支援中文編碼。

而LANG變數定義了Linux系統的主語系環境,檢視變數的預設值是:

[[email protected] ~]# echo $LANG 
zh_CN.UTF-8

這是因為我們Linux安裝時,選擇的是中文安裝,所以預設的主語系變數就是zh_CN.UTF-8

上邊是通過遠端終端查詢的,而進入到系統自帶的命令列終端執行上邊命令,結果如下:

image

可以看到上圖中顯示的是英文語言en_US.UTF-8,因為之前我們也說過,Linux的純字元介面是不支援中文顯示的(也就是不識別中文編碼)。如果非要讓Linux系統的純字元介面顯示中文,就需要安裝中文外掛。其實沒有必要,因為我們的伺服器一般都是在遠端,我們很少會本機操作,通常使用遠端終端登陸伺服器,所有的遠端終端基本上都是支援中文編碼的。

總結:LANG變數顯示的編碼就是當前系統的現實語言。

2、如何檢視Linux中支援的語系

我們可以使用以下命令查詢:

[[email protected] ~]# locale -a

如下圖:

image

Linux系統基本上支援所有的語言,一共可以支援700多種語言編碼。

[[email protected] ~ ]#  locale -a | more | wc -l
735

但要注意一點的是,這裡是顯示支援的語言,而你有沒有安裝相應的編碼,又是另外一回事。

3、檢視當前系統的語系

使用locale命令直接檢視當前系統的語言環境。

如下圖:

image

可以從上圖看出,因為我們安裝時候選擇的是中文安裝,Linux系統中的這些預設語系就是人中文編碼。

我們還要通過檔案/etc/sysconfig/i18n檔案,定義系統的預設語系。所謂預設語系,也就是開機之後,Linux系統就支援的語系。

檢視下這個檔案的內容:

[[email protected] src]# cat /etc/sysconfig/i18n 
LANG="zh_CN.UTF-8"

這又是當前系統語系,又是預設語系。我們可以這樣理解,預設語系是下次重啟之後系統所使用的語系,而當前系統語系是當前系統使用的語系。如果系統重啟,會從預設語系配置檔案/etc/sysconfig/i18n中讀出語系,然後賦予變數LANG讓這個語系生效。也就是說,LANG定義的語系只對當前系統生效,要想永久生效就要修改/etc/sysconfig/i18n檔案了。

4、總結

上邊的描述有的地方看起來很亂,我們這裡總結一下:

  • 檢視Linux中支援的語系
    可執行[[email protected] ~]# locale -a命令。
    查詢的結果只代表支援語言,並不代表安裝了該語言編碼。
  • 檢視當前系統的語言環境
    可執行[[email protected] ~]# locale 命令。
  • /etc/sysconfig/i18n檔案中儲存的是系統預設使用的字符集。是Linux系統開機就生效的,和終端沒有關係。所以LANG變數的值,開機預設就是/etc/sysconfig/i18n檔案中儲存屬性。
  • 在開機之後設定的LANG變數是臨時生效的。

最後我們在總結一下Linux系統中文顯示的問題:

我們需要解釋下Linux中文支援的問題。是不是我們只要定義了語係為中文語系,如zh_CN.UTF-8就可以正確顯示中文了呢?

這要分情況:

  • (1)如果我們是在圖形介面中,或者是使用遠端連線工具(如SecureCRT),只要正確設定了語系,那麼是可以正確顯示中文的,當然遠端連線工具也要配置正確的中文語系環境。
    總結兩點:

    • 安裝了中文字型和編碼。
    • 操作終端必須支援中文編碼。
  • (2)那麼如果是純字元介面(本地終端 tty1-tty6)是不能顯示中文的,因為Linux的純字元介面是不能顯示中文這麼複雜的編碼的。如果我們非要在純字元介面顯示中文,那麼只能安裝中文外掛,如zhcon等。