简单易懂解说「到底什么是环境变量?」
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:
不好意思,我又重新认真地读了一遍,好像又理解了一点。
不知道理解得对不对,感谢您写的文章,对我来说很有用~
tim:
不好意思,回复晚了。是这样的。您理解的也没错。
其实就是一个变量而已,只不过他是这个系统(你可以把Linux想象成一门语言)的变量。
hokyo:
很奇怪,我应该是在跟着敲了一下,就出现问题了-bash: sudo: command not found。
很奇怪,我也没有乱改,我不知道哪里出来问题
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
a:
谢谢您的回复。我这边回复晚了,这里的话。
也有可能不是修改bash,
不知道自己是哪个shell的话,用echo $SHELL 看一下
hokyo:
博主~我想问一下如果想深入学习环境变量相关的知识,有没有推荐的书籍啊?我之前自学深度学习的时候自己瞎操作了一些命令,似懂非懂的感觉真的非常不好,一直很想搞清楚这其中的来龙去脉,以便之后遇到问题能更精准的解决,谢谢博主!
cj:
看linux和操作系统相关的书籍
hokyo: