[精华] Unix的环境变量
来源:互联网 发布:安装好python怎么打开 编辑:程序博客网 时间:2024/05/16 07:55
一、SHELL的功能及分类
SHELL是UNIX作业系统中的'命令编译器'(CommandInter-
preter),它基本上是一个常驻的执行程式,它在使用者一签入
成功後就立即被载入(可在签入後以ps指令看到),主要功能则
在於接受使用者的指令、寻找命令(即档案)的所在并加以执行。
因此,SHELL的不同可能直接影响使用者输入指令的方式、档
案寻找的程序及速度等。
UNIX作业系统的SHELL大致可分为两大系统,一是1970年代
前期由美国贝尔实验室(BELLLAB)所发展的sh(Bourne Shell),
它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne
Shell)、bash(BourneAgain 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
不管你的loginshell是那一种shell,每一个shell都有它
自己的startfiles,我们设定理想环境时所需使用的指令与设
定的变数,都可以写在这些startfiles中,在login时先後加以
执行,这些startfiles的名称分别是:
SHELLSTART FILES
sh/etc/profile
$HOME/.profile
bash/etc/profile
$HOME/.profile(or$HOME/.bashrc)
cshNone
$HOME/.cshrc& $HOME/.login
tcshNone
$HOME/.cshrc(or$HOME/.tcshrc)
&$HOME/.login
如果这些档案都存在,那麽它们的执行顺序将是:
1.sh系列 /etc/profile -->; $HOME/.profile
2.csh系列 $HOME/.cshrc -->; $HOME/.login
在这些startfiles中,/etc下的profile是系统管理者为
大家设定的,一般使用者无法做任何更动,如果对系统管理者的
设定觉得不够或不符需要,则可在个人帐号下的.profile、
.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,
因为在/etc下并没有startfiles,所以也不会有系统管理者设定
好的环境可以使用,使用者就必须自行设定所需要的所有的变数
与指令,否则常会有寸步难行的感觉,最常见的如许多指令都
因找不到而不能用(因为没有设path)、键无法使用
(因键的作用没有定义)...等。
三、常见的需求与常用的指令
当我们在UNIX环境中工作,常会为了使自己使用时更方便而
产生某些需求,这些常见的需求及其设定方式如:
1.希望键能有作用
在$HOME/.profile或$HOME/.cshrc中加上
sttyerase "^H"
2.希望在UNIX环境中能使用中文
在$HOME/.profile(sh系列)中加上
stty-istrip cs8
LC_CTYPE=ISO_8859_1
exportLC_CTYPE
在$HOME/.cshrc(csh系列)中加上
stty-istrip cs8
setenvLC_CTYPE iso_8859_1
3.希望能有像DOS系统中DOSKEY的功能
只要是使用bash及tcsh即具备此项功能。
4.希望能使用工作站上的汉书编辑器(he)
在$HOME/.profile(sh系列)中加上
LANG=big5
exportLANG
在$HOME/.cshrc(csh系列)中加上
setenvLANG big5
5.希望提示符号能随着路径更动而改变
在sh及csh中并无法做到这个功能,而在bash及tcsh中
的设定则分别是:
bash:在$HOME/.profile中加上
PS1='`PWD`>;'
或PS1="w>; "
tcsh:在$HOME/.cshrc中加上
setprompt='%~>; '
除了上面所提到针对特殊需要所做的设定之外,在做环境设
定时常用到的指令还有:
1.stty
设定对输入(input)的定义与如何做输出,这个指令的
叁数极为众多,我们可用
stty-a
看到所有的叁数及其设定,在这些叁数中,常用的有:
istrip(-istrip)
将所有的输入截取成7bits的资料,然而中文的资
料都是8bits的,所以当需要使用中文时,请加上
'-istrip'这个叁数,以避免输入的资料被破坏。
cs7cs8
设定每一字元的资料都是7bits或8 bits的资料,
因此在需要使用中文时,通常会有如下的设定:
stty-istrip cs8
iuclc(-iuclc)
将标准输入的大写字母视为小写(或取消)。
olcuc(-olcuc)
将小写的字母以大写型态输出(或取消)。
echo(-echo)
将所有的输入由标准输出处输出(或取消输出,即
在萤幕上看不到自己的输入)。
stty除了这些叁数外,还可以用来定义某一个键的特定
功能,如:
sttyerase "^H"
sttykill "^U"
2.mesg y (mesg n)
若在工作时不希望被talk等讯息所打扰,可下'mesgn'
指令,以避免外来迅息中断正要进行的工作('mesgy'则是
恢复与外界的沟通)。
3.umask [nnn]
设定新增档案或目录的属性(mode),新档案或新目录的
mode为系统管理者以create所设定的属性减去nnn,如系统管
理者所设定的档案权利状态是777,而使用者又自行设定了
umask022
则这个使用者在他个人帐号下的每一个新产生的档案的权利
状态都将会是755(777-022)。
4.Function 与 Alias
对於一连串或某一指令,我们可以用function的方式
(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash
中),用一简短字串来代替这一个或一连串的指令,function
的用法如:
vi(){
mesgn
/usr/ucb/vi$*
mesgy
}
其中,'vi'是function的名称,{}之间是'vi'这个
function所包含的指令内容,而要注意的是:function的名
称不能与shell的内键指令(builtin)名称相同,否则这个
function即无法成立。
同样的功能,alias指令的用法如:
aliasvi 'mesg n; /usr/ucb/vi !*; mesg y'
其中vi即是''中所包含字串的别名,别名与各shell的builtin
名称可以一样(alias本身也是一个内键指令)。
若我们在某一shell中同时建立一名称相同的function
与alias(如在bash中),则alias的执行次序优先於function
的执行。
四、常用变数设定
在UNIX环境中的变数可分为两类,一是环境变数(Enviroment
Variable)、一是shell变数(ShellVariable),二者之间的不同
处在於:环境变数不会因为shell间的更替而失去这个变数的作
用,如PATH是一个环境变数,因此,即使您在设定好PATH之後再
执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),
PATH这个环境变数仍能继续作用,而shell变数(如csh的cwd)则是
只有在特定的shell下才有作用,一执行其他shell就失去作用。
在sh及csh二系列各有其不同的设定变数的方式,为:
1.Bourne Shell系列
[VAR]=[STRINGor NUMBER]
export[VAR]
SHELL是UNIX作业系统中的'命令编译器'(Command
preter),它基本上是一个常驻的执行程式,它在使用者一签入
成功後就立即被载入(可在签入後以ps指令看到),主要功能则
在於接受使用者的指令、寻找命令(即档案)的所在并加以执行。
因此,SHELL的不同可能直接影响使用者输入指令的方式、档
案寻找的程序及速度等。
UNIX作业系统的SHELL大致可分为两大系统,一是1970年代
前期由美国贝尔实验室(BELL
它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne
Shell)、bash(Bourne
统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C
Shell),和它属於同一系统的有tcsh等。
无论上述的那一种shell,它的基本功能与作用都是相同的,
它们之间的不同处可能在於对同一动作处理程序上的不同(会影响
命令处理的速度)、所提供内键命令及变数的或多或寡等,其中内
部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使
用时最容易直接感受到的。
在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、
csh或tcsh来代替原先使用的shell、改变正在使用的环境;也可
以用'chsh'指令、输入想使用的shell的路径及名称(如/bin/csh,
在Y11-Y14机器上还需输入个人使用者的密码),改变以後每次
login时所使用的shell、使自己所使用的环境能最满足自己使用
上的需要。
二、SHELL
不管你的login
自己的start
定的变数,都可以写在这些start
执行,这些start
SHELL
sh
$HOME/.profile
bash
$HOME/.profile(or
csh
$HOME/.cshrc
tcsh
$HOME/.cshrc(or
&
如果这些档案都存在,那麽它们的执行顺序将是:
1.
2.
在这些start
大家设定的,一般使用者无法做任何更动,如果对系统管理者的
设定觉得不够或不符需要,则可在个人帐号下的.profile、
.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,
因为在/etc下并没有start
好的环境可以使用,使用者就必须自行设定所需要的所有的变数
与指令,否则常会有寸步难行的感觉,最常见的如许多指令都
因找不到而不能用(因为没有设path)、键无法使用
(因键的作用没有定义)...等。
三、常见的需求与常用的指令
当我们在UNIX环境中工作,常会为了使自己使用时更方便而
产生某些需求,这些常见的需求及其设定方式如:
1.
在$HOME/.profile或$HOME/.cshrc中加上
stty
2.
在$HOME/.profile(sh系列)中加上
stty
LC_CTYPE=ISO_8859_1
export
在$HOME/.cshrc(csh系列)中加上
stty
setenv
3.
只要是使用bash及tcsh即具备此项功能。
4.
在$HOME/.profile(sh系列)中加上
LANG=big5
export
在$HOME/.cshrc(csh系列)中加上
setenv
5.
在sh及csh中并无法做到这个功能,而在bash及tcsh中
的设定则分别是:
bash:在$HOME/.profile中加上
PS1='`PWD`>;
或
tcsh:在$HOME/.cshrc中加上
set
除了上面所提到针对特殊需要所做的设定之外,在做环境设
定时常用到的指令还有:
1.
设定对输入(input)的定义与如何做输出,这个指令的
叁数极为众多,我们可用
stty
看到所有的叁数及其设定,在这些叁数中,常用的有:
istrip
将所有的输入截取成7
料都是8
'-istrip'这个叁数,以避免输入的资料被破坏。
cs7
设定每一字元的资料都是7
因此在需要使用中文时,通常会有如下的设定:
stty
iuclc
将标准输入的大写字母视为小写(或取消)。
olcuc
将小写的字母以大写型态输出(或取消)。
echo
将所有的输入由标准输出处输出(或取消输出,即
在萤幕上看不到自己的输入)。
stty除了这些叁数外,还可以用来定义某一个键的特定
功能,如:
stty
stty
2.
若在工作时不希望被talk等讯息所打扰,可下'mesg
指令,以避免外来迅息中断正要进行的工作('mesg
恢复与外界的沟通)。
3.
设定新增档案或目录的属性(mode),新档案或新目录的
mode为系统管理者以create所设定的属性减去nnn,如系统管
理者所设定的档案权利状态是777,而使用者又自行设定了
umask
则这个使用者在他个人帐号下的每一个新产生的档案的权利
状态都将会是755(777-022)。
4.
对於一连串或某一指令,我们可以用function的方式
(在sh、ksh、bash中)或alias指令(在csh、tcsh、ksh、bash
中),用一简短字串来代替这一个或一连串的指令,function
的用法如:
vi(){
mesg
/usr/ucb/vi
mesg
}
其中,'vi'是function的名称,{}之间是'vi'这个
function所包含的指令内容,而要注意的是:function的名
称不能与shell的内键指令(builtin)名称相同,否则这个
function即无法成立。
同样的功能,alias指令的用法如:
alias
其中vi即是''中所包含字串的别名,别名与各shell的builtin
名称可以一样(alias本身也是一个内键指令)。
若我们在某一shell中同时建立一名称相同的function
与alias(如在bash中),则alias的执行次序优先於function
的执行。
四、常用变数设定
在UNIX环境中的变数可分为两类,一是环境变数(Enviroment
Variable)、一是shell变数(Shell
处在於:环境变数不会因为shell间的更替而失去这个变数的作
用,如PATH是一个环境变数,因此,即使您在设定好PATH之後再
执行另一个shell(如原来是用sh、而後在sh环境中再执行csh),
PATH这个环境变数仍能继续作用,而shell变数(如csh的cwd)则是
只有在特定的shell下才有作用,一执行其他shell就失去作用。
在sh及csh二系列各有其不同的设定变数的方式,为:
1.
[VAR]=[STRING
export