1. 環境變量介紹
1.1 環境變量的作用
環境變量和全局的變量有什么用呢?
1.1.1 使用場景1
我們先來看這樣的一個使用場景1,我們有一個程序Java,需要讀取某個文件(/data/file.txt)。
那么我們在運行的時候是不是需要做如下的步驟:
- cd 到Java的目錄下;
-
執行Java命令;
但是,當我們需要同時使用多個工具的時候,比如又有java、maven、git等等,而且是多台機器的時候,我們通常需要很多繁瑣的cd操作。而配置環境變量 就可以使我們可以快速的運行這些腳本了。
1.1.1 使用場景2
如果我們又有JDK1.7,又有JDK1.8,而且需要經常的切換,那么怎么辦?
可以配置局部變量比如:
export JDK1.7=/usr/apps/jdk1.7 export JDK1.8=/usr/apps/jdk1.8 export PATH=$JDK1.7/bin
這樣,在改變的時候,就不需要全部的改變,而改變部分就可以了。
1.2 環境變量的作用
ok,有了上面的介紹,我們大概就可以知道環境變量到底有什么用處了。用處就是可以在操作系統的各個目錄下,都能訪問到需要的工具目錄內的內容,和Windows的桌面的思想十分相似,而且相當於在系統的各處都具有這個桌面的快捷方式。
2. Mac環境變量配置
在講解Mac環境變量配置之前,大家可以打開dos框,輸入
“echo $PATH” 查看當前的path下有什么東西。
個人的結果是這樣的:
localhost:/ Sean$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Sean/Software/hadoop/hadoop-2.2.0/bin:/Users/Sean/Software/Scala/scala-2.11.8/bin:/Users/Sean/Software/Spark/spark-2.0.2-bin-hadoop2.7/bin
可以看出,我的目錄下有”/usr/local/bin、/usr/bin、/Users/Sean/Software/hadoop/hadoop-2.2.0/bin”都被作為環境變量進行加載了。
那么下面我就講解下,這個東西到底應當如何配置。
2.1 環境變量文件的優先級
其配置文件的優先級如下所示:
/etc/profile
/etc/paths
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
2.2 Mac配置環境變量的地方
1)/etc/paths (全局建議修改這個文件 )
編輯 paths,將環境變量添加到 paths文件中 ,一行一個路徑
Hint:輸入環境變量時,不用一個一個地輸入,只要拖動文件夾到 Terminal 里就可以了。
2)/etc/profile (建議不修改這個文件 )
全局(公有)配置,不管是哪個用戶,登錄時都會讀取該文件。
3)/etc/bashrc (一般在這個文件中添加系統級環境變量)
全局(公有)配置,bash shell執行時,不管是何種方式,都會讀取此文件。
4)~/.bash_profile (一般在這個文件中添加用戶級環境變量)
每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!
5)
1.創建一個文件:
sudo touch /etc/paths.d/mysql
2.用 vim 打開這個文件(如果是以 open -t 的方式打開,則不允許編輯):
sudo vim /etc/paths.d/mysql
3.編輯該文件,鍵入路徑並保存(關閉該 Terminal 窗口並重新打開一個,就能使用 mysql 命令了)
/usr/local/mysql/bin
據說,這樣可以自己生成新的文件,不用把變量全都放到 paths 一個文件里,方便管理。
2.3 常見操作命令
2.3.1 操作系統判斷
- 首先要知道你使用的Mac OS X是什么樣的Shell,使用命令 echo $SHELL
如果輸出的是:csh或者是tcsh,那么你用的就是C Shell。
如果輸出的是:bash,sh,zsh,那么你的用的可能就是Bourne Shell的一個變種。 Mac OS X 10.2之前默認的是C
Shell。 Mac OS X 10.3之后默認的是Bourne Shell。 - 如果是Bourne Shell。
那么你可以把你要添加的環境變量添加到你主目錄下面的.profile或者.bash_profile,如果存在沒有關系添加進去即可,如果沒有生成一個。
2.3.2 修改host文件
sudo vi /etc/hosts
2.3.3 linux下查看和添加PATH環境變量
PATH的格式為:
PATH=$PATH::::——: ,中間用冒號隔開。
2.3.4 添加PATH環境變量:
[root@localhost u-boot-sh4]#export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH
2.3.5 查看PATH環境變量:
[root@localhost u-boot-sh4]#echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
2.3.6 操作示例
- 通過編輯 啟動文件 來改PATH。
# vim /etc/profile
- 在文檔最后,添加:
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
保存,退出。
- 想立即生效請運行:
#source /etc/profile
不報錯則成功。
如果想立刻生效,則可執行下面的語句:$ source .bash_profile(這是文件名)。
環境變量更改后,在用戶下次登陸時生效。
3. 軟連接
另外有很多小伙伴可能發現了,在mac上不設置環境變量有的時候也可以直接就訪問到了某些文件。這個是為什么呢?答案是用了軟連接。
3.1 查看加載文件
可以使用cat命令查看paths文件
localhost:/ Sean$ cat etc/paths /usr/local/bin /usr/bin /bin /usr/sbin /sbin
答案就是mac會自動加載paths目錄,自動加載這些文件夾下的文件.所以使用軟連接,在這些文件夾下建立軟連接,可能達到相同的效果。
3.2 軟連接查看
ls -li
406876 lrwxr-xr-x 1 root wheel 73 7 9 2016 jar -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jar 406877 lrwxr-xr-x 1 root wheel 79 7 9 2016 jarsigner -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jarsigner 406878 lrwxr-xr-x 1 root wheel 74 7 9 2016 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 406879 lrwxr-xr-x 1 root wheel 75 7 9 2016 javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac 406880 lrwxr-xr-x 1 root wheel 77 7 9 2016 javadoc -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javadoc 406881 lrwxr-xr-x 1 root wheel 75 7 9 2016 javah -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javah 406882 lrwxr-xr-x 1 root wheel 75 7 9 2016 javap -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javap 406883 lrwxr-xr-x 1 root wheel 76 7 9 2016 javaws -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaws 406884 lrwxr-xr-x 1 root wheel 74 7 9 2016 jcmd -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jcmd 406885 lrwxr-xr-x 1 root wheel 78 7 9 2016 jconsole -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jconsole 406886 lrwxr-xr-x 1 root wheel 73 7 9 2016 jdb -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jdb 406887 lrwxr-xr-x 1 root wheel 75 7 9 2016 jdeps -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jdeps 406888 lrwxr-xr-x 1 root wheel 74 7 9 2016 jhat -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jhat 406889 lrwxr-xr-x 1 root wheel 75 7 9 2016 jinfo -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/jinfo 406890 lrwxr-xr-x 1 root wheel 73