在Linux的日常操作中,我们经常会涉及到环境变量的问题,这里面有一些容易混淆和遗忘的知识点,今天简单的总结一下这些变量的含义和设置方式。

1、查看一个环境变量,如家目录 

# echo $HOME
/root

2. 设置一个新的环境变量hello,使用export命令

  export HELLO="Hello!"
  echo $HELLO
  Hello!

3. 使用env命令可以显示所有的环境变量

# env
HOSTNAME=master1
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=172.16.0.27 51028 22
SSH_TTY=/dev/pts/0
USER=root
...

4. 使用set命令显示所有当前本地定义的Shell变量,这其中包含了当前用户的环境配置信息

# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=master1
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=en_US.UTF-8
PS1='[\u@\h \W]\$ '     设置主机名显示和字体颜色


5. 使用unset命令来清除环境变量。如果未指定值,则该变量值将被设为NULL。示例如下:

  $ export TEST="Test..."  #增加一个环境变量TEST
  $ unset TEST    #删除环境变量TEST

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

  如果使用了readonly命令的话,变量就不可以被修改或清除了,如果需要删除需要删除配置重启shell。示例如下:

  $ export TEST="Test..."   #增加一个环境变量TEST
  $ readonly TEST    #将环境变量TEST设为只读
  $ unset TEST    #会发现此变量不能被删除
  -bash: unset: TEST: cannot unset: readonly variable

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

  -bash: TEST: readonly variable

  全局环境变量的设置位于/etc/profile文件

  如果需要增加新的环境变量可以添加下属行

  export PATH=$PATH:/path1:/path2:/pahtN

  -----------------------------------------------------------------------------------------------------------------------

Linux的变量种类

按变量的生存周期来划分,Linux变量可分为两类:

  • 永久的:需要修改配置文件,变量永久生效。

  • 临时的:使用export命令声明即可,变量在关闭shell时失效。

设置变量的三种方法

在/etc/profile文件中添加变量,对所有用户生效(永久的)

  用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

  例如:编辑/etc/profile文件,添加CLASSPATH变量

  # vi /etc/profile

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

在用户目录下的.bashrc文件中增加变量【对单一用户生效(永久的)】

  用VI在用户目录下的.bashrc文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

  例如:编辑guok用户目录(/home/guok)下的.bashrc

  $ vi /home/guok/.bashrc

  添加如下内容:

  export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

  注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

.bashrc和.bash_profile的区别

.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

When you login (type username and password) via console, either sitting at the machine, or remotely via ssh: .bash_profile is executed to configure your shell before the initial command prompt.

But, if you’ve already logged into your machine and open a new terminal window (xterm) then .bashrc is executed before the window command prompt. .bashrc is also run when you start a new bash instance by typing /bin/bash in a terminal.

.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行

.bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。

在 /etc目录的bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile 和.bashrc时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。  

常用的环境变量

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

  HOME 当前用户主目录

  HISTSIZE 历史记录数

  LOGNAME 当前用户的登录名

  HOSTNAME 指主机的名称

  SHELL   当前用户Shell类型

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

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

  PS1   基本提示符,对于root用户是#,对于普通用户是$,可以设置主机名显示格式