linux查看、添加、删除环境变量--实测好用

CSDN 2024-09-05 13:37:01 阅读 55

环境变量分类

按生命周期分:

永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。

临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

按作用域分:

系统环境变量:公共的,对全部的用户都生效。

用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

1.2 Linux 环境变量分类

在Linux系统中,环境变量可以分为以下几类:

系统级环境变量:

系统级环境变量对所有用户和进程都可见。它们通常在系统启动时被设置,并被所有用户和进程共享。一些常见的系统级环境变量包括PATH(用于指定可执行文件的搜索路径)、LANG(用于设置系统语言环境)等。

用户级环境变量:

用户级环境变量是每个用户独立设置的,只对该用户及其相关进程可见。这些变量可以在登录时通过不同的配置文件(如.bashrc、.bash_profile、.profile等)设置。常见的用户级环境变量包括HOME(指定用户的主目录路径)、USER(当前用户名)等。

进程级环境变量:

进程级环境变量是由特定进程设置的,并且仅对该进程及其子进程可见。这些变量可以通过编程语言(如C语言中的setenv函数)在程序中进行设置,或者通过终端命令行在特定的进程上下文中设置。

需要注意的是,系统级环境变量和用户级环境变量通常是通过配置文件进行设置和管理的。对于系统级环境变量,常见的配置文件包括/etc/profile和/etc/environment。对于用户级环境变量,常见的配置文件包括用户的个人配置文件(如.bashrc、.bash_profile、.profile等)。

每个环境变量都有其特定的作用和范围,根据需要进行适当的设置和管理。

1.3 Linux 常用的环境变量

在Linux系统中,有许多常用的环境变量,这些环境变量可以影响系统的行为和配置。以下是一些常见的Linux环境变量:

PATH:决定了系统在哪些目录中查找可执行文件。当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件。

三、常见的环境变量

<code>USER 当前登录的用户

HOME 当前用户的家目录

SHELL 当前用户的shell路径

LANG 当前语言设置

LD_LIBRARY_PATH:指定系统在哪些目录中查找共享库文件。

TERM:指定当前终端的类型。

PS1:定义命令行提示符的格式。

PS2:定义多行命令的提示符的格式。

MAIL 当前用户的邮件储蓄位置

EDITOR 默认使用的编辑器

PATH 执行命令时要搜索的目录列表

TERM 当前的终端模拟器

PWD 当前的工作目录

OLDPWD 上一次的工作目录,保存在变量中,用于使用 cd - 来切换回上个目录

这只是一些常见的环境变量,实际上还有很多其他的环境变量可以用来配置系统的行为和程序的运行。你可以使用printenv、env或者echo命令来查看当前系统中定义的所有环境变量。例如,使用printenv命令可以列出所有环境变量及其对应的值。

例如,要查看PATH环境变量的值,可以使用以下命令:

echo $PATH

 

查看PATH

echo $PATH

set:显示(设置)shell变量,包括的私有变量以及用户变量,不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样,unset命令来清除环境变量

env:显示(设置)用户变量

export:显示(设置)当前导出成用户变量的shell变量

我们可以使用 echo 命令来查看特定环境变量的值,比如我们使用echo $PATH,即可输出PATH环境变量的值。像下面这样:

(base) yhz@asus-RS720-E10-RS12:~$ echo $PATH

/home/yhz/miniconda3/bin:/opt/conda/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

这里,PATH是环境变量名,而 /home/yhz/miniconda3/bin:/opt/conda/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin是环境变量的值。PATH指定了系统在哪里查找可执行文件。在这个例子中,系统会首先在 /home/yhz/miniconda3/bin中查找,然后是/opt/conda/condabin,再然后是/usr/local/sbin,以此类推,最后是/snap/bin

这里我简单介绍一下我这次输出的这些路径代表什么,大家稍稍理解一下就好!也不是那么重要!

/home/yhz/miniconda3/bin: 这个路径是你的 Miniconda 安装目录下的 bin 目录,其中包含了Miniconda环境中可执行文件的位置。

/opt/conda/condabin: 这个路径是 Conda 的命令脚本所在的目录。

/usr/local/sbin: 这个路径是系统管理员(root用户)用于存放本地系统管理命令的目录。

/usr/local/bin: 这个路径包含了系统范围内安装的本地用户的可执行文件。

/usr/sbin: 这个路径是系统管理员(root用户)用于存放系统管理命令的目录。

/usr/bin: 这个路径包含了系统范围内安装的所有用户的可执行文件。

/sbin: 这个路径是用于存放系统管理命令的目录,类似于 /usr/sbin

/bin: 这个路径包含了基本的系统命令,是系统启动时就能访问的命令。

/usr/games 和 /usr/local/games: 这些路径通常用于存放游戏相关的可执行文件。

/snap/bin: 这个路径包含通过 Snap 包管理器安装的应用程序的可执行文件。

:是作为路径列表中的分隔符使用滴!在环境变量中,特别是PATH环境变量中,多个路径会以:分隔开来。每个路径表示系统在寻找可执行文件时应该搜索的位置。通俗点讲就是,:在路径列表中的作用是告诉系统:“这里是一个路径的结束,下一个路径从这里开始”。当系统在执行命令时,它会按照路径列表的顺序逐一搜索这些路径,找到可执行文件后就执行它。

在我们想要输出变量值的时候,变量名之前一定要有$,这样echo才能将变量名替换成实际的变量值。如果我们不加$的话,就会输出你输入的变量名本身的字符串

(base) yhz@asus-RS720-E10-RS12:~$ echo PATH

PATH

一、什么是环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

环境变量本质就是一张表,保存在内存当中。

该表在用户登录系统的时候,给用户生成的特定的环境变量表。

环境变量的主要用途:

身份认证

动态库查找

保存工作路径(pwd)

特定路径查找

保存特定变量值

二、环境变量分类

按生命周期分:

永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。

临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

按作用域分:

系统环境变量:公共的,对全部的用户都生效。

用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

三、环境变量相关操作命令

1)echo

查看指定环境变量的值

图片

2) env

查看当前用户全部的环境变量。

图片

3) export

export: 设置一个新的环境变量

图片

也可以显示当前系统定义的所有环境变量。

图片

 

4) set

set: 显示本地定义的shell变量和环境变量

图片

 

5) unset命令

unset: 取消本地变量和环境变量

图片

6) printenv

printenv 环境变量名:查看指定环境变量的值。

图片

四、常见的环境变量

<code>HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。

PWD:显示当前目录。

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

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

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

LOGNAME:当前用户的登录名。

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

1)PATH

功能和作用

PATH表示可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。

我们都知道之所以要加上 ./ ,是因为在程序运行时,需要说明该可执行程序所处的路径,执行一个命令的前提是先找到它。

如果我们愿意,也可以使用绝对路径来说明。

接下来我们思考一下为什么同为可执行程序的 ls 、 pwd 等等诸多指令在使用时不需要加 ./ 来说明其所处路径呢?

这是因为在系统中存在一个环境变量帮助我们在特定路径下搜索这些默认指令,这个环境变量叫做 PATH 。

如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录,这就是执行不在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/bin 或 export PATH=$HOME/bin:$PATH

2)LD_LIBRARY_PATH

功能和作用

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

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

书写格式

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

3)C_INCLUDE_PATH、CPLUS_INCLUDE_PATH

功能和作用

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

添加格式

推荐

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

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

4)CLASSPATH

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

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

五、环境变量文件

本小节介绍Linux下几个与环境变量配置相关的配置文件。

系统级环境变量各配置文件的差异之处

/etc/environment :

此中设置的环境变量在所有进程和所有用户中都可用,不区分 shell

变量设置的格式使用简单的键值对:KEY="value"code>

此文件不是脚本,仅仅是配置文件

/etc/profile :

if [ -d /etc/profile.d ]; then

