登录式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