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
處理流程如下:
一旦這兩個文件讀取完成,shell 顯示一個等待輸入命令:
$
這是提示,在它后面你可以輸入命令來執(zhí)行。
注意:Shell 初始化的詳細過程通常利用的是 Bourne Shell,但是其他的一些文件處理是利用 bash 和 ksh shell 程序。
/etc/profile 文件是由 UNIX 的系統(tǒng)管理員維護的,并且該文件中包含了 Shell 初始化的信息,這個信息可以被任何系統(tǒng)中的任何用戶查看。
如果你有對 .profile 文件操作的權(quán)限,那么你就可以在這個文件中添加你想要的盡可能多的定制 Shell 信息。
你可以在你的根目錄下面查看 .profile 文件。利用 vi 編輯器打開它,查看其中設置的所有環(huán)境變量。
通常您所使用的終端的類型由 login 或 getty 程序自動配置。有時,自動配置過程會推測你的終端類型是不對的。
如果您的終端設置錯誤,命令的輸出可能看起來很奇怪,或者你可能無法與 Shell 正常交互。
確保這不是這種情況,大多數(shù)用戶的終端最少相同的特性如下:
$TERM=vt 100
$
當你在命令提示符下輸入任何命令,Shell 只有確定了命令所在的目錄才能執(zhí)行命令。
Shell 是在環(huán)境變量 PATH 中尋找命令所在的目錄。通常,它設置如下:
$PATH=/bin:/usr/bin
$
這里的每一個由冒號,:,分開的實體是目錄。如果你請求 Shell 執(zhí)行一個命令,但是它不能在 PATH 環(huán)境變量中找到任何命令所在的路徑,這時會出現(xiàn)一個類似如下的消息:
$hello
hello: not found
$
還有類似于 PS1 和 PS2 這樣的變量,將會在下一節(jié)說明。
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)境變量的列表。這些變量將按照上面提到的方式被設置和訪問:
變量 | 描述 |
---|---|
DISPLAY | 包含顯示設備的標識符,默認情況下它的值是 X11。 |
HOME | 表明當前用戶的根目錄,默認的參數(shù)中會內(nèi)置 cd 命令。 |
IFS | 表明系統(tǒng)內(nèi)部所使用字段分隔符,它通常用在解析器分割單詞中。 |
LANG | LANG 擴展系統(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
$
更多建議: