linux下的环境变量问题
2018-5-18
操作系统:debian 9
1.non-login shell和login shell
为什么要先介绍这个呢,因为不同登录方式所读取的文件是不一样的。终端(tty1-tty6)登录的流程,x-window启动的流程。
这里引用鸟哥的Linux私房菜里面的话,login hell就是需要完整的登录流程的,如tty1-tty6。non-login shell就是取得bash的方法不需要重复登录的举动,如在x-window上打开终端,ssh远程链接。也就是说,在x-window中终端中打开终端,切换用户基本都属于non-login shell。注意:“ su -
”表示以login shell的方式切换到root。用tty1-tty6登录时,情况变得有点不一样,比如你以root身份登录tty1,此时就属于login shell,但是当你在tty1切换到其它用户时,这时就属于non-login shell,因为没有经历完整的登录流程,同样,先用普通用户登录tty2,在用“ su root
”的方式切换到root,此时root的行为属于non-login shell,而普通用户的行为则属于login shell。可以用
echo $PATH
查看读取到环境变量
2.profile、bash_profile、bashrc、.bashrc
lg表示login shell需要读取的配置文件,nlg表示non-login shell需要读取的配置文件。虚线表示被调用的配置文件。在redhat系列,bash.bashrc为bashrc。
/etc/profile
是系统整体设置的配置文件,最好不要修改,以x-window方式启动时,是不会读取的,但是对于不同的发行版,或者自己可以在” ~/.bashrc ” 加上” source /etc/profile
“,会读取 /etc/profile 内容
~/.bash_profile这个文件不一定有,如果没有,则读取 ~/.bash_login,如果这个文件也没有,则读取 ~/.profile,读取顺序(或者说优先级)也就是 ~/.bash_profile –> ~/.bash_login –> ~/.profile,如果前一级文件能够读取,则不在往后面读取。
可以看出,以 login shell 方式登录时,会读取图上所有文件。而以 non-login shell 并不会读取 “ /etc/profile ”里面的内容(正常情况),这样的话,如果你把 PATH路径加入到” /etc/profile “里面而又不做特殊处理的话,而且还是以x-window方式登录的时候,执行相关命令,自然会出现
command not found
从图上还可以看到 /etc/profile.d/*.sh 不论以什么方式登录,都会读取,因此我们可以把所有既能在tty下面执行,又能在终端上(x-window下)上执行的命令的路径放到这个文件下,方法也很简单,
新建文件
vim a.sh
填上路径(或需要执行的命令),如
export PATH=$PATH:/home/chao/intelFPGA_lite/17.1/quartus/bin
并更改它的权限,视情况而定
chmod 755 a.sh
只允许在 tty 下执行的命令的路径可以写到 ~/.profile, 在图形界面才能执行的命令的路径写入到 ~/.bashrc 或 /etc/bash.bashrc 。更多信息可参考鸟哥的Linux私房菜之Bash Shell 的操作环境
写入到 /etc/bash.bashrc 的对所有用户都有效,无论哪种方式都有效。
从上面那张图,我们可以很清楚的了解我们的PATH路径应该写在哪个文件夹。
如果在这个过程中遇到了其它问题,欢迎在评论区留言,或者Google一下,也欢迎把具体的解决方法留在评论区,以供后来者参考
参考
[…] 2018-5-18 更新,不建议采用一下划掉的方法,原因见这里 […]