From:https://www.linuxidc.com/Linux/2015-08/121192.htm
.bash_profile和.bashrc的区别(如何设置生效):https://www.cnblogs.com/persist/p/5197561.html
Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。
1. 系统级:
- /etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用 /etc/bash.bashrc 文件。
- /etc/bash.bashrc:系统级的 bashrc 文件。
- /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的 profile 前,设置环境文件的环境变量。
2. 用户级(这些文件处于家目录下):
(1)~/.profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc 文件。这里是推荐放置个人设置的地方
(2)~/.bashrc:该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。
~/.bash_profile 或者 ~./bash_login:
~/.pam_environment:用户级的环境变量设置文件,没有做测试,不知道管不管用。
Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1. 永久的:需要修改配置文件,变量永久生效。
2. 临时的:使用 export 命令 声明即可,变量在关闭shell时失效。
设置变量的三种方法
1 在 /etc/profile 文件中添加变量【对所有用户生效(永久的)】
用 VI 在文件 /etc/profile 文件中增加变量,该变量将会对 Linux 下所有用户有效,并且是 “永久的”。
例如:编辑 /etc/profile 文件,添加 CLASSPATH 变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib:$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行 # source /etc/profile 不然只能在下次重进此用户时生效。
2 在用户目录下的 .bash_profile 文件中增加变量【对单一用户生效(永久的)】
用 VI 在用户目录下的 .bash_profile 文件中增加变量(或者在用户家目录下的 .bashrc增加变量),增加的变量仅会对当前用户有效,并且是 “永久的”。
例如:编辑 guok 用户目录 (/home/guok) 下的 .bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib:$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
.bash_profile 和 .bashrc 的区别:
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置。
/etc/bashrc:为每一个运行 bash shell 的用户执行此文件。当 bash shell 被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的 .bashrc 文件。
~/.bashrc:该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile 中设定的变量(全局)的可以作用于任何用户,而 ~/.bashrc 等中设定的变量(局部)只能继承 /etc/profile 中的变量,他们是"父子"关系.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常 .bash_profile 会调用 .bashrc 。
设置生效:可以重启生效,也可以使用命令:source
alias php=/var/eyouim/pub/php/bin/php
source /etc/profile
3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,
该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,
shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
查看是否已经设好,可用命令export查看:
[root@localhost bin]# export
设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
环境变量的查看
1 使用 echo 命令查看单个环境变量。例如: echo $PATH 或者 $ echo $HOME
2 使用 env 命令查看所有环境变量。例如:env
3 使用 set 命令查看所有本地定义的Shell变量 。例如:set
使用unset删除指定的环境变量
set 命令可以设置某个环境变量的值。unset命令可以清除环境变量的值。如果未指定值,则该变量值将被设为NULL。
示例如下:
$ export TEST="Test..." # 增加一个环境变量TEST
$ env | grep TEST # 此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
unset TEST # 删除环境变量TEST
$ env|grep TEST # 此命令没有输出,证明环境变量TEST已经删除
使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ 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
常用的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$