UNIX 環境


Unix的一個重要概念是環境,被定義的環境變數。有些系統通過環境變數,還有一些由shell,或任何程式載入另一個程式。

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

例如,首先我們設定一個變數測試,然後我們使用echo命令來存取它的值:

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

需要注意的是環境變數設定,而無需使用$符號,但存取它們時,我們使用$符號作為字首。這些變數保持它們的值,直到我們設計出來shell。

當你登入到系統中,shell經過一個階段稱為初始化設定各種環境。這通常是一個兩步的過程,涉及的的shell閱讀下列檔案:

  • /etc/profile

  • profile

過程如下:

  1. shell進行檢查,看是否存在檔案 /etc/profile檔案。

  2. 如果它存在,當shell讀取。否則,此檔案將被跳過。不顯示錯誤訊息。

  3. shell檢查,看看是否該檔案。組態檔案存在於你的home目錄。主目錄是開始在登入後的目錄

  4. 如果它存在,當shell讀取它,否則shell跳過。不顯示錯誤訊息。

只要這兩個檔案被讀取,shell將顯示一個提示:

$

這是提示這裡你可以輸入命令,以讓他們執行。

註 - 這裡詳述shell初始化過程適用於所有的Bourne型shell,但所使用的是bash和ksh一些額外的檔案。

.profile 檔案:

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

該檔案 .profile是在你的控制之下。您可以新增盡可能多的 shell客製化資訊,只要想這個檔案。最小資訊集,需要組態包括:

  • 使用的終端的型別

  • 在其中定位命令的目錄的列表

  • 列表變數,影響終端的外觀和風格。

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

設定終端型別:

通常情況下,使用的終端自動組態通過登入或getty程式。有時,自動組態過程中猜測終端不正確。

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

為了確保,這是沒有的情況下,大多數使用者他們的終端設定到最低共同如下:

$TERM=vt100
$

設定路徑:

當輸入任何命令在命令提示字元下,shell也有定位才可以執行的命令。

PATH變數中指定位置的的shell看起來應該命令。一般它被設定如下:

$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/yiibai/unix]$
[root@ip-72-167-112-17 /var/www/yiibai/unix]$

此命令的結果是,提示顯示使用者的使用者名,機器名(hostname),工作目錄。

有相當多的PS1的值引數可以用來作為跳脫序列,試圖限制了,提示沒有太多的資訊。

Escape Sequence 描述
Current time, expressed as HH:MM:SS.
d Current date, expressed as Weekday Month Date
Newline.
s Current shell environment.
W Working directory.
w Full path of the working directory.
u Current user.s username.
h Hostname of the current machine.
# Command number of the current command. Increases with each new command entered.
$ If the effective UID is 0 (that is, if you are logged in as root), end the prompt with the # character; otherwise, use the $.

可以使自己的變化,每次登入時,或者可以將它新增到您的組態檔案中所做的更改會自動在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
$

環境變數:

以下是部分重要的環境變數列表。如上所述,這些變數將被設定和存取:

變數 描述
DISPLAY Contains the identifier for the display that X11 programs should use by default.
HOME Indicates the home directory of the current user: the default argument for the cd built-in command.
IFS Indicates the Internal Field Separator that is used by the parser for word splitting after expansion.
LANG LANG expands to the default system locale; LC_ALL can be used to override this. For example, if its value is pt_BR, then the language is set to (Brazilian) Portuguese and the locale to Brazil.
LD_LIBRARY_PATH On many Unix systems with a dynamic linker, contains a colon-separated list of directories that the dynamic linker should search for shared objects when building a process image after exec, before searching in any other directories.
PATH Indicates search path for commands. It is a colon-separated list of directories in which the shell looks for commands.
PWD Indicates the current working directory as set by the cd command.
RANDOM Generates a random integer between 0 and 32,767 each time it is referenced.
SHLVL Increments by one each time an instance of bash is started. This variable is useful for determining whether the built-in exit command ends the current session.
TERM Refers to the display type
TZ Refers to Time zone. It can take values like GMT, AST, etc.
UID Expands to the numeric user ID of the current user, initialized at shell startup.

以下是幾個環境變數的樣本範例:

$ echo $HOME
/root
]$ echo $DISPLAY

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