for profile_file in /etc/profile.d/*.sh; do

[ -r "$profile_file" ] && . "$profile_file"

done

unset profile_file

fi

是登录 shell 和 交互式 shell 读取的配置文件,就是说在此文件添加或修改的内容需要再下一次登录时读取生效,或重启 shell 生效,且不影响非交互式的 shell 会话。

与 /etc/environment 不同,它是一个 shell 脚本文件,仅在用户登录时运行一次,职责是设置用户的环境和执行命令。

虽然它是一个 bash shell 脚本,但是 zsh 等其他 shell 也能够运行。

~/.bash_profile 、~/.bash_login~/.profile 用户级配置文件都来源自 /etc/profile

/etc/profile 文件中加载了 /etc/profile.d 目录,所以在 /etc/profile.d 添加的配置都会被引入到 /etc/profile 中

/etc/bash.bashrc

是系统级别的非登录 bash shell 初始化脚本文件

在每一次交互式 bash shell 时被执行

通常用于设置 bash 指定的配置和别名

只用于 bash shell

用户级的 ~/.bashrc 来源于此

1. /etc/profile 文件

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

并从 /etc/profile.d 目录的配置文件中收集 shell 的设置。

如果你有对 /etc/profile 有修改的话必须得手动执行 source /etc/profile,修改才会生效,此修改对每个用户都生效。

图片

 

2.  /etc/profile.d 目录(推荐)

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

图片

 

3.  /etc/bashrc 文件

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

Ubuntu没有此文件,与之对应的是 <code>/etc/bash.bashrc。

图片

用户

4. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件(推荐)

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

~/.bash_profile、 ~/.bash_login 和 ~/.profile 文件往往只存在一个,这与Linux的发行版本有关。centos中为 ~/.bash_profile,ubuntu则为 ~/.profile

执行的顺序为:~/.bash_profile > ~/.bash_login > ~/.profile

5.  ~/.bashrc 文件

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

图片

 

6.  ~/.bash_logout 文件

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

图片

如果希望环境变量的修改在每次登录时都有效,可以将其添加到用户的配置文件中,如<code>~/.bashrc或~/.bash_profile

.bashrc 文件

.bashrc 文件在用户每次启动一个新的交互式 Bash shell 时都会执行。通常,这个文件用于设置与交互式 shell 相关的配置。

打开 ~/.bashrc 文件(用任何你想要的方式,比如catlessvim等等,nano是我新学的,特地来秀一下哈哈哈哈哈哈哈):

nano ~/.bashrc

在文件的末尾添加你想要设置的环境变量,例如:

export MY_VARIABLE="YaoKnow"code>

export PATH=$PATH:/path/to/your/custom/directory

保存并关闭文件。然后,可以重新加载 .bashrc 文件,这样更改就生效啦!

source ~/.bashrc

.bash_profile 文件

.bash_profile文件在用户登录时执行,并且通常用于配置登录 shell 的设置。如果该文件不存在,系统会尝试执行.bash_login文件,或者.profile文件。

打开 ~/.bash_profile 文件:

nano ~/.bash_profile

在文件的末尾添加你想要设置的环境变量,例如:

export MY_VARIABLE="YaoKnow"code>

export PATH=$PATH:/path/to/your/custom/directory

保存并关闭文件。然后,你可以重新登录或者运行以下命令使更改生效:

source ~/.bash_profile

注意事项

重新加载配置文件: 在修改了这些文件后,要使更改生效,需要重新加载配置文件。可以运行source命令或重新启动终端窗口。

语法注意: 确保在配置文件中添加的环境变量语法正确,避免引起语法错误。

通过将环境变量的修改添加到这些用户配置文件中,我们就可以实现在每次登录时都应用这些变更,确保环境设置的持久性。

用户级环境变量各配置文件的差异之处

~/.bash_profile :

被登录 shell 执行

如果此文件存在,则忽略 ~/.bash_login 和 ~/.profile 文件

用于设置环境变量和执行任务,在登录过程中仅仅执行一次

~/.bash_login :

与 ~/.bash_profile 相似

如果 ~/.bash_profile 不存在,则执行此文件

通常情况下使用 ~/.bash_profile 较多

~/.profile :

如果 ~/.bash_profile 和 ~/.bash_login 都不存在,则执行此文件

非 bash 指定的文件,更通用

~/.bashrc :

被用于执行交互式非登录 shell

一般用于设置环境变量、设置别名、定义函数等

此文件被 ~/.bash_profile 或 ~/.bash_login 加载

总结:

~/.bash_profile 、~/.bash_login 、~/.profile 三者用于执行登录 shell

~/.bashrc 用于执行交互式非登录 shell

~/.bash_profile 和 ~/.bash_login 加载 ~/.profile

~/.bash_profile 或 ~/.bash_login 加载 ~/.bashrc

~/.bash_profile 、~/.bash_login 、~/.profile 三者通常用于设置系统范围的配置

~/.bashrc 通常用于用户指定的配置

临时有效

临时设置:---->对当前shell(BASH)有效

直接使用 export 命令,如图所示:

 

7.  执行顺序

系统读取环境变量配置文件的顺序

一个登录 <code>shell 会话首先读取 /etc/profile 配置文件,然后在当前登录的用户家目录依次查找读取 ~/.bash_profile~/.bash_login~/.profile

一个非登录 shell 会话首先读取 /etc/bash.bashrc 配置文件,然后在当前登录的用户家目录查找读取 ~/.bashrc

登录 shell

当你登录 Linux 系统时,bash shell 会作为登录 shell 启动。登录 shell 通常会从 5 个不同的启动文件种读取命令。

/etc/profile

$HOME/.bash_profile

$HOME/.bashrc

$HOME/.bash_login

$HOME/.profile

说明:/etc/profile 文件是系统中默认的 bash shell 的主启动文件。系统中的每个用户登录时都会执行这个启动文件。而另外 4 个启动文件是针对用户的,位于用户主目录中,可根据个人具体需求定制。

1. /etc/profile

2. /etc/bashrc

3. /etc/profile.d

4. ~/.bash_profile | ~/.bash_login | ~/.profile

5. ~/.bashrc

六、获取环境变量

1. 全局变量environ

environ 变量是一个char** 类型,存储着系统的环境变量

图片

实例:

图片

执行结果:

图片

2. 命令行参数

也可以通过命令行参数传递环境变量

实例:

图片

 

执行结果:

图片

3.  getenv

要想直接获取某个环境变量,也可以调用函数去获取,可以使用库函数<code>getenv()获取环境变量。

图片

举例:通过getenv获取环境变量PWD, 实现自己的PWD指令:

<code>#include<stdio.h>

#include<stdlib.h>

int main()

{

    char*pwd=getenv("PWD");

    if(pwd==NULL)

        perror("getenv");

    else

        printf("%s\n", pwd);              

    return 0;                                

}                                            

图片

方法一:<code>export PATH

使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法:

export PATH=/home/uusama/mysql/bin:PATH

# 或者把PATH放在前面

export PATH=PATH:/home/uusama/mysql/bin

注意事项:

生效时间:立即生效

生效期限:当前终端有效,窗口关闭后无效

生效范围:仅对当前用户有效

配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置

 

方法二:vim ~/.bashrc

通过修改用户目录下的~/.bashrc文件进行配置:

vim ~/.bashrc

# 在最后一行加上

export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc生效

生效期限:永久有效

生效范围:仅对当前用户有效

如果有后续的环境变量加载文件覆盖了PATH定义,则可能不生效

方法三:vim ~/.bash_profile

和修改~/.bashrc文件类似,也是要在文件最后加上新的路径即可:

vim ~/.bash_profile

# 在最后一行加上

export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

生效时间:使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile生效

生效期限:永久有效

生效范围:仅对当前用户有效

如果没有~/.bash_profile文件,则可以编辑~/.profile文件或者新建一个

方法四:vim /etc/bashrc

该方法是修改系统配置,需要管理员权限(如root)或者对该文件的写入权限:

# 如果/etc/bashrc文件不可编辑,需要修改为可编辑

chmod -v u+w /etc/bashrc

vim /etc/bashrc

# 在最后一行加上

export PATH=$PATH:/home/uusama/mysql/bin

牛逼啊!接私活必备的 N 个开源项目!赶快收藏

注意事项:

生效时间:新开终端生效,或者手动source /etc/bashrc生效

生效期限:永久有效

生效范围:对所有用户有效

方法五:vim /etc/profile

该方法修改系统配置,需要管理员权限或者对该文件的写入权限,和vim /etc/bashrc类似:

# 如果/etc/profile文件不可编辑,需要修改为可编辑

chmod -v u+w /etc/profile

vim /etc/profile

# 在最后一行加上

export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

生效时间:新开终端生效,或者手动source /etc/profile生效

生效期限:永久有效

生效范围:对所有用户有效

方法六:vim /etc/environment

该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限:

# 如果/etc/bashrc文件不可编辑,需要修改为可编辑

chmod -v u+w /etc/environment

vim /etc/profile

# 在最后一行加上

export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

生效时间:新开终端生效,或者手动source /etc/environment生效

生效期限:永久有效

生效范围:对所有用户有效

Linux环境变量加载原理解析

上面列出了环境变量的各种配置方法,那么Linux是如何加载这些配置的呢?是以什么样的顺序加载的呢?

特定的加载顺序会导致相同名称的环境变量定义被覆盖或者不生效。

环境变量的分类

环境变量可以简单的分成用户自定义的环境变量以及系统级别的环境变量。

用户级别环境变量定义文件:~/.bashrc、~/.profile(部分系统为:~/.bash_profile)

系统级别环境变量定义文件:/etc/bashrc、/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment

另外在用户环境变量中,系统会首先读取~/.bash_profile(或者~/.profile)文件,如果没有该文件则读取~/.bash_login,根据这些文件中内容再去读取~/.bashrc。

为什么配置文件命名为 **.rc 、**.d ?

例如 .bashrc 全称是:Bourne Again SHell run commands ,即rc代表的是 run command

例如 .profile.d ,d 代表的是 directory ,即目录的意思,一般设置环境变量在 .profile.d 文件夹中添加、修改即可,不用维护 .profile 文件



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。