...

简单易懂解说「到底什么是环境变量?」

1. 建议阅读人群

  • 似懂非懂环境变量
  • 想花点时间复习一下
  • 稍微懂一点Linux基础的人,大概是会cd,pwd,cp,mkdir这样的程度。

2. 系统环境

  • macOS 10.15.2 (19C57)
  • iterm2(其实用什么都无所谓,只是做个测试)

3. 问题背景

生活中偶尔安装新软件的时候,总有一个叫环境变量的东西。那个时候不知道到底是什么,知道勾选了总没错。后来学了编程之后也每次只是设置了一下,知道如果写好了环境变量,电脑就认识这个路径上的程序了。虽然有疑问但也总是不了了之。最近开始学习Linux的时候开始重新注意到了这个东西。

下面我用通俗易懂的话来总结一下。

4. 概念导入

首先要明白一个概念,就是我们的OS(Operate System)中文译为操作系统,本质上就是一个巨大的软件。

这个电脑上运行的系统其实就是一个巨大的程序,这个程序可能就是 Windows,Linux,Mac 系统中的一种。但是本质都是程序,在这个程序里面有个环境变量。我们姑且称这个操作系统叫做妈妈吧。环境变量就是这个妈妈本身的变量。你运行其他程序的时候都是需要这个妈妈的变量,大家一起用。这就很像其他编程语言一样,就是个变量。

这样说可能不太明白。接着往下面看。

5. 关于PATH

5-1. PATH是干什么的

Linux有很多命令,你常用的cd,pwd,cp,mkdir这些命令都是储存在 /usr/bin 里,不信你看一下。

$ ll /usr/bin  
肯定出来一大堆命令的列表  

其实下面这俩命令出来的结果是一模一样的。

只不过一个是程序自己从PATH里面找出来,一个是你自己输入路径来执行命令。

$ /usr/bin/pwd  
$ pwd  

但是第1种方法没次都要从根路径自己用手打,这样也太没效率可言了吧。

难道我我们每次新建一个文件夹都要这样写?/usr/bin/mkdir new_dir

于是就有了第2种这样直接把命令打出来,不用自己从根路径一步步的打,那么系统是如何找到pwd这个命令的呢。

输入下面的命令看一下环境变量下的PATH有哪些路径。

$ echo $PATH  
---  
结果  
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin   

路径用隔开,转换成列表应该是

/usr/local/bin  
/usr/bin  
/bin  
/usr/sbin  
/sbin   

电脑按照顺序来,最先从第1个也就是/usr/local/bin来进行查找。

也就是说如果说以上的路径下都有pwd这个命令的话,那么也只会执行第1个/usr/local/bin/pwd

当系统运行一个命令的时候,而你没有告诉具体路径的时候,那么就会在PATH里寻找。

5-2. 查找使用的是哪个PATH

如果不知道自己执行的是哪个路径的话 where 可以找到

$ where pwd  
$ which pwd # which也可以  
----  
结果  
/bin/pwd  

5-3 .设置PATH

如果想重新设定PATH。下面的命令直接会覆盖全部的路径,只剩下你设置的。

$ export PATH=/xxx/bin  

如果想添加一个新的路径

$ export PATH=/xxx/bin:$PATH  

删除全部的路径

$ unset PATH  

PATH也就说到这里了,主要是为了知道PATH大致是用来干什么的,有什么用处。如何设置。接下来还是进入真正的环境变量。

6. 关于环境变量

6-1. 查看所有环境变量

printenv或者env可以把PC所有的环境变量打印出来。

$ printenv  
.....  
TERM_PROGRAM=Apple_Terminal  
SHELL=/bin/zsh  
TERM=xterm-256color  
TERM_PROGRAM_VERSION=433  
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.MTCZ3F7w1u/Listeners  
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin  
......  

可以看到环境变量有这么多,按照key value这种排列出来。

比如变量SHELL对应的就是 /bin/zsh

顺便可以看到环境变量可以用 echo $PATH 打印出 路径信息。

这样一下子就差不多清晰了。

系统变量就是一个大的容器,其中里面有一个环境变量是PATH,PATH主要用于储存各种命令的路径。

