Unix的環境變數 (轉)
Unix的環境變數 (轉)[@more@]一、的功能及分類
SHELL是作業中的'命令'(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 -istrcs8
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中)
[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的結束而使檔案中指令的效果消失。
SHELL是作業中的'命令'(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 -istrcs8
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中)
[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的結束而使檔案中指令的效果消失。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990831/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Unix的環境變數(轉)變數
- unix下環境變數 .變數
- UNIX再學習 -- 環境變數變數
- GBASEDBTSERVER 環境變數7GBASEDBTSHMBASE 環境變數 (UNIX™)Server變數
- 設定環境變數(轉)變數
- 環境變數的設定方法(轉)~變數
- 環境變數{Linux環境(也稱為Shell環境)}(轉)變數Linux
- awk中使用shell的環境變數(轉)變數
- 環境變數變數
- UNIX下的PHP環境配置,+apache (轉)PHPApache
- Linux 新增環境變數和刪除環境變數Linux變數
- 簡述SHELL全域性環境變數與局變環境變數變數
- Java 環境變數Java變數
- jdk環境變數JDK變數
- DOS環境變數變數
- env 環境變數變數
- 環境變數path變數
- Java環境變數Java變數
- ORACLE 環境變數Oracle變數
- postman環境變數Postman變數
- 配置環境變數變數
- Unix環境中配置JSP的方法(轉)JS
- java 環境變數的配置Java變數
- jdk環境變數的配置JDK變數
- Bash 中的環境變數變數
- Unix環境和Windows環境下Oracle引數檔案位置:WindowsOracle
- java設定-JDK環境變數的設定(轉)JavaJDK變數
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- HP-UNIX下RAC環境變數設定錯誤修正一則變數
- ubuntu JDK 環境變數UbuntuJDK變數
- 配置JDK環境變數JDK變數
- 環境變數詳解變數
- Flume 配置環境變數變數
- Shell配置環境變數變數
- Java環境變數新增Java變數
- 【Linux】環境變數!!!Linux變數
- Kaldi配置環境變數變數
- MySQL 環境變數配置MySql變數