当前位置:网站首页>环境变量简单解释
环境变量简单解释
2022-08-07 16:42:00 【胡桃姓胡,蝴蝶也姓胡】
为什么要设置环境变量?
在终端输入的命令行对着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。我们以Java来举例子,我们要运行Java程序就需要Java虚拟机来进行编译,需要用到javac指令,而我们直接使用javac指令系统是无法识别的,因为我们没有指名这个指令对应的路径。所以我们需要配置环境变量,让系统可以在环境变量里面直接寻找到对应的路径。
同时配置多个环境变量
一个语句中可以同时附上多个环境变量:
- 在Windows系统中PATH变量中的所有路径采用 ;分割
- 在Linux系统中使用 :分割
PATH和CLASSPATH
PATH环境变量。作用是指定命令搜索路径,在i命令下执行命令如javac编译Java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提是要能够找到他们,JVM是通过classpath来寻找类的,我们的Java代码要执行成功就必须查找到类。
JAVA_HOME环境变量。它指向jdk的安装目录,同理也可以有GO_HOME。这只是一个单纯的变量。
环境变量格式讲解
1 #set java environment
2 export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
3 export CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
4 export PATH=$JAVA_HOME/bin:$PATH
5
6 #set hadoop environment
7 export HADOOP_HOME=/opt/hadoop-2.6.5
8 export PATH=${HADOOP_HOME}/bin:$PATH
9 export CLASSPATH=.:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.5.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.5.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$CLASSPATH第3行:
export CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar(1) 点.表示当前路径
(2) 冒号:是分隔符,环境变量的搜索是有先后顺序的,写在前面的就会先搜索
(3) 这句的意思就是,把当前目录 和 ${JAVA_HOME}/lib/tools.jar 和 ${JAVA_HOME}/lib/dt.jar 设置为CLASSPATH环境变量。
第4行:
export PATH=$JAVA_HOME/bin:$PATH(4) 这句的意思就是,把$JAVA_HOME/bin 和 $PATH设置为PATH环境变量,由于这里加上了原来的PATH,所以相当于在原来的PATH上增加了$JAVA_HOME/bin 。
产生的疑问
1. 为什么第3行的CLASSPATH不加上自身,但第9行的要加上自身$CLASSPATH ?但每次设置PATH时都要加上自身$PATH ?
答:因为CLASSPATH环境变量一开始就是空的,所以第4行可以不加上它自身,但是第9行如果不加$CLASSPATH的话,就会把第4行设置的CLASSPATH给覆盖掉。但是PATH一开始并不是空的,系统初始的时候PATH中就已经有值了(一些系统命令的保存目录),所以每次设置的时候都要加上它自身$PATH。
2. 为什么设置PATH的时候不加上当前目录. ?
(1) 如果在 PATH 中加入本目录(.)后,确实我们就能够在指令所在目录进行指令的执行了。 但是由于你的工作目录并非固定(常常会使用 cd 来切换到不同的目录), 因此能够执行的指令会有变动(因为每个目录底下的可执行文件都不相同嘛!),这对使用者来说并非好事。
(2) 主要是出于安全的考虑,由于系统默认是允许所有人在/tmp下写入任何文件的,万一有居心不良的用户或者黑客入侵到计算机,并在/tmp下面埋下木马,名字为ls,当用户用root身份登录后,到/tmp目录执行ls就会有意想不到的危险(因为你把当前目录加进了PATH,如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行!),所以默认不把当前路径’’."加入PATH中,也不建议用户自己添加进去。
边栏推荐
- 字节最爱问的智力题,你会几道?
- 深度学习之 12 循环神经网络RNN
- 基于卷积神经网络的视频超分辨率
- Byte's favorite puzzle questions, how many do you know?
- No index signature with a parameter(索引签名)
- 详解 SSL(一):网址栏的小绿锁有什么意义?
- First acquaintance with WeChat applet development
- 通过dlv简单分析Go coredump文件
- AAEON Jetson NX Image Backup and Recovery
- 如何借助cpolar内网穿透连接本地树莓派(2)
猜你喜欢
随机推荐
Is it safe to open a stock account in Hangzhou?
Super basic interview questions summary
在 Chrome 开发者工具里通过 network 选项模拟网站的离线访问模式
MySQL:基础架构与存储引擎
数字货币现货合约交易所系统开发技术分析
OK1028A核心板搭建QT开发环境
常见的海量数据面试题总结
通过dlv简单分析Go coredump文件
鄂维南院士:AI for Science,一场发生在当下的科技革命
差点被ECCV错过的Oral论文:视频理解新框架,仅用微调的「成本」,达到预训练的「全能」
yolov5使用GPU
[Paper Translation and Interpretation (2)] LOF: Identifying Density-Based Local Outliers Intensive Reading
LeetCode Daily Question 02: There are duplicate elements (1200 questions in each)
函数节流与函数防抖
如何借助cpolar内网穿透连接本地树莓派(2)
手机开证券账户安全吗 如何在手机上开证券账户
【kali-权限提升】(4.2)社会工程学工具包(上):启动监听设置payload
深入浅出边缘云 | 6. 监控与遥测
【论文翻译和解释(1)】Mitigating Confounding Bias in Recommendation via Information Bottleneck
jmter regex extractor









