Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1330309
  • 博文数量: 464
  • 博客积分: 9399
  • 博客等级: 中将
  • 技术积分: 6364
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-19 09:15
文章分类

全部博文(464)

文章存档

2014年(12)

2013年(123)

2012年(173)

2011年(156)

我的朋友

分类: 系统运维

2013-05-15 09:46:10

Unix的环境 变量


一、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的收场 而使文件中指令的效果消失。
阅读(448) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~