Menu

刨根问底:到底什么是环境变量

要想真正理解什么是环境变量,那我们就不得不认识究竟什么是CMD。CMD其实就是Command的缩写, 中文译作命令提示符。稍微了解Linux的人应该不会对命令行陌生。事实上, 在电脑刚刚出现的时候,并不存在所谓的图形界面,在Windows出现之前, DOS-磁盘操作系统的时代,一切指令都需要通过命令行来实现,而后出现的初代Windows也是基于DOS开发的, 所以在互联网萌芽时期,掌握命令行是一件必须的技能。

         然而,随着时代的发展,图形界面逐渐取代了DOS系统,命令行也逐渐远离了普通使用者的视野。 然而,命令行无论是在调试方面还是在远程支持上性能与便捷性都远超图形界面,因此Linux内核一直保留并将命令行的传统发扬, 也就是我们现在熟知的Bash等(CLI-Shell命令行界面壳层,是用户用于操作内核的程序,在Windows中, CMD也属于CLI-Shell,但是其功能和操纵性已经及其退化,除此之外,还有GUI-Shell图形界面壳层,Windows资源管理器, MacOS访达均属于这一层面)


  • 简单了解一下CMD

             刚才我们提到了,CMD是一种CLI-Shell,那么他也拥有一个壳层该有的功能, 即对内核进行操作。我们早在小学就已经学过,操作系统内核的作用,简单来说, 就是用来操作文件和、进程,调度设备、资源以及负责通讯的核心程序。那么环境变量究竟与这些有什么关系呢?
             既然内核可以做这么多事情,那我们是不是就可以用CMD来取代图形介面了呢?答案是肯定的。 想必大家都使用过Python、MySQL或GCC等等需要用命令行来执行的程序,对于命令行一窍不通的朋友,可能连CMD是什么都不知道。 稍微有一点经验的,知道CMD就是命令提示行,但是也只是止步于此,至于为什么输入python就会打开python解释器却一点也不了解。
             其实,在你利用CMD输入相应指令时,你的操作系统内核会在系统路径下找到对应的可执行文件, 为其分配CPU等硬件资源,同时为其建立一个新的线程。


  • CMD执行可执行文件的步骤

             首先,我们先观察以下两个CMD窗口。



             可以很容易看出这两幅图的区别。在管理员模式下,打开后的路径为C:\WINDOWS\system32>, 而在非管理员模式下打开CMD,路径则为C:\User\Username>。那么为什么会出现这样的区别呢? 在研究这个问题之前,我们先研究一下CMD究竟时怎么工作的。
             我们刚才说过,CMD是一个壳层,他是用来对内核进行操作的。那么同Linux和DOS一样, 文件系统控制才是Shell的核心。哪怕我们执行程序,开启线程,我们也需要对可执行文件进行操作。 虽然CMD给我们提供了很多方法,但是仅有这些并不能满足我们的开发需求,这就需要利用程序的可执行文件了。 要想找到可执行文件,我们就需要对文件系统进行操作。那么显而易见,要想使用好CMD,我们就必须理解他对文件系统的控制。
             所以,利用CMD来使用MySQL的工作原理其实很简单,只不过是通过CMD将MySQL的可执行文件打开, CMD为其创建一个进程,然后MySQL就会利用类似cout和cin的方法和你交互,这和我们刚接触程序设计时写的控制台程序别无二样。
             不过,话说回来,管理员模式和非管理员模式为什么会出现打开路径的差别呢。 我们可以发现,管理员模式下打开的路径其实时Windows系统的根路径,而非管理员模式下打开的只是用户文件路径。 不难发现,其实以管理员账户打开CMD更像是在Linux系统上执行了sudo指令获取了系统的管理员权限。 这个管理员权限并不是Linux下的su超级管理员权限,事实上,Windows并没有让用户接触到超级管理员权限的打算。
             这两者的区别是什么?自然,我们使用CMD是为了执行程序,那么我们可以很直观地认识到,其实我们打开CMD之后, 不进行cd(进入文件夹)操作,仅在默认文件夹下,我们只能执行默认文件夹下的可执行程序。而显然,system32中的高权限可执行程序明显比用户文件夹下多得多。
             然而,我们并不可能将软件安装到system32或者User文件夹下,那么究竟是什么力量让我们输入mysql的时候打开了MySQL的可执行文件呢? 自然,是我们今天的主题,环境变量。因此,环境变量其实是一个为Shell提供执行检索的东西。

  • 环境变量的原理

             严格上讲,环境变量时操作系统中用于指定系统或程序运行环境的一个参数, 这个参数有很多种,虚拟机分配内存大小,默认文件的建立路径等等。虽然它的功能有很多, 但是在实际应用中,我们与Path的接触更加多一些。Path是什么,它指定了Shell执行程序时搜寻的路径, 就这么简单。
             因此,上面提到的,怎么在不需要cd指令和把可执行程序放到上述两个文件夹中就能执行可执行文件的问题就迎刃而解, 就是在环境变量的Path中把你的可执行文件的目录写进去就完事。比如,MySQL, 我们将它安装到了Program Files文件夹中,理论上我们无法直接打开CMD输入mysql来启动MySQL, 但是,如果我们将C:\Program Files\MySQL\bin(这个安装路径是设想的) 这个路径添加到Path中,我们在CMD中输入mysql时就会自动地去检索刚刚添加的文件夹, 找到对应的同名Windows可执行文件,即mysql.exe。除了.exe文件,.msi、.bat、.vbs、.js等都属于Windows可执行文件。
             值得一提的是,有的时候软件安装过程中就会自动地将他的安装目录添加到Path中,这也是部分软件安装时需要管理员权限的一部分原因。 但是如果我们明确记得我们安装过某个程序,却无法在CMD中执行,告诉你不是正确的内部或外部命令,那这个时候就要考虑是不是没有添加环境变量的Path。


  • 在Windows下添加环境变量

             首先,我们需要打开控制面板->系统和安全->系统。可以直接在控制面板中打开,也可使用下面截图的方法。 具体过程请参照截图。






  • 总结

             其实,环境变量是一个非常使用且方便的东西,我们可能经常能使用到他, 而我们大多数人可能只知其然不知其所以然,知道写了环境变量就可以用了, 但是却不知道环境变量到底有什么作用。代码精神不应该只是能跑就行,那样最终只能成为码农, 只有刨根问底将一起弄懂,并富有创造精神,才能成为造轮子的人。





本篇内容为原创内容,请参照SS BY-NC-SA协议许可
2020-4-17 21:32
UtopiaXC
于大连



版权声明及许可


本站作品均采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。

转载作品将在文章头部进行说明并提供署名与许可信息。

知识共享许可协议