| 導購 | 订阅 | 在线投稿
分享
 
 
 

Unix的環境變量

來源:互聯網網民  2006-12-17 09:48:45  評論

Unix的環境變量

Unix的環境變量

SHELL是UNIX作業系統中的'命令編譯器'(Command Inter-

preter),它基本上是一個常駐的執行程式,它在使用者一簽入

成功後就立即被載入(可在簽入後以ps指令看到),主要功能則

在於接受使用者的指令、尋找命令(即檔案)的所在並加以執行。

因此,SHELL的不同可能直接影響使用者輸入指令的方式、檔

案尋找的程序及速度等。

UNIX作業系統的SHELL大致可分爲兩大系統,一是1970年代

前期由美國貝爾實驗室(BELL LAB)所發展的sh(Bourne Shell),

它是UNIX系統中的標准SHELL,此一系統後來又發展出ksh(Korne

Shell)、bash(Bourne Again Shell)等功能更多的介面;另一系

統是美國柏克來大學(Berkekey)在1970年代後期所發展的csh(C

Shell),和它屬於同一系統的有tcsh等。

無論上述的那一種shell,它的基本功能與作用都是相同的,

它們之間的不同處可能在於對同一動作處理程序上的不同(會影響

命令處理的速度)、所提供內鍵命令及變數的或多或寡等,其中內

部命令與變數的多寡直接影響到shell功能的多寡,是使用者在使

用時最容易直接感受到的。

在UNIX系統中,使用者可視自己的需要執行sh、ksh、bash、

csh或tcsh來代替原先使用的shell、改變正在使用的環境;也可

以用'chsh'指令、輸入想使用的shell的路徑及名稱(如/bin/csh,

在Y11-Y14機器上還需輸入個人使用者的密碼),改變以後每次

login時所使用的shell、使自己所使用的環境能最滿足自己使用

上的需要。

二、SHELL 的START FILES

不管你的login shell是那一種shell,每一個shell都有它

自己的start files,我們設定理想環境時所需使用的指令與設

定的變數,都可以寫在這些start files中,在login時先後加以

執行,這些start files的名稱分別是:

SHELL START FILES

sh /etc/profile

$HOME/.profile

bash /etc/profile

$HOME/.profile(or $HOME/.bashrc)

csh None

$HOME/.cshrc & $HOME/.login

tcsh None

$HOME/.cshrc(or $HOME/.tcshrc)

& $HOME/.login

如果這些檔案都存在,那麽它們的執行順序將是:

1. sh系列 /etc/profile --> $HOME/.profile

2. csh系列 $HOME/.cshrc --> $HOME/.login

在這些start files中,/etc下的profile是系統管理者爲

大家設定的,一般使用者無法做任何更動,如果對系統管理者的

設定覺得不夠或不符需要,則可在個人帳號下的.profile、

.cshrc、.login增加或修正,尤其是對csh及tcsh的使用者而言,

因爲在/etc下並沒有start files,所以也不會有系統管理者設定

好的環境可以使用,使用者就必須自行設定所需要的所有的變數

與指令,否則常會有寸步難行的感覺,最常見的如許多指令都

因找不到而不能用(因爲沒有設path)、鍵無法使用

(因鍵的作用沒有定義)...等。

三、常見的需求與常用的指令

當我們在UNIX環境中工作,常會爲了使自己使用時更方便而

産生某些需求,這些常見的需求及其設定方式如:

1. 希望鍵能有作用

在$HOME/.profile或$HOME/.cshrc中加上

stty erase "^H"

2. 希望在UNIX環境中能使用中文

在$HOME/.profile(sh系列)中加上

stty -istrip cs8

LC_CTYPE=ISO_8859_1

export LC_CTYPE

在$HOME/.cshrc(csh系列)中加上

stty -istrip cs8

setenv LC_CTYPE iso_8859_1

3. 希望能有像DOS系統中DOSKEY的功能

只要是使用bash及tcsh即具備此項功能。

4. 希望能使用工作站上的漢書編輯器(he)

在$HOME/.profile(sh系列)中加上

LANG=big5

export LANG

在$HOME/.cshrc(csh系列)中加上

setenv LANG big5

5. 希望提示符號能隨著路徑更動而改變

