UNIX 環(huán)境

2018-11-26 17:04 更新

UNIX 環(huán)境

UNIX 中一個重要的概念是環(huán)境,它是由環(huán)境變量所定義。一些環(huán)境變量是由系統(tǒng)設置,有一些是由用戶設置的,還有一些是被 Shell,或任何會加載另一個程序的程序所設置。

一個變量是由一個字符組成的串,并且我們會給它賦值。給變量賦的值可以是一個數(shù)字,文本,文件名,設備或任何其他類型的數(shù)據(jù)。

例如,首先,我們設置一個名稱為 TEST 的變量,然后我們使用 echo 命令查看它的值:

$TEST="Unix Programming"
$echo $TEST
Unix Programming

注意,設置環(huán)境變量不使用 $ 符號,但在訪問他們的時候,我們使用 $ 符號作為前綴。這些變量保存它們的值,直到我們退出 shell。

當你登錄到系統(tǒng),shell 經(jīng)過初始化階段,在該階段會設置各種環(huán)境變量。這通常會涉及到兩步的處理過程,shell 會讀取以下文件:

  • /etc/profile
  • profile

處理流程如下:

  1. shell 程序檢查 /etc/profile 文件是否存在。
  2. 如果該文件存在,shell 程序會讀取該文件。否則,就會跳過該文件。同時也不會顯示任何錯誤信息。
  3. shell 程序檢查 .profile 文件是否在你的根目錄下面存在。您的根目錄就是你在登錄之后進入的目錄。
  4. 如果該文件存在,shell 程序就會讀取它。否則,shell 程序跳過它,不會顯示任何錯誤信息。

一旦這兩個文件讀取完成,shell 顯示一個等待輸入命令:

    $

這是提示,在它后面你可以輸入命令來執(zhí)行。

注意:Shell 初始化的詳細過程通常利用的是 Bourne Shell,但是其他的一些文件處理是利用 bashksh shell 程序。

.profile 文件

/etc/profile 文件是由 UNIX 的系統(tǒng)管理員維護的,并且該文件中包含了 Shell 初始化的信息,這個信息可以被任何系統(tǒng)中的任何用戶查看。

如果你有對 .profile 文件操作的權(quán)限,那么你就可以在這個文件中添加你想要的盡可能多的定制 Shell 信息。

  • 你使用的終止符的類型
  • 命令存在的一系列文件的列表
  • 一些列的變量設置你的終端顯示的效果

你可以在你的根目錄下面查看 .profile 文件。利用 vi 編輯器打開它,查看其中設置的所有環(huán)境變量。

設置終結(jié)符的類型

通常您所使用的終端的類型由 logingetty 程序自動配置。有時,自動配置過程會推測你的終端類型是不對的。

如果您的終端設置錯誤,命令的輸出可能看起來很奇怪,或者你可能無法與 Shell 正常交互。

確保這不是這種情況,大多數(shù)用戶的終端最少相同的特性如下:

$TERM=vt 100
$

設置 PATH 變量

當你在命令提示符下輸入任何命令,Shell 只有確定了命令所在的目錄才能執(zhí)行命令。

Shell 是在環(huán)境變量 PATH 中尋找命令所在的目錄。通常,它設置如下:

$PATH=/bin:/usr/bin
$

這里的每一個由冒號,:,分開的實體是目錄。如果你請求 Shell 執(zhí)行一個命令,但是它不能在 PATH 環(huán)境變量中找到任何命令所在的路徑,這時會出現(xiàn)一個類似如下的消息:

$hello
hello: not found
$

還有類似于 PS1 和 PS2 這樣的變量,將會在下一節(jié)說明。

PS1 和 PS2 變量

shell 顯示給你的命令提示符存儲在變量 PS1 中。你可以改變這個變量成任何你想要的字符。只要你改變它,它就會從你改變后開始起作用。

例如,如果你輸入如下的命令:

$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]$

該命令的結(jié)果是,顯示用戶的用戶名、機器名稱(主機名),和工作目錄。

有相當多的轉(zhuǎn)義序列,可以用作 PS1 的參數(shù),盡量讓自己只關(guān)注最關(guān)鍵的部分,不要讓下面的信息對你造成過多的壓力。

轉(zhuǎn)義序列描述
\t將當前的時間表示成 HH:MM:SS 的形式
\d將當前的日期表示成 周 月 日
\n新的一行。
\s當前的環(huán)境變量。
\W工作目錄。
\w工作目錄的完整路徑。
\u當前用戶的用戶名。
\h當前機器的主機名稱。
\#當前命令的編號。每輸入一條命令編號加 1。
\$如果有效的 UID 是 0(也就是說,如果你以 root 用戶進行登錄),命令提示符會變成 #,否則,提示符是 $。

你可以通過修改 .profile 文件,在每次登錄的時候進行上面的那些轉(zhuǎn)換。這樣每次登錄就會自動的改變 PS1 的值。

當你輸入一個不完整的命令是,shell 將再次顯示一個命令輸入符,等待你再次完成命令并回車。

默認二級提示 >(大于號),但可以改變通過設置 PS2 變量進行修改:

下面的示例使用默認的二級提示:

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

下面是一個通過重新定義 PS2 變量自定義輸入符的示例:

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

環(huán)境變量

以下是部分重要的環(huán)境變量的列表。這些變量將按照上面提到的方式被設置和訪問:

變量描述
DISPLAY 包含顯示設備的標識符,默認情況下它的值是 X11。
HOME表明當前用戶的根目錄,默認的參數(shù)中會內(nèi)置 cd 命令。
IFS表明系統(tǒng)內(nèi)部所使用字段分隔符,它通常用在解析器分割單詞中。
LANGLANG 擴展系統(tǒng)默認的語言:LC_ALL 可以用來覆蓋這個變量。例如,如果它的值是 pt_BR,那么系統(tǒng)的語言就被設置成(Brazillian)Portuguese 和地區(qū)被設置成 Brazil。
LD_LIBRARY_PATH許多 UNIX 系統(tǒng)動態(tài)鏈接器,包含以冒號分隔的目錄列表,在執(zhí)行后,動態(tài)連接器構(gòu)建過程圖像過程中,在搜索其他目錄之前,先搜索共享對象。
PATH命令的搜索路徑。它是由冒號分隔開一系列目錄,也就是 shell 尋找命令所在的目錄。
PWD當前的工作目錄,由 cd 命令設置的。
RANDOM每次被引用的時候就會生成一個 0 到 32,767 范圍內(nèi)的一個隨機整數(shù)。
SHLVL每次一個 bash 實例被啟動這個值就會加 1。這個變量對于決定內(nèi)置的退出命令是否終止當前會話是很有用的。
TERM 顯示類型。
TZ 時間區(qū)域。它能被賦值為 GMT,AST 等。
UID數(shù)值類型標識當前用戶,它在 shell 啟動的時候被初始化。

如下是幾個簡單的例子顯示幾個環(huán)境變量:

$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號