这么多系统变量,想要哪里echo哪里((´∀`))

6-2. 设置新的环境变量(临时)

如果想要自己设置一个临时的变量

什么是临时环境变量?

简单的理解就是你现在这个命令窗口的变量,等你新开一个命令窗口,那么这个变量就不复存在,无法使用。这样的概念类似于函数的局部变量无法全部使用的感觉一样。

不信你试试下面这个,设置一个新的环境变量

$ export NEWSAMPLE="sample" # 设置新的临时环境变量  
$ echo $NEWSAMPLE # 在当前的窗口打印一下看看  
---  
结果  
sample  
---  
# 新建一个命令窗口  
$ echo $NEWSAMPLE  
---  
结果什么都没有  

6-3. 设置新的环境变量(永久)

永久就不用说了,一直在你的电脑里不会动,但基本上需要重新启动系统才可以生效。

如果不放心可以使用echo来测试一下环境变量设置成功。

第一种方法 只能适用于当前用户

直接在启动文件.zshrc里写入

$ vi ~./zshrc  # 写入  
添加保存  
export NEWSAMPLE="sample"  
$ source ~/.zshrc # 立即生效  

第二种方法 只能适用于所有用户

$ vi /etc/profile # 写入  
添加保存  
export NEWSAMPLE="sample"  

差不多就这些了

总结

环境变量和PATH的关系大概上文写的那样,环境变量是整个电脑操作系统的妈妈变量,其中有一个孩子是PATH,主要用来存储解释路径。更具体的如何设置这俩也写了一下。接下来就需要在实践中深刻理解一下,可能还有很多情况是文章中没有提到的,这些都不是初级理解这个概念要做的,初级阶段的理解尽量停留在理解和基本使用上,高阶的用法进来在实践中强化和查找,反复记忆。

以上,谢谢。(人''▽`)ありがとう❤️

共有评论(8)

...
tim

我是没有计算机基础的前端,感觉还是理解的不是很清楚sad

2022-06-16
...
tim   回复了 tim

不好意思,我又重新认真地读了一遍,好像又理解了一点。

  1. 操作系统类似于一个程序,存在着很多变量,这些变量们都叫做环境环境,其实有点类似于JavaScript全局变量,不知道可以不可以这么理解~
  2. PATH 就是环境变量中的其中一个而已,它的作用是当我们在控制台执行命令时,从PATH变量的值,也就是一大堆路径中,寻找程序来执行。

不知道理解得对不对,感谢您写的文章,对我来说很有用~

2022-06-16
...
hokyo  博主   回复了 tim

不好意思,回复晚了。是这样的。您理解的也没错。

其实就是一个变量而已,只不过他是这个系统(你可以把Linux想象成一门语言)的变量。

2022-10-20
...
a

很奇怪,我应该是在跟着敲了一下,就出现问题了-bash: sudo: command not found。

很奇怪,我也没有乱改,我不知道哪里出来问题

 

2022-06-29
...
a   回复了 a

mac 用户如果不小心乱动了环境变量试试这样

第一步
在terminal里面输入:
export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"

然后命令暂时可以用了,
第二步
用open -e ~/.bash_profile在文本编辑器里面打开.bash_profile文件:
第三步
更改PATH环境变量设置,添加上这一行,
export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
————————————————
版权声明:本文为CSDN博主「qq_35584098」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35584098/article/details/79756131

2022-06-29
...
hokyo  博主   回复了 a

谢谢您的回复。我这边回复晚了,这里的话。

也有可能不是修改bash,

  • ~/zsh的话:.zshrc
  • ~/bash的话:.bash_profile

不知道自己是哪个shell的话,用echo $SHELL 看一下

2022-10-20
...
cj

博主~我想问一下如果想深入学习环境变量相关的知识,有没有推荐的书籍啊?我之前自学深度学习的时候自己瞎操作了一些命令,似懂非懂的感觉真的非常不好,一直很想搞清楚这其中的来龙去脉,以便之后遇到问题能更精准的解决,谢谢博主!

2024-01-17
...
hokyo  博主   回复了 cj

看linux和操作系统相关的书籍

2024-01-31
登陆即可评论哦