登錄式shell:需要你輸入用戶名和口令才能獲得的shell叫做登錄式shell,比如用Xshell連接服務器
非登錄式shell:不需要你輸入用戶名和口令就能得到的shell叫做非登錄式shell,比如你在Xwindow下直接打開的shell
因為最近在學習Hadoop,需要在centOS上配置新的java環境變量(centOS7安裝后自帶openJDK),搞了好久才知道原來shell的獲取方式不同會影響環境變量的配置,所以記錄一下學習過程(我用的centOS7,別的linux可能會有出入),開始了:
一、先來說卸載自帶的openJDK:
在#后輸入rpm -qa | grep java,得到下圖:
將除.noarch文件外的其余文件刪掉,用rpm -e --nodes +文件名命令刪除,如下圖:
這時再輸入java會顯示 No such file or directory,說明自帶的jdk已經刪掉了
二、再說安裝新的jdk,將你下載的jdk壓縮包上傳到OS中,解壓,我解壓后的jdk放到了/software中,路徑是:
下面vi ~/.bash_profile進行環境變量的配置,修改文件內容如下:
保存並退出,輸入source ~/.bash_profile使配置生效,輸入java -version,得到如下結果JDK的更換便成功了:
三、重點來了,上邊的這些操作過程我都是在Xshell中完成的,也就是在登錄式shell中完成的,那我們再直接到虛擬機中看看環境變量是否還有用:
可以看到沒用,為什么?因為我們在虛擬機直接打開的shell是非登錄式shell,我們之前將JAVA_HOME配置在~/.bash_profile,而非登錄shell加載時並不讀這個文件,所以才會command not found,那非登錄式shell的配置文件是哪個?是~/.bashrc,我們打開~看一下,如下:
那我們配置一下這個文件看看效果,vi ~/.bashrc:
保存並退出,source一下,輸入java -version查看結果,如下便成功了:
四、有圖為證
圖片引自https://blog.csdn.net/leshami/article/details/77198412,所以現在清晰點了嗎?不清晰再附幾個比較好的鏈接可以學習:
https://blog.csdn.net/leshami/article/details/77198412
https://blog.csdn.net/gshzh00/article/details/90286458