【Linux基础】Linux环境变量(超详细)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. 环境变量分类

  • 生命周期

    • 永久的在环境变量脚本文件中配置用户每次登录时会自动执行这些脚本相当于永久生效。
    • 临时的用户利用export命令在当前终端下声明环境变量关闭Shell终端失效。
  • 作用域

    • 系统环境变量公共的对全部的用户都生效。
    • 用户环境变量用户私有的、自定义的个性化设置只对该用户生效。

2. 环境变量相关命令

  • env查看当前用户全部的环境变量。
    在这里插入图片描述

  • env|grep 环境变量名筛选包含的环境变量。在这里插入图片描述

  • export显示当前系统定义的所有环境变量。
    在这里插入图片描述

  • printenv 环境变量名查看指定环境变量的值。
    在这里插入图片描述

  • echo $环境变量名查看指定环境变量的值。
    在这里插入图片描述

  • unset 环境变量名清除指定环境变量。

3. 常用环境变量

3.1 PATH

功能和作用

可执行程序的搜索目录可执行程序包括Linux系统命令和用户的应用程序。如果可执行程序的目录不在PATH指定的目录中执行时需要指定目录。

书写格式

​ PATH环境变量存放的是目录列表目录之间冒号:分隔最后的圆点.表示当前目录

export PATH=目录1:目录2:目录3:......目录n:.

​ PATH缺省包含Linux系统命令所在目录/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin如果不包含这些目录Linux的常用命令也无法执行要输入绝对路径才能执行。
在这里插入图片描述

添加格式

export PATH=$PATH:$HOME/binexport PATH=$HOME/bin:$PATH

3.2 LD_LIBRARY_PATH

功能和作用

C/C++语言动态链接库文件搜索的目录它不是Linux缺省的环境变量但对C/C++程序员来说非常重要。

​ LD_LIBRARY_PATH环境变量存放的也是目录列表目录之间用冒号:分隔最后的圆点.表示当前目录与PATH的格式相同

书写格式

export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.

3.3 C_INCLUDE_PATH、CPLUS_INCLUDE_PATH

功能和作用

C_INCLUDE_PATH 指明C头文件的搜索路径CPLUS_INCLUDE_PATH指明C++头文件的搜索路径。

添加格式

推荐

​ 一般情况下Linux是不会设置这些环境变量的。

​ 所以在对某一个环境变量第一次设置时应该直接将其赋值为所需的目录之后的设置中再使用递归式的赋值或者直接一次性将所有目录用:分隔开一起赋值或者索性不使用这些环境变量而是在编译时使用-I参数来添加包含目录

不推荐

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/somewhere/include。因为如果 C_INCLUDE_PATH 未定义或定义为空那么 $C_INCLUDE_PATH 的值就会变为:/somewhere/include

​ GCC的官方文档影响GCC的环境变量中有这样一句

​ In all these variables, an empty element instructs the compiler to search its current working directory. Empty elements can appear at the beginning or end of a path. For instance, if the value of CPATH is :/special/include, that has the same effect as -I. -I/special/include.

​ 意思是在所有这些变量中一个空的元素会指示编译器搜索当前工作目录空的元素可以出现在一个路径的开头或结尾。例如如果CPATH的值是:/special/include这将会等效于-I. -I/special/include.

​ 因此在之前的例子中我们只想在预处理搜索路径中添加一个/somewhere/include期望的C_INCLUDE_PATH的值是/somewhere/include但实际上C_INCLUDE_PATH却被赋值为了:/somewhere/include开头的冒号之前虽然为空却会为预处理搜索路径添加上当前工作目录也即Linux中的.且优先级是所有目录中最高的

而这往往并不是我们想要的结果这会导致预处理的包含目录随着当前工作目录的改变而改变如果当前工作目录中恰好有一个与源代码中包含的文件同名的文件则会导致不可预期的错误

3.4 CLASSPATH

JAVA语言库文件搜索的目录它也不是Linux缺省的环境变量但对JAVA程序员来说非常重要。

​ CLASSPATH环境变量存放的也是目录列表目录之间用冒号:分隔最后的圆点.表示当前目录与PATH的格式相同

3.5 其他环境变量

  • HOME指定用户的主工作目录即用户登陆到Linux系统中时默认的目录。

  • PWD显示当前目录。

  • SHELL当前用户用的是哪种Shell。

  • HISTSIZE保存历史命令记录的条数。

  • HOSTNAME主机的名称应用程序如果要用到主机名的话通常是从这个环境变量中取得。

  • LOGNAME当前用户的登录名。

  • LANG/LANGUGE和语言相关的环境变量使用多种语言的用户可以修改此环境变量。

4. 环境变量文件

4.1 /etc/profile 文件

​ 此文件为系统的每个用户设置环境信息当用户第一次登录时该文件被执行。并从 /etc/profile.d 目录的配置文件中收集 shell 的设置。如果你有对 /etc/profile 有修改的话必须得手动执行 source /etc/profile修改才会生效此修改对每个用户都生效。
在这里插入图片描述

4.2 /etc/profile.d 目录推荐

/etc/profile 在每次启动时会执行 /etc/profile.d 下全部的脚本文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZL9wnIg-1664939516881)(/image-20221005101725125.png)]

4.3 /etc/bashrc 文件

为每一个运行终端的用户执行此文件当终端被打开时该文件被读取。如果你想对所有的使用终端的用户修改某个配置并在以后打开的终端都生效的话可以修改这个文件修改这个文件不用重启重新打开一个终端即可生效

​ Ubuntu没有此文件与之对应的是 /ect/bash.bashrc
在这里插入图片描述

4.4 ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件推荐

​ 每个用户都可使用该文件输入专用于自己使用的 shell 信息当用户登录时该文件仅仅执行一次默认情况下它设置一些环境变量执行用户的 ~/ .bashrc 文件。 此文件类似于 /etc/profile也是需要手动执行 source ~/.profile修改才会生效/etc/profile 对所有用户生效~/.profile 只对当前用户生效。

~/.bash_profile、 ~/.bash_login 和 ~/.profile 文件往往只存在一个这与Linux的发行版本有关。centos中为 ~/.bash_profileubuntu则为 ~/.profile。执行的顺序为~/.bash_profile > ~/.bash_login > ~/.profile
在这里插入图片描述

4.5 ~/.bashrc 文件

​ 当用户登录时以及每次打开新的Shell时该文件都将被读取。每个用户都有一个 ~/.bashrc 文件在用户目录下 此文件类似于 /etc/bashrc不需要重启就可以生效重新打开一个 bash 即可生效/etc/bashrc 对所有用户新打开的 bash 都生效但 ~/.bashrc 只对当前用户新打开的 bash 生效。不推荐在里面配置用户专用的环境变量因为每开一个Shell该文件都会被读取一次效率肯定受影响

4.6 ~/.bash_logout 文件

​ 当每次退出系统(退出 bash shell)时执行该文件。可把一些清理工作的命令放到这文件中。

4.7 执行顺序

  1. /etc/profile
  2. /etc/bashrc
  3. /etc/profile.d
  4. ~/.bash_profile | ~/.bash_login | ~/.profile
  5. ~/.bashrc
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux