Linux 环境变量及其设置
简介
环境变量是在操作系统中一个具有特定名字的对象, 它包含了一个或多个应用程序将使用到的信息. Linux 是一个多用户的操作系统, 每个用户登录系统时都会有一个专用的运行环境, 通常情况下每个用户的默认的环境都是相同的. 这个默认环境就是一组环境变量的定义. 每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置.
分类
根据环境变量的生命周期我们可以将其分为永久性变量和临时性变量, 根据用户等级的不同又可以将其分为系统级变量和用户级变量. 怎么分都无所谓, 主要是对它的理解.
对所有用户生效的永久性变量(系统级)
这类变量对系统内的所有用户都生效, 所有用户都可以使用这类变量. 作用范围是整个系统.
设置方式: 用 vim 在 / etc/profile 文件中添加我们想要的环境变量.
当然, 这个文件只有在 root(超级用户)下才能修改. 我们可以在 etc 目录下使用 ls -l 查看这个文件的用户及权限.
利用 vim 打开 / etc/profile 文件, 用 export 指令添加环境变量.
- #set java environment
- export JAVA_HOME=/usr/java/jdk
- export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
- export PATH=$JAVA_HOME/bin:$PATH
[注意] : 添加完成后新的环境变量不会立即生效, 除非你调用 source /etc/profile 该文件才会生效. 否则只能在下次重进此用户时才能生效.
对单一用户生效的永久性变量(用户级)
该类环境变量只对当前的用户永久生效. 也就是说假如用户 A 设置了此类环境变量, 这个环境变量只有 A 可以使用. 而对于其他的 B,C,D,E.... 用户等等, 这个变量是不存在的.
设置方法: 在用户主目录 "~" 下的隐藏文件 ".bash_profile" 中添加自己想要的环境变量.
查看隐藏文件: ls -a 或 ls -al
利用 vim 打开文件, 利用 export 添加环境变量. 与上相同. 同样注意, 添加完成后新的环境变量不会立即生效, 除非你调用 source ./.bash_profile 该文件才会生效. 否则只能在下次重进此用户时才能生效.
可以看到我在上图中用红框框住了两个文件,.bashrc 和. bash_profile. 原则上来说设置此类环境变量时在这两个文件任意一个里面添加都是可以的.
~/.bash_profile 是交互式 login 方式进入 bash shell 运行.
~/.bashrc 是交互式 non-login 方式进入 bash shell 运行.
二者设置大致相同. 通俗点说, 就是. bash_profile 文件只会在用户登录的时候读取一次, 而. bashrc 在每次打开终端进行一次新的会话时都会读取.
临时有效的环境变量(只对当前 shell 有效)
此类环境变量只对当前的 shell 有效. 当我们退出登录或者关闭终端再重新打开时, 这个环境变量就会消失. 是临时的.
设置方法: 直接使用 export 指令添加.
设置环境变量常用的几个指令
echo
查看显示环境变量, 使用时要加上符号 ""例: echo" 例: echoPATH
export
设置新的环境变量
export 新环境变量名 = 内容
例: export MYNAME="LLZZ"
修改环境变量
修改环境变量没有指令, 可以直接使用环境变量名进行修改.
例: MYNAME="ZZLL"
env
查看所有环境变量
set
查看本地定义的所有 shell 变量
unset
删除一个环境变量
例 unset MYNAME
readonly
设置只读环境变量.
例: readonly MYNAME
常用的几个环境变量(一般都为大写)
PATH
指定命令的搜索路径. 通过设置环境变量 PATH 可以让我们运行程序或指令更加方便.
echo $PATH 查看环境变量 PATH.
参考:
https://blog.csdn.net/llzk_/article/details/53813266
经典实战说明配置环境变量方法:
安装完成 java jdk 后, 配置
(1)对所有用户生效的永久性变量 (系统级) 配置
- [root@szxjdw02-web-51~]# vim /etc/profile #增加如下 4 行内容
- #set java environment
- export JAVA_HOME=/usr/java/jdk
- export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
- export PATH=$JAVA_HOME/bin:$PATH
使用全局环境变量配置生效
[root@szxjdw02-web-51 ~]# source /etc/profile
查看 java 环境变量是否生效
- [root@szxjdw02-web-51 ~]# which java
- /usr/java/jdk/bin/java
在远程这台机器执行 which java 提示找不到 java, 本地可以找到, 这是为什么?
- [root@office target]# ssh root@10.68.8.51 which java
- which: no java in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
(2)对单一用户生效的永久性变量(用户级)
~/.bash_profile 是交互式 login 方式进入 bash shell 运行.
~/.bashrc 是交互式 non-login 方式进入 bash shell 运行.
2.1 配置~/.bash_profile 是交互式 login 方式进入 bash shell 运行环境变量
- [root@szxjdw02-web-51 ~]# vim ~/.bash_profile #增加如下 4 行内容
- #set java environment
- export JAVA_HOME=/usr/java/jdk
- export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
- export PATH=$JAVA_HOME/bin:$PATH
远程这台机器执行 which java 还是提示找不到 java, 但是本地可以找到
- [root@office target]# ssh root@10.68.8.51 which java
- which: no java in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
让配置文件生效一下
[root@szxjdw02-web-51 ~]# source ~/.bash_profile
远程这台机器执行 which java 还是提示找不到 java
- [root@office target]# ssh root@10.68.8.51 which java
- which: no java in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
2.2 配置~/.bashrc 是交互式 non-login 方式进入 bash shell 运行环境变量
- [root@szxjdw02-web-51 ~]# vim ~/.bashrc #增加如下 4 行内容
- #set java environment
- export JAVA_HOME=/usr/java/jdk
- export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
- export PATH=$JAVA_HOME/bin:$PATH
先不要 source ~/.bashrc, 直接远程执行 which java 查看是否可以找到 java 环境变量, 如下发现找到了.
- [root@office target]# ssh root@10.68.8.51 which java
- /usr/java/jdk/bin/java
总结: 永久修改环境变量三部曲
第一部曲: 交互式 login 方式进入 bash shell 运行环境变量
- vim /etc/profile
- source /etc/profile
第二部曲: 交互式 login 方式进入 bash shell 运行环境变量
- vim ~/.bash_profile
- source ~/.bash_profile
第三部曲: 交互式 non-login 方式进入 bash shell 运行环境变量
- vim ~/.bashrc
- source ~/.bashrc #此步骤不操作也可以, 因为上面实战已验证
另外补充:
bashrc 与 profile 的区别
要搞清 bashrc 与 profile 的区别, 首先要弄明白什么是交互式 shell 和非交互式 shell, 什么是 login shell 和 non-login shell.
交互式模式就是 shell 等待你的输入, 并且执行你提交的命令. 这种模式被称作交互式是因为 shell 与用户进行交互. 这种模式也是大多数用户非常熟悉的: 登录, 执行一些命令, 签退. 当你签退后, shell 也终止了. shell 也可以运行在另外一种模式: 非交互式模式. 在这种模式下, shell 不与你进行交互, 而是读取存放在文件中的命令, 并且执行它们. 当它读到文件的结尾, shell 也就终止了.
bashrc 与 profile 都用于保存用户的环境信息, bashrc 用于交互式 non-loginshell, 而 profile 用于交互式 login shell. 系统中存在许多 bashrc 和 profile 文件, 下面逐一介绍:
/etc/pro 此文件为系统的每个用户设置环境信息, 当第一个用户登录时, 该文件被执行.
并从 / etc/profile.d 目录的配置文件中搜集 shell 的设置.
/etc/bashrc: 为每一个运行 bash shell 的用户执行此文件. 当 bash shell 被打开时, 该文件被读取. 有些 linux 版本中的 / etc 目录下已经没有了 bashrc 文件.
~/. pro 每个用户都可使用该文件输入专用于自己使用的 shell 信息, 当用户登录时, 该
文件仅仅执行一次! 默认情况下, 它设置一些环境变量, 然后执行用户的. bashrc 文件.
~/.bashrc: 该文件包含专用于某个用户的 bash shell 的 bash 信息, 当该用户登录时以及每次打开新的 shell 时, 该文件被读取.
另外,/etc/profile 中设定的变量 (全局) 的可以作用于任何用户, 而~/.bashrc 等中设定的变量 (局部) 只能继承 / etc/profile 中的变量, 他们是 "父子" 关系.
参考文档:
- https://www.cnblogs.com/aaronLinux/p/5837702.html
- https://www.cnblogs.com/hongzg1982/articles/2101792.html
- https://blog.csdn.net/llzk_/article/details/53813266
来源: http://www.bubuko.com/infodetail-2698716.html