Linux 环境变量

Linux的一个重要概念是环境变量,环境变量需要进行定义。有些是由系统设置的,有些是由用户自定义的,还有一些是由shell或加载执行程序时,由程序设置的。环境变量是一个赋值给它的字符串。分配的值可以是数字、文本、文件名、设备或任何其他类型的数据。

1、环境变量介绍

Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的.

1)系统级

/etc/environment:系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入类似如PATH=$PATH:/xxx/bin的代码即可。

/etc/profile:是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。该文件一般是调用/etc/bash.bashrc文件。

/etc/bash.bashrc:系统级的bashrc文件,为每一个运行bash shell的用户执行此文件。此文件会在用户每次打开shell时执行一次。

注意/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。 这两个文件修改后一般都要重启系统才能生效。

2)用户级

~/.profile: 是对应当前登录用户的profile文件,用于定制当前用户的个人工作环境。

每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,会设置一些环境变量,执行用户的.bashrc文件。

~/.bashrc: 是对应当前登录用户的bash初始化文件,当用户每次打开shell时,系统都会执行此文件一次。通常设置环境变量修改这个文件。

上述配置文件执行先后顺序如下:

/etc/enviroment –> /etc/profile –> ~/.profile –> /etc/bash.bashrc –> ~/.bashrc

2、环境变量的作用

环境变量相当于给系统或用户应用程序设置的一些参数,具体起什么作用这当然和具体的环境变量相关。比如PATH,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找;再如tc或vc++中,set include=path1;path2; 是告诉编译程序到哪里去找.h类型的文件;当然不仅仅是指定什么路径,还有其它的作用的,如set dircmd=/4 设置一个环境变量的作用是在使用dir命令时会把/4作为缺省的参数添加到你的dir命令之后,就像你的每个命令都加了/4参数,它实际上是给命令解释程序command设置的一个环境变量,并且是给dir这个内部命令。

3、配置环境变量的方法

1)临时环境变量

linux下设定环境变量时,如果只是临时用一下,可以直接在shell下用setexport命令设定环境变量。但是只能在当前shell环境下可以用,切换或关闭重新进入就会失效。具体配置方法,如下,

#终端输入:
export MYSQLPATH=/home/mysql  #MYSQLPATH设置为该路径
#终端查看一个特定环境变量包含的内容,比如,MYSQLPATH,PATH
echo $PATH
echo $MYSQLPATH

2)永久环境变量

设置的环境变量,需要经常使用的,而不是临时使用,把上面的设置环境变量命令写到上面提到的相应配置文件中即可,则可以每次开机或打开shell时自动设置,

例如,

只需要当前用户生效的环境变量:

终端中输入:sudo vi ~/.bashrc,编辑这个文件,在其末尾添加:

export MYSQLPATH=/home/mysql:$MYSQLPATH
# path采用:来分隔,冒号左右不需要空格.
# :$MYSQLPATH在后面新添加的优先搜索,$MYSQLPATH:在前面说明新添加的最后搜索,不加代表新路径设置为MYSQLPATH路径。

注意:在终端执行,source ~/.bashrc ,使其立即生效,或者重启电脑即可。

设置所有用户生效的环境变更:

终端中输入:sudo vi /etc/profile,编辑这个文件,在其末尾添加:

export MYSQLPATH=/home/mysql:$MYSQLPATH
# path采用:来分隔,冒号左右不需要空格.
# :$MYSQLPATH在后面新添加的优先搜索,$MYSQLPATH:在前面说明新添加的最后搜索,不加代表新路径设置为MYSQLPATH路径。

注意:在终端执行,source /etc/profile ,使其立即生效,或者重启电脑即可。

4、PATH环境变量

Linux命令其实是一个个的命令行程序,这些程序是分布在不同的众多目录中的。当命令行中输入一个命令的时,Linux需要到指定目录去查找命令对应的程序,而在PATH环境变量就记录这些目录。所以PATH环境变量的作用就是记录命令的查找路径,多个路径之间用英文冒号分割的(和Windows系统的PATH变量不同,Windows的PATH变量的路径是用英文分号分割的),有需要时也可以加入自己的路径。具体配置方法,如下,

#比如添加搜索路径/home/cjavapy/python和/home/cjavapy/java 路径到PATH中,采用:来分隔,冒号左右不需要空格
export PATH=$PATH:/home/cjavapy/python:/home/cjavapy/java
#若需要将路径放在优先搜索位置,将$PATH放在后面
export PATH=/home/cjavapy/python:/home/cjavapy/java:$PATH

注意:配置PATH环境变量可以永久生效,也可以临时生效,具体可以参考上面介绍的配置环境变量的方法。

5、常用环境变量

Linux系统有一些重要常用的环境变量,具体如下,

$HOME:用户家目录。

$SHELL:用户在使用的Shell解释器名称。

$HISTSIZE:输出的历史命令记录条数。

$HISTFILESIZE:保存的历史命令记录条数。

$MAIL:邮件保存路径。

$LANG:系统语言、语系名称。

$RANDOM:生成一个随机数字。

$PS1 :Bash解释器的提示符。

$PATH:定义解释器搜索用户执行命令的路径。

$EDITOR:用户默认的文本编辑器。

$TERM:表示显示类型。

$RANDOM:每次引用时生成一个0到32,767之间的随机整数。

$PWD:指示由cd命令设置的当前工作目录。

$TZ:指时区。它可以使用GMT、AST等值。

$UID:显示当前用户的数字用户 ID,在shell 启动时初始化。

可以使用echo查看变量信息,

例如,

$ echo $HOME
/root
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin

6、PS环境变量

PS即是Prompt String,命令提示符的意思。在bash中一共有四个。分为表示为PS1,PS2,PS3,PS4

1)PS1

PS1是用来控制默认提示符显示格式。下面方括号中的内容便是PS1。

例如,

$ echo $PS1
\h:\W \u\$

PS1的常用参数以及含义:

\d 代表日期,格式为weekday month date,例如:”Mon Aug 1″

\H 完整的主机名称

\h 仅取主机名中的第一个名字

\t 显示时间为24小时格式,如HHMMSS

\T 显示时间为12小时格式

\A 显示时间为24小时格式HHMM

\@显示时间,为12小时格式am/pm

\u 当前用户的账号名称

\v BASH的版本信息

\w 完整的工作目录名称

\W 利用basename取得工作目录名称,只显示最后一个目录名

\# 下达的第几个命令

\$ 提示字符,如果是root用户,提示符为 # ,普通用户则为 $

2)PS2

一个非常长的命令可以通过在末尾加\使其分行显示。多行命令的默认提示符是>。 我们可以通过修改PS2 ,将提示符修改为->

例如,

$ PS2='->' 
$ ls \
->/etc \
->/boot

3)PS3

shell脚本中使用select循环时的提示符。

例如,

#!/usr/bin/bash
PS3="Select a program to exectue: "
select program in 'ls -F' pwd date
do
  $program
done
  
(The Command Line)
Select a program to exectue: 2
1) ls -F
2) pwd
3) date
# /home/yang
# 在执行脚本的时候,PS3里面的字符串会显示在菜单的底部

4)PS4

PS4 是Prompt String 4的缩写,它是Linux/Unix下的一个用于控制脚本调试显示信息的环境变量。

用来修改set -x跟踪输出的前缀 。

例如,

$ export PS4="+Debug Info: "
$ set -x test_syntax.sh 
+Debug Info: GREETINGS=
++Debug Info: pwd
+Debug Info: CURRENT_DIR=/Users/liumiao
+Debug Info: '[' _HELLO = _ ']'

推荐阅读
cjavapy编程之路首页