Unix的环境变量

Unix的环境变量

一、SHELL的功能及分类

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

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=

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

stty kill

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=

PS2=

在csh中: set prompt=

当然以上所列的只是使用得较为广泛的变数,若您觉得这些

不够用,可用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的环境变量

一、SHELL的功能及分类

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

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=

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

stty kill

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=

PS2=

在csh中: set prompt=

当然以上所列的只是使用得较为广泛的变数,若您觉得这些

不够用,可用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的结束而使档案中指令的效果消失。


相关内容

  • 大唐移动笔试题汇总
  • 第一部分:选择题 1.相同码元速率下,那种传输方式信息传输速率最高 qpsk 16qam bpsk gmsk 2.下面哪些属于差错控制编码 3.自由空间传播环境下信号衰减与距离( )次方成比例 4.下列哪些功能属于网络管理的功能域 故障管理 配置管理 计费管理 性能管理 安全管理 传输管理 路由管理 ...

  • 第三单元课文译文 计算机英语 吕云翔
  • 第三单元 项目计划 第一部分 听说 A. 对话:软件项目计划 Jason :这么多工作要做啊! Kevin :我认为我们需要一个正式的项目计划作为指导. Sharon :是的,首先是时间,这也是影响我们项目的最重要的因素之一,我们需要一个进度表,尤其是项目的最终期限. Kevin :我们总共有40天 ...

  • 关于JAVA的可移植性
  • 关于JAVA 的可移植性 阅读次数: 17次 发布时间: 2011-01-07 09:53:10发布人: 香芹 来源: 网络转载 1.JAVA 作为一种编程语言:源代码可移植性 作为一种编程语言,JAVA 提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植.这意味着任意一个JAVA 程序,不论 ...

  • AT&T汇编语言
  • AT&T ASM 1 AT&T ASM 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的尺寸.另外,对于某些需要被经常调用的代码,使用汇编可以提高性能. ...

  • 多线程与多进程的区别
  • 进程: 子进程是父进程的复制品.子进程获得父进程数据空间.堆和栈的复制品. 线程:相对与进程而言,线程是一个更接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列. 根本区别:用多进程每个进程有自己的地址空间,线程则共享地址空间.所以其他区别都是由此而来的: ...

  • 事业单位考试计算机专业试题
  • 事业单位招考计算机专业考试试卷 计算机专业考试试卷 一. 单项选择题:(共35分,1-35题每题1分) 1. 以帧为传送数据单位的是:( D ) A. 会话层B. 数据链路层C. 网络层D. 传输层 2. ATM传输数据的单位是信元,每个信元( D )是个字节. A. 5 B. 48 C. 53 D ...

  • 计算机常用英语术语
  • Computer Vocabulary In Common Use 一.硬件类(Hardware) Hardware 二.软件类(Software) Software 三.网络类(Network) Network 四.其它 CPU(Center Processor Unit)中央处理单元 cpu m ...

  • 计算机相关专业实习报告
  • 专业实习报告871279 朱育民一.工作内容这学期跟李锡捷老师实习,参加的工作项目是信息安全组,因为平时较其它三位组员多接触unix-like的环境,因此成为本组组长并协助联络事情.我们期初一开始便有正式的case接手,是一个韩国的骇客教育机构hackerslab委托翻译他们的一份骇客教材.对于这方 ...

  • 请看完 一些成功人士的心得
  • 请看一些成功人士的心得 转自程先的专栏 今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程 ...