深入分析解决Deepin 15环境变量修改问题,完成JAVA环境搭建

最近使用deepin配置JAVA环境时发现不论是修改/etc/profile还是 ~/.profile多次尝试后均无效,不得其解,最后通过官方论坛看到大神对deepin环境配置的解释,以及寻找到相关解决方案。为了解决这个问题跟着了baidu走了不少弯路,过程中也学到不少东西,所以梳理出来,希望不仅能对deepin用户起到帮助而且还能了解对LInux的一些运行机制。

从开机到登录Shell过程分析环境读取顺序

  • linux开机过程:
BIOS/UEFI -> MBR/UEFI Executable -> Bootloader -> Kernel -> initramfs -> init

init过程会涉及到各种服务及其配置文件,最后会读取/etc/rc.local里面用户自定义的脚本,但是里面如果有环境变量之类的是不起作用的,因为读取这个文件时环境变量的配置还没启动生效。

  • 登录Shell:

登录Shell时涉及到环境变量文件读取的顺序这里分登录Shell和非登录Shell情况讨论:

根据shell是登入shell还是非登入shell,所运行的启动脚本也会不一样,我们“su - ”是登入shell;“su ”是非登入shell

  登录Shell:

~/.bash_profile —> ~/.bash_login —> ~/.profile 按照顺序这三个文件

  非登录Shell:

非登陆shell只会读取~/.bashrc配置文件。

(图侵删,来自cndn用户Leshami,详解见参考链接)

小结:如果直接打开终端一般是属于nologin shell没有读取到环境变量配置,因而导致环境变量“失效”

其他解决方案(最简):

讲了这么多,最后还是用这个方法最简单方便,在~/目录下新建.xsessionrc文件,然后像正常配置/etc/profile一样配置、重启即可在nologin shell情况下使用环境变量。

具体原理受限于英语水平不太明白。具体链接:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=636108

 

 参考资料:

https://blog.csdn.net/leshami/article/details/77198412

https://bbs.deepin.org/forum.php?mod=viewthread&tid=37049

https://www.linuxidc.com/Linux/2012-11/74463.htm

posted @ 2018-04-10 01:46  进击的嘎嘣脆  阅读(358)  评论(0编辑  收藏  举报