在sh及csh中並無法做到這個功能,而在bash及tcsh中

的設定則分別是:

bash:在$HOME/.profile中加上

PS1='`PWD`> '

或 PS1="\w> "

tcsh:在$HOME/.cshrc中加上

set prompt='%~> '

除了上面所提到針對特殊需要所做的設定之外,在做環境設

定時常用到的指令還有:

1. stty

設定對輸入(input)的定義與如何做輸出,這個指令的

叁數極爲衆多,我們可用

stty -a

看到所有的叁數及其設定,在這些叁數中,常用的有:

istrip (-istrip)

將所有的輸入截取成7 bits的資料,然而中文的資

料都是8 bits的,所以當需要使用中文時,請加上

'-istrip'這個叁數,以避免輸入的資料被破壞。

cs7 cs8

設定每一字元的資料都是7 bits或8 bits的資料,

因此在需要使用中文時,通常會有如下的設定:

stty -istrip cs8

iuclc (-iuclc)

將標准輸入的大寫字母視爲小寫(或取消)。

olcuc (-olcuc)

將小寫的字母以大寫型態輸出(或取消)。

echo (-echo)

將所有的輸入由標准輸出處輸出(或取消輸出,即

在螢幕上看不到自己的輸入)。

stty除了這些叁數外,還可以用來定義某一個鍵的特定

功能,如:

stty erase "^H"

stty kill "^U"

2. mesg y (mesg n)

若在工作時不希望被talk等訊息所打擾,可下'mesg n'

指令,以避免外來迅息中斷正要進行的工作('mesg y'則是

恢複與外界的溝通)。

3. umask [nnn]

設定新增檔案或目錄的屬性(mode),新檔案或新目錄的

mode爲系統管理者以create所設定的屬性減去nnn,如系統管

理者所設定的檔案權利狀態是777,而使用者又自行設定了

umask 022

則這個使用者在他個人帳號下的每一個新産生的檔案的權利

狀態都將會是755(777-022)。

4. Function 與 Alias

對於一連串或某一指令,我們可以用function的方式

(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash

中),用一簡短字串來代替這一個或一連串的指令,function

的用法如:

vi(){

mesg n

/usr/ucb/vi $*

mesg y

}

其中,'vi'是function的名稱,{}之間是'vi'這個

function所包含的指令內容,而要注意的是:function的名

稱不能與shell的內鍵指令(builtin)名稱相同,否則這個

function即無法成立。

同樣的功能,alias指令的用法如:

alias vi 'mesg n; /usr/ucb/vi \!*; mesg y'

其中vi即是''中所包含字串的別名,別名與各shell的builtin

名稱可以一樣(alias本身也是一個內鍵指令)。

若我們在某一shell中同時建立一名稱相同的function

與alias(如在bash中),則alias的執行次序優先於function

的執行。

四、常用變數設定

在UNIX環境中的變數可分爲兩類,一是環境變數(Enviroment

Variable)、一是shell變數(Shell Variable),二者之間的不同

處在於:環境變數不會因爲shell間的更替而失去這個變數的作

用,如PATH是一個環境變數,因此,即使您在設定好PATH之後再

執行另一個shell(如原來是用sh、而後在sh環境中再執行csh),

PATH這個環境變數仍能繼續作用,而shell變數(如csh的cwd)則是

只有在特定的shell下才有作用,一執行其他shell就失去作用。

在sh及csh二系列各有其不同的設定變數的方式,爲:

1. Bourne Shell系列

[VAR]=[STRING or NUMBER]

export [VAR]

如果當我們離開shell、進入另一個程式(如tin)之後,

仍需要使用這個變數,則除了設定這個變數的值外,還需要

以'export'指令加以宣告,如設定螢幕型態的變數TERM就需

以'export'來宣告。

2. C Shell系列

set [var] = [STRING or NUMBER]

setenv [var] [STRING or NUMBER]

其中'set'是單純設定變數值,'setenv'則除了設定變

數值外,還包含了類似sh中'export'的功能。

而無論是Bourne Shell或C Shell,它們都有一些基本的、

共同的常用變數,如:

1. PATH

設定執行檔的尋找路徑,若現行目錄也要包含在尋找的

路徑中,則需在設定路徑時給予一'.',表示現行目錄亦包含

