Skip to content

Linux环境

约 1001 个字 7 行代码 预计阅读时间 3 分钟

每当我们打开一个Shell会话,Shell就会从各种配置文件里加载相应的变量,这些变量共同组成了环境。变量有两种类型——环境变量Shell变量,但是在bash下两者没啥区别。

同时Shell还会存储包含别名与Shell函数在内的程序性数据。

检查环境

诸如bash、zsh内置了printenvset命令来查看当前Shell会话内存储的环境,两者的区别是前者只会显示环境变量,后者会显示环境变量、Shell变量与Shell函数等。

printenv可以指定环境变量名来查看特定的环境变量值,比如USER

 printenv USER
yangshu233

这种查看单个环境变量值的方式也可以借助echo实现,通过扩展的方式引用环境变量。

 echo $USER
yangshu233

set命令在不指定选项的情况下会输出当前环境的所有信息,并且以字母序排序。

setprintenv都不能显示别名,它需要通过alias查看。

alias | less

在其中有一个很重要的环境变量值为PATH,它是由冒号分割的,以一系列路径组成的环境变量,记录了在运行命令时候Shell需要查找的目录。

环境是如何炼成的

环境是Shell会话被创建的同时并行建立的,当用户启用一个会话时,对应的Shell就会按照特定顺序读取并加载一系列启动配置文件,通常是先读取所有用户共享的默认环境,后读取主目录下用户的个人配置文件。

login shell & non-login shell

Shell会话有两个类型,一个是提示登录的会话(通常包括你的SSH远程登录会话),一个是无需登录的会话,比如在本地Linux计算机的GUI界面里打开一个终端。

以bash举例,下表展示了login shell与non-login shell加载文件的顺序。

表1-1 login shell的启动文件

文件 说明
/etc/profile 适用于所有用户的全局配置脚本
~/.bash_profile 用户的个人启动文件。可扩展或重写全局配置脚本中的设置
~/.bash_login 若~/.bash_profile缺失,则bash尝试读取此脚本
~/.profile 若~/.bash_profile与~/.bash_login均缺失,则bash尝试读取此文件。在基于Debian的Linux版本中(比如Ubuntu),这是默认值

表1-2 non-login shell的启动文件

文件 说明
/etc/bash.bashrc 适用于所有用户的全局配置脚本
~/.bashrc 用户的个人启动文件。可扩展或重写全局配置脚本中的设置

non-login shell不仅会读取以上列出的文件,还会继承父类进程的环境,通常是一个login shell。

实际上在日常的使用中,~/.bashrc是最重要的启动文件,因为non-login shell总是要加载它,而login shell也会读取这个文件。

修改环境

通过修改上面所提到的相应配置文件,即可实现环境上的自定义,我们可以通过nano或者vim来编辑文件。

在编辑文件前最好做一个配置文件的备份。

我们仅以最常用的,修改PATH作为示例。

PATH = $HOME/.local/bin/:$PATH

这里同样利用了Linux扩展的特性,将我们的新PATH添加至PATH环境变量之前,这是一个很实用的添加PATH的技巧。

使用export可以暂时地将这个修改保存在当前的Shell会话下。

export PATH

如果要持久化配置,需要将其写入启动配置文件,比如~/.bashrc,我们可以直接将其加在文件末尾。

最后,我们需要“刷新”一下配置,才能激活我们修改的内容。

source ~/.bashrc

注释

配置文件支持以"#"开头进行注释,适当地对自己的修改进行注释有助于之后维护配置文件。

不然写完后没几天就忘了这段代码干啥用的(