Linux中环境变量包括系统级和用户级。
系统级的环境变量是每个登录到系统的用户都要读取的系统变量。
用户级的环境变量则是该用户使用系统时加载的环境变量。
所以管理环境变量则是该用户使用系统时加载的环境变量。
所以管理环境变量的文件也分为系统级和用户级。
变量的设定规则
1.变量与变量内容使用“=”来连结。
2.等号两边不能出现空格。
3.变量名称只能是英文字母或数字,但开头字符不能是数字。
4.变量内容若有空格,可使用双引号或单引号将其内容结合起来。但只有双引号的时候“$
”才能生效。
系统
/etc/environment
是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如PATH=$PATH:/xxx/bin的代码即可。
/etc/profile
是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量。该文件一般是调用/etc/bash.bashrc文件。
/etc/bashrc
系统级的bashrc文件,为每一个运行bash shell的用户执行此文件。此文件会在用户每次打开shell时执行一次。
注意:/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。这两个文件修改后一般都要重启系统才能生效。
用户级
~/.bash_profile
是对应当前用户的.bash_profile文件,用于定制当前用户的个人工作环境。
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件,当用户每次打开shell时,系统都会执行此文件一次。
根据以上描述,这几个文件的执行先后顺序应当是:
/etc/enviroment->/etc/profile->~/.profile->/etc/bash.bashrc->~/.bashrc
Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1.临时的:使用export命令声明即可,变量在关闭shell时失效。
2永久的:需要修改配置文件,变量永久生效。
配置临时环境变量
在Linux下设置环境变量时,如果只是临时用一下,可以直接在shell下用set或export命令设定环境变量。只能在当前shell脚本下可用,切换到另一个终端就会失效。
终端输入:
export a=2
export CD_PATH=/mnt/cdrom
终端查看一个特定环境变量包含的内容
echo $a
echo $CD_PATH
配置永久环境变量
如果希望此环境变量每次开机或打开shell时自动设定而无需每次都手动设定,那么需要将export命令写入以上的系统文件中。
1.编辑当前用户环境变量文件;
vi ~/.bash_profile
export CD_PATH=/mnt/cdrom
export a=/home/u01
export b=hello
export cp_a=$a
2.使其立即生效
source ~/.bash_profile
source .bash_profile
3.查看该变量是否配置成功
echo
路径环境变量
export PATH=/bin/bash:/bin/sbin
export PATH=$PATH:/home/dong/path1
echo $PATH
查看环境变量
查看当前用户环境变量信息
export
env
查看某一环境变量信息
env | grep {xxx}
echo ${xxx}
撤销/清除环境变量
unset
export TEST=“hello test”
env | grep TEST
unset TEST
env | grep TEST
常用的环境变量
⚠️PATH决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
PS1 基本提示符,对于root用户是#,对于普通用户是$
常用符号意义
\h:主机名简称。
\H:完整的主机名称。
\d:代表日期,格式为weekday month date,例如:“Mon Aug1”
\t:显示时间为24小时格式,如:HH:MM:SS
\T:显示时间为12小时格式
\A:显示时间为24小时格式:HH:MM
\u:当前用户的账号名称
\v:BASH的版本信息
\w:完整的工作目录名称。绝对路径。家目录会以“~”代替
\W:利用basename取得工作目录名称,所以只会列出最后一个目录