Linux 下的环境变量

Linux 下的环境变量

Linux 下添加环境变量

如果你想像在 Windows 下为用户添加环境变量,你可以这样做:

  1. 进入用户的环境配置文件.bashrc中(~ 表示的是用户的家目录,比如我用 paoka 登录,那么 ~ 就是/home/paoka

    1
    vim ~/.bashrc

    注意:如果你使用的 shell 不是 bash ,而是 zsh(例如在 Kali Linux 下),那么你就要这样做,因为配置文件不同:

    1
    vim ~/.zshrc
  2. 进行修改,首先按下 G 切换到最后一行,按下 i 进入插入模式,新建一行输入:

    1
    export PATH="/opt/miniconda3/bin:"$PATH

    这里我以/opt/miniconda3/bin为例,你可以改成你自己的,但要注意在路径后添加冒号,在最后添加$PATH
    然后按下shift + ;输入wq回车,这样就修改完成了

    $PATH 是一个变量,PATH="/opt/miniconda3/bin:"$PATH是在原有的 $PATH 前添加/opt/miniconda3/bin:
    因为不同的路径在 Linux 里用冒号分割,所以要在最后添加冒号

  3. 到这里还没结束,你还要执行下面的命令让修改生效

    1
    source ~/.bashrc 

    注意:如果你使用的 shell 是 zsh:

    1
    source ~/.zshrc 

    source 命令把配置文件的内容读取到目前的 shell 环境里,也可以使用小数点来代替 source 命令
    其实你也可以关闭当前的 shell 重新打开一个 shell 或者注销重新登陆来使之生效(某些情况下会不方便),这是因为当你因为打开 shell 时,shell 会自动读取配置文件的内容(注销重新登录也是关闭 shell 后重新打开了一个 shell 嘛)

    到此为止,你的环境变量就配置成功了,这个环境变量只对你当前的用户生效,下面我会具体说明环境变量

Linux shell 环境配置

下面我会通过登录 Linux 的过程来解释 bash 配置环境的过程(以 bash shell 为例)

获取的 Shell 的种类

在 Linux 下,你获得的 shell 有两个种类:

  1. login shell

    使用账号密码登录获得的 shell,例如:你通过 ssh 连接 Linux 服务器获得的 shell,或者通过 tty1 ~ tty6 登录获得的 shell

  2. non-login shell

    不用账号密码登录获得的 shell,例如:在桌面右键打开的 shell,或者在一个打开的 shell 里面输入 bash 而打开的 shell

你打开一个 shell 的时候,shell 会去读取相应的环境配置文件,而这两种 shell 读取的文件是不一样的

不同 Shell 读取的文件:

第一种:login shell

  1. Step1:读取/etc/profile

    每个用户登录获取 bash 时一定会读取这个配置文件,这个文件里有系统的整体设置,这个文件可以利用用户标识符(UID)完成一些配置,在这里可以给所有用户配置整体环境,这个文件还会去调用其他文件来完成其他配置

  2. Step2:读取~/.bash_profile

    读取完了整体的环境配置后,现在该读取用户的个人配置文件,所读取的文件有三个:

    • ~/.bash_profile
    • ~/.bash_login
    • ~/.profile

    其实 shell 只会读取其中的一个,shell 会从上到下按照上面列表的顺序读取,读取到其中一个剩下的就不会读取

    在这几个文件里设置了 $PATH,使用 export 使之成为环境变量,因为 $PATH 早在/etc/profile设置过,所以这里以累加的方法为 $PATH 添加内容,我截取的文件内容如下:

    ~/.bash_profile

    更有意思的是接下来这一段,他先判断~/.bashrc存不存在,然后再去读取,我们手动添加的环境变量就在这时被读取:

    ~/.bash_profile

    这就是 login shell 读取环境配置的过程

第二种:non-login shell

  1. Step1:读取~/.bashrc

    non-login shell 只会去读取~/.bashrc里的内容,~/.bashrc又会去读取其他文件

这也就解释了为什么配置完成后重新打开一个 shell 会使配置生效,因为 shell 重新读取了文件