Unix/Linux - 環境



在本章中,我們將詳細討論 Unix 環境。一個重要的 Unix 概念是**環境**,它由環境變數定義。一些由系統設定,另一些由您設定,還有一些由 shell 或載入另一個程式的任何程式設定。

變數是一個字元字串,我們為其分配一個值。分配的值可以是數字、文字、檔名、裝置或任何其他型別的資料。

例如,首先我們設定一個變數 TEST,然後我們使用**echo**命令訪問其值:

$TEST="Unix Programming"
$echo $TEST

它產生以下結果。

Unix Programming

請注意,環境變數在設定時不使用$符號,但在訪問它們時,我們使用$符號作為字首。這些變數保留其值,直到我們退出 shell。

當您登入系統時,shell 會經歷一個稱為**初始化**的階段來設定環境。這通常是一個兩步過程,涉及 shell 讀取以下檔案:

  • /etc/profile
  • .profile

過程如下:

  • shell 檢查檔案/etc/profile是否存在。

  • 如果存在,shell 會讀取它。否則,將跳過此檔案。不會顯示任何錯誤訊息。

  • shell 檢查檔案.profile是否在您的主目錄中存在。您的主目錄是您登入後開始所在的目錄。

  • 如果存在,shell 會讀取它;否則,shell 會跳過它。不會顯示任何錯誤訊息。

一旦這兩個檔案都被讀取,shell 就會顯示一個提示符:

$

這是您可以輸入命令以執行它們的提示符。

注意 - 此處詳細介紹的 shell 初始化過程適用於所有Bourne型別的 shell,但bashksh使用一些其他檔案。

.profile 檔案

檔案/etc/profile由您的 Unix 機器系統管理員維護,包含系統上所有使用者所需的 shell 初始化資訊。

檔案.profile由您控制。您可以將任意數量的 shell 自定義資訊新增到此檔案中。您需要配置的最小資訊集包括:

  • 您正在使用的終端型別。
  • 用於查詢命令的目錄列表。
  • 影響終端外觀的一系列變數。

您可以檢查您主目錄中可用的.profile。使用 vi 編輯器開啟它,並檢查為您的環境設定的所有變數。

設定終端型別

通常,您正在使用的終端型別由logingetty程式自動配置。有時,自動配置過程會錯誤地猜測您的終端。

如果您的終端設定不正確,命令的輸出可能看起來很奇怪,或者您可能無法正確地與 shell 互動。

為了確保不會出現這種情況,大多數使用者以以下方式將其終端設定為最低公分母:

$TERM=vt100
$

設定 PATH

當您在命令提示符下鍵入任何命令時,shell 必須在執行命令之前找到該命令。

PATH 變數指定 shell 應該在其中查詢命令的位置。通常,Path 變數設定為如下所示:

$PATH=/bin:/usr/bin
$

這裡,由冒號字元(:)分隔的每個單獨的條目都是目錄。如果您請求 shell 執行一個命令,並且它在 PATH 變數中給出的任何目錄中都找不到它,則會出現類似以下的訊息:

$hello
hello: not found
$

有一些變數如 PS1 和 PS2,將在下一節中討論。

PS1 和 PS2 變數

shell 顯示為命令提示符的字元儲存在變數 PS1 中。您可以將此變數更改為您想要的任何內容。一旦更改它,shell 將從那時起使用它。

例如,如果您發出以下命令:

$PS1='=>'
=>
=>
=>

您的提示符將變為=>。要設定PS1的值以便顯示工作目錄,請發出以下命令:

=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

此命令的結果是提示符顯示使用者的使用者名稱、機器的名稱(主機名)和工作目錄。

有相當多的轉義序列可以用作 PS1 的值引數;嘗試將自己限制在最關鍵的那些,以便提示符不會用資訊淹沒您。

序號 轉義序列和描述
1

\t

當前時間,表示為 HH:MM:SS

2

\d

當前日期,表示為星期幾 月份 日期

3

\n

換行符

4

\s

當前 shell 環境

5

\W

工作目錄

6

\w

工作目錄的完整路徑

7

\u

當前使用者的使用者名稱

8

\h

當前機器的主機名

9

\#

當前命令的命令編號。輸入新命令時增加

10

\$

如果有效 UID 為 0(即,如果您以 root 身份登入),則以 # 字元結束提示符;否則,使用 $ 符號

您可以每次登入時自行進行更改,也可以透過將其新增到.profile檔案中使其自動在 PS1 中進行更改。

當您發出的命令不完整時,shell 將顯示一個輔助提示符並等待您完成命令並再次按Enter鍵。

預設的輔助提示符為>(大於號),但可以透過重新定義PS2 shell 變數來更改:

以下是使用預設輔助提示符的示例:

$ echo "this is a
> test"
this is a
test
$

以下示例使用自定義提示符重新定義了 PS2:

$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$

環境變數

以下是重要環境變數的部分列表。這些變數的設定和訪問方式如下:

序號 變數和描述
1

DISPLAY

包含X11程式預設應使用的顯示的識別符號。

2

HOME

指示當前使用者的 home 目錄:cd內建命令的預設引數。

3

IFS

指示擴充套件後由解析器用於單詞拆分的內部欄位分隔符

4

LANG

LANG 擴充套件到預設系統區域設定;LC_ALL 可用於覆蓋此設定。例如,如果其值為pt_BR,則語言設定為(巴西)葡萄牙語,區域設定為巴西。

5

LD_LIBRARY_PATH

具有動態連結器的 Unix 系統,包含一個冒號分隔的目錄列表,在 exec 後構建程序映像時,動態連結器應在其中搜索共享物件,然後在搜尋任何其他目錄之前。

6

PATH

指示命令的搜尋路徑。它是一個冒號分隔的目錄列表,shell 在其中查詢命令。

7

PWD

指示由 cd 命令設定的當前工作目錄。

8

RANDOM

每次引用時生成 0 到 32,767 之間的隨機整數。

9

SHLVL

每次啟動 bash 例項時遞增 1。此變數對於確定內建 exit 命令是否結束當前會話很有用。

10

TERM

指的是顯示型別。

11

TZ

指的是時區。它可以取 GMT、AST 等值。

12

UID

擴充套件到當前使用者的數字使用者 ID,在 shell 啟動時初始化。

以下是一個示例,顯示了一些環境變數:

$ echo $HOME
/root
]$ echo $DISPLAY

$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$
廣告