`
JAVA天地
  • 浏览: 673765 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

Unix的环境变量

阅读更多
一、SHELL的功能及分类

SHELL是UNIX作业系统中的'命令编译器'(CommandInter-
preter),它基本上是一个常驻的执行程式,它在使用者一签入
成功後就立即被载入(可在签入後以ps指令看到),主要功能则
在於接受使用者的指令、寻找命令(即档案)的所在并加以执行。
因此,SHELL的不同可能直接影响使用者输入指令的方式、档
案寻找的程序及速度等。

UNIX作业系统的SHELL大致可分为两大系统,一是1970年代
前期由美国贝尔实验室(BELLLAB)所发展的sh(BourneShell),
它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne
Shell)、bash(BourneAgainShell)等功能更多的介面;另一系
统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C
Shell),和它属於同一系统的有tcsh等。

无论上述的那一种shell,它的基本功能与作用都是相同的,
它们之间的不同处可能在於对同一动作处理程序上的不同(会影响
命令处理的速度)、所提供内键命令及变数的或多或寡等,其中内
部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使
用时最容易直接感受到的。

在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、
csh或tcsh来代替原先使用的shell、改变正在使用的环境;也可
以用'chsh'指令、输入想使用的shell的路径及名称(如/bin/csh,
在Y11-Y14机器上还需输入个人使用者的密码),改变以後每次
login时所使用的shell、使自己所使用的环境能最满足自己使用
上的需要。

二、SHELL的STARTFILES

不管你的loginshell是那一种shell,每一个shell都有它
自己的startfiles,我们设定理想环境时所需使用的指令与设
定的变数,都可以写在这些startfiles中,在login时先後加以
执行,这些startfiles的名称分别是:

SHELLSTARTFILES

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-istripcs8
LC_CTYPE=ISO_8859_1
exportLC_CTYPE
在$HOME/.cshrc(csh系列)中加上
stty-istripcs8
setenvLC_CTYPEiso_8859_1

3.希望能有像DOS系统中DOSKEY的功能
只要是使用bash及tcsh即具备此项功能。

4.希望能使用工作站上的汉书编辑器(he)

在$HOME/.profile(sh系列)中加上
LANG=big5
exportLANG
在$HOME/.cshrc(csh系列)中加上
setenvLANGbig5

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或8bits的资料,
因此在需要使用中文时,通常会有如下的设定:
stty-istripcs8
iuclc(-iuclc)
将标准输入的大写字母视为小写(或取消)。

olcuc(-olcuc)
将小写的字母以大写型态输出(或取消)。

echo(-echo)
将所有的输入由标准输出处输出(或取消输出,即
在萤幕上看不到自己的输入)。

stty除了这些叁数外,还可以用来定义某一个键的特定
功能,如:
sttyerase"^H"
sttykill"^U"

2.mesgy(mesgn)
若在工作时不希望被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'mesgn;/usr/ucb/vi!*;mesgy'

其中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.BourneShell系列
[VAR]=[STRINGorNUMBER]
export[VAR]

如果当我们离开shell、进入另一个程式(如tin)之後,
仍需要使用这个变数,则除了设定这个变数的值外,还需要
以'export'指令加以宣告,如设定萤幕型态的变数TERM就需
以'export'来宣告。

2.CShell系列
set[var]=[STRINGorNUMBER]
setenv[var][STRINGorNUMBER]

其中'set'是单纯设定变数值,'setenv'则除了设定变
数值外,还包含了类似sh中'export'的功能。

而无论是BourneShell或CShell,它们都有一些基本的、
共同的常用变数,如:

1.PATH

设定执行档的寻找路径,若现行目录也要包含在寻找的
路径中,则需在设定路径时给予一'.',表示现行目录亦包含
在寻找的路径中,如:

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

setpath=(./bin/usr/local/bin/usr/ucb)

2.EDITOR

设定想要使用的编辑器,如
EDITOR=/usr/ucb/vi

setenvEDITOR/usr/ucb/vi

3.HOME

设定个人帐号homedirectory的所在位置,通常在login
时即叁考/etc/passwd而给予一设定值,因此除非使用者有某
些特殊需求,通常不会重新设定。

4.SHELL

同样是在login时即会叁考/etc/passwd的内容而自动设
定,使用者即使重新设定这个变数的内容,对帐号的使用也
不会有任何影响。

5.提示符号的设定

在sh中:PS1="[STRING]"
PS2="[STRING]"
在csh中:setprompt="[STRING]"

当然以上所列的只是使用得较为广泛的变数,若您觉得这些
不够用,可用mansh、mancsh、mantcsh、manbash指令查阅各
shell的说明,在其中您将可看到各个shell所包含的变数及各变数
的用法。

若不清楚某一变数的设定内容,可用'echo$[VAR]'来观察
变数的内容,如:

echo$PATH


五、SHELL环境的异动

前面所提到startfiles中的设定将在使用者login时执行,
但当我们要在线上直接改变所使用的shell(如直接执行'csh'或
'execcsh',此时不会执行startfiles)或是要改变设定的内容,
在编修了startfiles或scriptfiles之後,可利用下列指令将
环境更新,而不必重新login:

.[scriptfile](在sh系列的shell中)
source[scriptfiles](在csh系列的shell中)

直接执行一个scriptfile与用'.'、'source'指令执行各有
其不同的效果,我们可建立一内容为

cd/(或cd[DIR])

的scriptfile来观察它们之间的差异:

因scriptfile的执行环境是一内定或自定的subshell(可在
scriptfile的第一行用类似'#!/bin/csh'指令加以设定),
所以它的直接执行并无法真正将shell环境的工作目录切换到
/,而scriptfile一结束,subshell即不存在、'cd/'指
令的效果也告消失;而用'.'或'source'执行则是真正将
shell的工作环境下的工作目录更换到/,不会因为script
file的结束而使档案中指令的效果消失。
分享到:
评论

相关推荐

    unix环境变量编程

    本篇文章将深入探讨Unix环境变量编程,旨在帮助你理解和利用这些变量进行更高效的系统管理与软件开发。 1. **环境变量的基本概念** - **定义**:环境变量是在Unix shell中存储信息的一系列变量,可供所有子进程...

    UNIX环境高级编程第二版.pdf

    UNIX环境变量是UNIX操作系统中一个核心的概念,它允许用户和应用程序存储和访问信息,这类信息可用来控制和配置系统的工作方式。环境变量存储了关于系统环境的临时数据,例如用户家目录的位置、当前工作目录的路径、...

    linux和unix下环境变量详解.docx

    本文旨在深入探讨Linux和Unix环境变量的相关概念、设置方法以及常见应用场景。 #### 二、环境变量的基本概念 1. **背景介绍** 在Linux环境下,当用户遇到无法执行已安装的应用程序的问题时(例如,收到“command...

    linux+unix-exprot-环境变量

    Linux & Unix 环境变量 环境变量 环境变量 环境变量 环境变量

    SEISMIC UNIX 及SEISMIC UNIX 安装实例(Fedora Core Ubuntu 系统 )

    6. **设置环境变量**: 为了让系统能找到SEISMIC UNIX的命令,可能需要在`.bashrc`文件中添加路径。打开`.bashrc`,添加`export PATH=$PATH:/usr/local/bin`,然后运行`source ~/.bashrc`使更改生效。 7. **验证安装...

    UNIX环境高级编程

    书中强调了程序和进程管理的重要性,如进程的创建和终止、程序的存储空间布局、共享库、存储器分配、环境变量、进程控制和信号处理等。在I/O方面,详细讨论了文件描述符、文件系统、标准I/O库、设备特殊文件和相关的...

    获取系统环境变量.rar

    在计算机科学中,系统环境变量扮演着至关重要的角色,它们是操作系统用来存储各种配置信息的变量,包括路径、系统设置和应用程序配置等。本资源"获取系统环境变量.rar"似乎是一个压缩包,提供了关于如何在不同操作...

    Patch_环境变量_

    在IT领域,环境变量起着至关重要的作用,尤其是在Python编程中。环境变量是操作系统中存储信息的变量,这些信息对于程序的运行至关重要。它们可以指示程序的安装位置、配置文件的位置,甚至影响程序如何查找和加载...

    环境变量详细解释,轻松理解环境变量

    ### 环境变量详细解释,轻松理解环境变量 在计算机科学领域中,环境变量扮演着极其重要的角色,尤其是在开发环境中。本文将详细介绍环境变量的基本概念、用途以及配置方法,并着重解析三个与Java开发密切相关的环境...

    tomcat配置环境变量

    2. **Linux/Unix**:使用文本编辑器打开`~/.bashrc`或`~/.bash_profile`文件,然后在文件末尾添加相应的环境变量定义。记得在修改后运行`source ~/.bashrc`或`source ~/.bash_profile`使更改生效。 3. **MacOS**:...

    设置系统环境变量的目地及方法

    在命令行环境中,如DOS或Unix shell,环境变量扮演着指挥官的角色。当你输入一个命令,如`dir`、`javac`或其他自定义命令时,系统会首先检查当前目录是否存在对应的可执行文件。如果不存在,系统将根据环境变量中...

    自动设置环境变量

    在Linux或macOS等Unix-like系统中,环境变量通常在用户的.bashrc、.bash_profile或系统的/etc/profile文件中设置。例如: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:...

    jdk环境变量总结

    **Java Development Kit (JDK) 环境变量详解** 在Java编程中,JDK环境变量的正确配置是运行和开发Java程序的基础。这些环境变量指示操作系统如何找到Java的安装位置,以及如何执行相关的Java工具。以下是几个关键的...

    unix tutorial

    - **环境变量**:探索Unix环境变量的作用和设置方法。 - **Shell变量**:理解Shell脚本中变量的定义和使用。 - **变量的使用与设置**:掌握如何在Unix环境中设置和引用变量。 #### 常见问题解答(FAQ) - 汇总了...

    linux环境变量介绍

    Linux 环境变量介绍 在 Linux 中,环境变量是一个非常重要的概念,它可以影响用户和操作系统之间的交互方式。 shell 是用户和操作系统之间的命令解释器,负责接受用户输入的命令并将其翻译成操作系统能够理解的指令...

    java环境变量配置

    - 在Linux或Unix系统中,则可以通过编辑`/etc/environment`或用户家目录下的`.bashrc`文件来添加或修改环境变量。 具体操作为: ``` JAVA_HOME=/path/to/jdk ``` 确保替换`/path/to/jdk`为你实际的JDK安装路径。 ...

    JDK 环境变量 自动配置

    标题中的“JDK环境变量自动配置”指的是在安装Java Development Kit (JDK)时,操作系统能够自动设置必要的环境变量,使得用户无需手动编辑系统环境变量来启用Java开发和运行环境。通常,这些环境变量包括`JAVA_HOME`...

Global site tag (gtag.js) - Google Analytics