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.bashrcbashrc

/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一下,也欢迎把具体的解决方法留在评论区,以供后来者参考

欢迎转载,不需注明出处,就说是你写的

参考

1 thought on “linux下的环境变量问题

发表评论

电子邮件地址不会被公开。

*

code