在尋找的路徑中,如:

PATH=.:/bin:/usr/local/bin:/usr/ucb

set path=(. /bin /usr/local/bin /usr/ucb)

2. EDITOR

設定想要使用的編輯器,如

EDITOR=/usr/ucb/vi

setenv EDITOR /usr/ucb/vi

3. HOME

設定個人帳號home directory的所在位置,通常在login

時即叁考/etc/passwd而給予一設定值,因此除非使用者有某

些特殊需求,通常不會重新設定。

4. SHELL

同樣是在login時即會叁考/etc/passwd的內容而自動設

定,使用者即使重新設定這個變數的內容,對帳號的使用也

不會有任何影響。

5. 提示符號的設定

在sh 中: PS1="[STRING]"

PS2="[STRING]"

在csh中: set prompt="[STRING]"

當然以上所列的只是使用得較爲廣泛的變數,若您覺得這些

不夠用,可用man sh、man csh、man tcsh、man bash指令查閱各

shell的說明,在其中您將可看到各個shell所包含的變數及各變數

的用法。

若不清楚某一變數的設定內容,可用'echo $[VAR]'來觀察

變數的內容,如:

echo $PATH

五、SHELL 環境的異動

前面所提到start files中的設定將在使用者login時執行,

但當我們要在線上直接改變所使用的shell(如直接執行'csh'或

'exec csh',此時不會執行start files)或是要改變設定的內容,

在編修了start files或script files之後,可利用下列指令將

環境更新,而不必重新login:

. [script file] (在sh 系列的shell中)

source [script files] (在csh系列的shell中)

直接執行一個script file與用'.'、'source'指令執行各有

其不同的效果,我們可建立一內容爲

cd / (或cd [DIR])

的script file來觀察它們之間的差異:

因script file的執行環境是一內定或自定的subshell(可在

script file的第一行用類似'#!/bin/csh'指令加以設定),

所以它的直接執行並無法真正將shell環境的工作目錄切換到

/,而script file一結束,subshell即不存在、'cd /'指

令的效果也告消失;而用'.'或'source'執行則是真正將

shell的工作環境下的工作目錄更換到/,不會因爲script

