Linux中PATH、CLASSPATH等环境变量配置格式详解

代码格式详解#

看一个例子:

#set java environment
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
export CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH

#set hadoop environment
export HADOOP_HOME=/opt/hadoop-2.6.5
export PATH=${HADOOP_HOME}/bin:$PATH
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

  • 点.表示当前路径
  • 冒号:是分隔符,环境变量的搜索是有先后顺序的,写在前面的就会先搜索
  • 这句的意思就是,把当前目录 和 ${JAVA_HOME}/lib/tools.jar 和 ${JAVA_HOME}/lib/dt.jar 设置为CLASSPATH环境变量。

第4行:export PATH=$JAVA_HOME/bin:$PATH

  • 这句的意思就是,把$JAVA_HOME/bin 和 $PATH设置为PATH环境变量,由于这里加上了原来的PATH,所以相当于在原来的PATH上增加了$JAVA_HOME/bin 。

产生的疑惑#

1. 为什么第3行的CLASSPATH不加上自身,但第9行的要加上自身$CLASSPATH ?但每次设置PATH时都要加上自身$PATH ?

答:因为CLASSPATH环境变量一开始就是空的,所以第3行可以不加上它自身,但是第9行如果不加$CLASSPATH的话,就会把第3行设置的CLASSPATH给覆盖掉。但是PATH一开始并不是空的,系统初始的时候PATH中就已经有值了(一些系统命令的保存目录),所以每次设置的时候都要加上它自身$PATH。

2. 为什么设置PATH的时候不加上当前目录. ?

(1) 如果在 PATH 中加入本目录(.)后,确实我们就能够在指令所在目录进行指令的执行了。 但是由于你的工作目录并非固定(常常会使用 cd 来切换到不同的目录), 因此能够执行的指令会有变动(因为每个目录底下的可执行文件都不相同嘛!),这对使用者来说并非好事。

(2) 主要是出于安全的考虑,由于系统默认是允许所有人在/tmp下写入任何文件的,万一有居心不良的用户或者黑客入侵到计算机,并在/tmp下面埋下木马,名字为ls,当用户用root身份登录后,到/tmp目录执行ls就会有意想不到的危险(因为你把当前目录加进了PATH,如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行!),所以默认不把当前路径’’."加入PATH中,也不建议用户自己添加进去。

参考:《鸟哥的Linux私房菜_基础学习篇》(第四版)

posted @   拾月凄辰  阅读(11336)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示
主题色彩