代碼格式詳解
看幾個例子,
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中,也不建議用戶自己添加進去。
參考:《鳥哥的Linux私房菜_基礎學習篇》(第四版)