在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用户是#,对于普通用户是$,可以设置主机名显示格式