您的位置:首页 > 运维架构 > Linux

linux用户环境变量的理解

2013-09-02 22:42 316 查看
一、. Linux 环境变量基本理解
http://blog.csdn.net/ddviplinux/article/details/4280433
1. 什么是环境变量?

Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义,这组变量被称为环境变量。用户可以对自己的环境变量进行修改以达到对环境的要求。

2. 环境变量是和Shell紧密相关的,它是通过Shell命令来设置的。环境变量又可以被所有当前用户所运行的程序所使用。对于bash来说,可以通过变量名来访问相应的环境变量。

实例:

a.显示环境变量HOME 

$ echo $HOME

/home/admin

b.设置一个新的环境变量NAME

$ export NAME="RaidCheng"

$ echo $NAME

RaidCheng

c.使用env命令显示所有的环境变量 

$ env

HOSTNAME=test

TERM=vt100

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=202.xxx.xxx.xxx 53694 22

CATALINA_BASE=/usr/local/jakarta-tomcat

SSH_TTY=/dev/pts/0

ANT_HOME=/usr/local/ant

JAVA_OPTS=-server

USER=admin

...

d.使用set命令显示所有本地定义的Shell变量 

$ set

BASH=/bin/bash

BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")

BASH_VERSION='2.05b.0(1)-release'

CATALINA_BASE=/usr/local/jakarta-tomcat

CATALINA_HOME=/usr/local/jakarta-tomcat

...

e.使用unset命令来清除环境变量 

$ export NAME="RaidCheng"

$ echo $NAME

RaidCheng

$ unset NAME

$ echo $NAME

f.使用readonly命令设置只读变量 

$ export NAME="RaidCheng"

$ readonly NAME

$ unset NAME

-bash: unset: NAME: cannot unset: readonly variable

$ NAME="New" #会发现此也变量不能被修改

-bash: TEST: readonly variable

3.  常见的环境变量 

PATH      决定了shell将到哪些目录中寻找命令或程序

HOME      当前用户主目录 

HISTSIZE    历史记录数

LOGNAME     当前用户的登录名 

HOSTNAME    指主机的名称

SHELL      前用户Shell类型 

LANGUGE     语言相关的环境变量,多语言可以修改此环境变量

MAIL      当前用户的邮件存放目录 

PS1       基本提示符,对于root用户是#,对于普通用户是$
PS2       附属提示符,默认是“>”

二、 配置环境变量的几种常用方法

1.修改/etc/profile文件

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。

 

(1)用文本编辑器打开/etc/profile

 

(2)在profile文件末尾加入:

JAVA_HOME=/usr/share/jdk1.5.0_05

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

 

(3)重新登录

 

注解:

a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录

 
b. linux下用冒号“:”来分隔路径

 
c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。

 

d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。

 

e. export是把这三个变量导出为全局变量。

 

f. 大小写必须严格区分。

 

2. 修改.bashrc文件  

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

 

(1)用文本编辑器打开用户目录下的.bashrc文件

 

(2)在.bashrc文件末尾加入:  

set JAVA_HOME=/usr/share/jdk1.5.0_05

export JAVA_HOME

set PATH=$JAVA_HOME/bin:$PATH

export PATH

set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export CLASSPATH

 

(3)重新登录

 

3. 直接在shell下设置变量

不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

 

只需在shell终端执行下列命令:

export JAVA_HOME=/usr/share/jdk1.5.0_05

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

三、 几种流行的shell

目前流行的Shell有ash, bash, ksh, csh, zsh等,你可以用下面的命令来查看你自己的Shell类型:

  # echo $SHELL

  $SHELL是一个环境变量,它记录用户所使用的Shell类型。你可以用命令:

  # Shell-name

  来转换到别的Shell,这里Shell-name是你想要尝试使用的Shell的名称,如ash等。这个命令为用户又启动了一个Shell,这个Shell在最初登录的那个Shell之后,称为下级的Shell或子Shell。

  使用命令:

  # exit

  可以退出这个子Shell。

  使用不同的Shell的原因在于它们各自都有自己的特点,下面做一个简单的介绍:

  1.ash

  ash Shell是由Kenneth Almquist编写的,是Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。

  2.bash

  bash是Linux系统默认使用的Shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有以下的特色:

  (1)可以使用类似DOS下面的doskey的功能,用上下方向键查阅和快速输入并修改命令。

  (2)自动通过查找匹配的方式,给出以某字串开头的命令。

  (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。

  3.ksh

  ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全相容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

  4.csh

  csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。

  5.zch

  zch是Linux最大的Shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的Shell的。

实例:

eshjish@linux-3fof:~/Desktop> echo $0
/bin/bash
eshjish@linux-3fof:~/Desktop> echo $SHELL
/bin/bash
eshjish@linux-3fof:~/Desktop> ps
PID TTY          TIME CMD
8091 pts/0    00:00:00 bash
8115 pts/0    00:00:00 ps
eshjish@linux-3fof:~/Desktop> csh
eshjish/Desktop> echo $0
csh
eshjish/Desktop> echo $SHELL
/bin/bash
eshjish/Desktop> ps
PID TTY          TIME CMD
8091 pts/0    00:00:00 bash
8118 pts/0    00:00:00 csh
8141 pts/0    00:00:00 ps
eshjish/Desktop> ksh
eshjish@linux-3fof:/home/eshjish/Desktop> echo $0
ksh
eshjish@linux-3fof:/home/eshjish/Desktop> echo $SHELL
/bin/bash
eshjish@linux-3fof:/home/eshjish/Desktop> ps
PID TTY
4000
TIME CMD
8091 pts/0    00:00:00 bash
8118 pts/0    00:00:00 csh
8146 pts/0    00:00:00 ksh
8164 pts/0    00:00:00 ps
eshjish@linux-3fof:/home/eshjish/Desktop>


四、 常犯的错误

四、 常犯的错误

今天在配置本地VM上自己用户下的csh时,不小心犯了一个致命失误,导致许多linux基本命令无法使用,同时vm上ghome无法正常启动,后来发现是在编辑home目录自己用户的的csh环境变量时,设置java环境变量时出错

1. 用vi打开csh

 vi ~/.cshrc

2. 设置JAVA_HOME

setenv JAVA_HOME /app/j2sdk/1.6.0_45/LMWP3/

setenv PATH $JAVA_HOME/bin;$PATH…

3. 保存退出后, source一下使之生效或者重新登录

 source ~/.cshrc

因为设置环境变量时不小心把“:” 输成“;”,而且是用重新登录的方式使之生效的

导致再重新登录后所有系统路径下的基本命令都无法使用,甚至是vim都无法使用

即便是想重新编辑~/.cshrc都很麻烦,

必须先找到vim安装路径/usr/bin/vim

手动用 /usr/bin/vim ~/.cshrc 才能打开.cshrc进行重新编辑

参考学习资料:

1. Learning the Korn Shell . 

by By Bill Rosenblatt; ISBN 1-56592-054-6, 336 pages.First
Edition, June 1993.


http://docstore.mik.ua/orelly/unix/ksh/index.htm




2. Korn Shell 脚本入门




http://www.ibm.com/developerworks/cn/aix/library/au-kornshellscripting/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell ksh