file的結束而使檔案中指令的效果消失。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
Unix的環境變量 Unix的環境變量 SHELL是UNIX作業系統中的'命令編譯器'(Command Inter- preter),它基本上是一個常駐的執行程式,它在使用者一簽入 成功後就立即被載入(可在簽入後以ps指令看到),主要功能則 在於接受使用者的指令、尋找命令(即檔案)的所在並加以執行。 因此,SHELL的不同可能直接影響使用者輸入指令的方式、檔 案尋找的程序及速度等。 UNIX作業系統的SHELL大致可分爲兩大系統,一是1970年代 前期由美國貝爾實驗室(BELL LAB)所發展的sh(Bourne Shell), 它是UNIX系統中的標准SHELL,此一系統後來又發展出ksh(Korne Shell)、bash(Bourne Again Shell)等功能更多的介面;另一系 統是美國柏克來大學(Berkekey)在1970年代後期所發展的csh(C Shell),和它屬於同一系統的有tcsh等。 無論上述的那一種shell,它的基本功能與作用都是相同的, 它們之間的不同處可能在於對同一動作處理程序上的不同(會影響 命令處理的速度)、所提供內鍵命令及變數的或多或寡等,其中內 部命令與變數的多寡直接影響到shell功能的多寡,是使用者在使 用時最容易直接感受到的。 在UNIX系統中,使用者可視自己的需要執行sh、ksh、bash、 csh或tcsh來代替原先使用的shell、改變正在使用的環境;也可 以用'chsh'指令、輸入想使用的shell的路徑及名稱(如/bin/csh, 在Y11-Y14機器上還需輸入個人使用者的密碼),改變以後每次 login時所使用的shell、使自己所使用的環境能最滿足自己使用 上的需要。 二、SHELL 的START FILES 不管你的login shell是那一種shell,每一個shell都有它 自己的start files,我們設定理想環境時所需使用的指令與設 定的變數,都可以寫在這些start files中,在login時先後加以 執行,這些start files的名稱分別是: SHELL START FILES sh /etc/profile $HOME/.profile bash /etc/profile $HOME/.profile(or $HOME/.bashrc) csh None $HOME/.cshrc & $HOME/.login tcsh None $HOME/.cshrc(or $HOME/.tcshrc) & $HOME/.login 如果這些檔案都存在,那麽它們的執行順序將是: 1. sh系列 /etc/profile --> $HOME/.profile 2. csh系列 $HOME/.cshrc --> $HOME/.login 在這些start files中,/etc下的profile是系統管理者爲 大家設定的,一般使用者無法做任何更動,如果對系統管理者的 設定覺得不夠或不符需要,則可在個人帳號下的.profile、 .cshrc、.login增加或修正,尤其是對csh及tcsh的使用者而言, 因爲在/etc下並沒有start files,所以也不會有系統管理者設定 好的環境可以使用,使用者就必須自行設定所需要的所有的變數 與指令,否則常會有寸步難行的感覺,最常見的如許多指令都 因找不到而不能用(因爲沒有設path)、鍵無法使用 (因鍵的作用沒有定義)...等。 三、常見的需求與常用的指令 當我們在UNIX環境中工作,常會爲了使自己使用時更方便而 産生某些需求,這些常見的需求及其設定方式如: 1. 希望鍵能有作用 在$HOME/.profile或$HOME/.cshrc中加上 stty erase "^H" 2. 希望在UNIX環境中能使用中文 在$HOME/.profile(sh系列)中加上 stty -istrip cs8 LC_CTYPE=ISO_8859_1 export LC_CTYPE 在$HOME/.cshrc(csh系列)中加上 stty -istrip cs8 setenv LC_CTYPE iso_8859_1 3. 希望能有像DOS系統中DOSKEY的功能 只要是使用bash及tcsh即具備此項功能。 4. 希望能使用工作站上的漢書編輯器(he) 在$HOME/.profile(sh系列)中加上 LANG=big5 export LANG 在$HOME/.cshrc(csh系列)中加上 setenv LANG big5 5. 希望提示符號能隨著路徑更動而改變 在sh及csh中並無法做到這個功能,而在bash及tcsh中 的設定則分別是: bash:在$HOME/.profile中加上 PS1='`PWD`> ' 或 PS1="\w> " tcsh:在$HOME/.cshrc中加上 set prompt='%~> ' 除了上面所提到針對特殊需要所做的設定之外,在做環境設 定時常用到的指令還有: 1. stty 設定對輸入(input)的定義與如何做輸出,這個指令的 叁數極爲衆多,我們可用 stty -a 看到所有的叁數及其設定,在這些叁數中,常用的有: istrip (-istrip) 將所有的輸入截取成7 bits的資料,然而中文的資 料都是8 bits的,所以當需要使用中文時,請加上 '-istrip'這個叁數,以避免輸入的資料被破壞。 cs7 cs8 設定每一字元的資料都是7 bits或8 bits的資料, 因此在需要使用中文時,通常會有如下的設定: stty -istrip cs8 iuclc (-iuclc) 將標准輸入的大寫字母視爲小寫(或取消)。 olcuc (-olcuc) 將小寫的字母以大寫型態輸出(或取消)。 echo (-echo) 將所有的輸入由標准輸出處輸出(或取消輸出,即 在螢幕上看不到自己的輸入)。 stty除了這些叁數外,還可以用來定義某一個鍵的特定 功能,如: stty erase "^H" stty kill "^U" 2. mesg y (mesg n) 若在工作時不希望被talk等訊息所打擾,可下'mesg n' 指令,以避免外來迅息中斷正要進行的工作('mesg y'則是 恢複與外界的溝通)。 3. umask [nnn] 設定新增檔案或目錄的屬性(mode),新檔案或新目錄的 mode爲系統管理者以create所設定的屬性減去nnn,如系統管 理者所設定的檔案權利狀態是777,而使用者又自行設定了 umask 022 則這個使用者在他個人帳號下的每一個新産生的檔案的權利 狀態都將會是755(777-022)。 4. Function 與 Alias 對於一連串或某一指令,我們可以用function的方式 (在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash 中),用一簡短字串來代替這一個或一連串的指令,function 的用法如: vi(){ mesg n /usr/ucb/vi $* mesg y } 其中,'vi'是function的名稱,{}之間是'vi'這個 function所包含的指令內容,而要注意的是:function的名 稱不能與shell的內鍵指令(builtin)名稱相同,否則這個 function即無法成立。 同樣的功能,alias指令的用法如: alias vi 'mesg n; /usr/ucb/vi \!*; mesg y' 其中vi即是''中所包含字串的別名,別名與各shell的builtin 名稱可以一樣(alias本身也是一個內鍵指令)。 若我們在某一shell中同時建立一名稱相同的function 與alias(如在bash中),則alias的執行次序優先於function 的執行。 四、常用變數設定 在UNIX環境中的變數可分爲兩類,一是環境變數(Enviroment Variable)、一是shell變數(Shell Variable),二者之間的不同 處在於:環境變數不會因爲shell間的更替而失去這個變數的作 用,如PATH是一個環境變數,因此,即使您在設定好PATH之後再 執行另一個shell(如原來是用sh、而後在sh環境中再執行csh), PATH這個環境變數仍能繼續作用,而shell變數(如csh的cwd)則是 只有在特定的shell下才有作用,一執行其他shell就失去作用。 在sh及csh二系列各有其不同的設定變數的方式,爲: 1. Bourne Shell系列 [VAR]=[STRING or NUMBER] export [VAR] 如果當我們離開shell、進入另一個程式(如tin)之後, 仍需要使用這個變數,則除了設定這個變數的值外,還需要 以'export'指令加以宣告,如設定螢幕型態的變數TERM就需 以'export'來宣告。 2. C Shell系列 set [var] = [STRING or NUMBER] setenv [var] [STRING or NUMBER] 其中'set'是單純設定變數值,'setenv'則除了設定變 數值外,還包含了類似sh中'export'的功能。 而無論是Bourne Shell或C Shell,它們都有一些基本的、 共同的常用變數,如: 1. PATH 設定執行檔的尋找路徑,若現行目錄也要包含在尋找的 路徑中,則需在設定路徑時給予一'.',表示現行目錄亦包含 在尋找的路徑中,如: PATH=.:/bin:/usr/local/bin:/usr/ucb 或 set path=(. /bin /usr/local/bin /usr/ucb) 2. EDITOR 設定想要使用的編輯器,如 EDITOR=/usr/ucb/vi 或 setenv EDITOR /usr/ucb/vi 3. HOME 設定個人帳號home directory的所在位置,通常在login 時即叁考/etc/passwd而給予一設定值,因此除非使用者有某 些特殊需求,通常不會重新設定。 4. SHELL 同樣是在login時即會叁考/etc/passwd的內容而自動設 定,使用者即使重新設定這個變數的內容,對帳號的使用也 不會有任何影響。 5. 提示符號的設定 在sh 中: PS1="[STRING]" PS2="[STRING]" 在csh中: set prompt="[STRING]" 當然以上所列的只是使用得較爲廣泛的變數,若您覺得這些 不夠用,可用man sh、man csh、man tcsh、man bash指令查閱各 shell的說明,在其中您將可看到各個shell所包含的變數及各變數 的用法。 若不清楚某一變數的設定內容,可用'echo $[VAR]'來觀察 變數的內容,如: echo $PATH 五、SHELL 環境的異動 前面所提到start files中的設定將在使用者login時執行, 但當我們要在線上直接改變所使用的shell(如直接執行'csh'或 'exec csh',此時不會執行start files)或是要改變設定的內容, 在編修了start files或script files之後,可利用下列指令將 環境更新,而不必重新login: . [script file] (在sh 系列的shell中) source [script files] (在csh系列的shell中) 直接執行一個script file與用'.'、'source'指令執行各有 其不同的效果,我們可建立一內容爲 cd / (或cd [DIR]) 的script file來觀察它們之間的差異: 因script file的執行環境是一內定或自定的subshell(可在 script file的第一行用類似'#!/bin/csh'指令加以設定), 所以它的直接執行並無法真正將shell環境的工作目錄切換到 /,而script file一結束,subshell即不存在、'cd /'指 令的效果也告消失;而用'.'或'source'執行則是真正將 shell的工作環境下的工作目錄更換到/,不會因爲script file的結束而使檔案中指令的效果消失。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有