UtopiaXC Blog - 环境变量
type: channel
link: https://blog.utopiaxc.com/tag/%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/
items: 刨根问底：到底什么是环境变量

刨根问底：到底什么是环境变量
type: item
date: 2020-04-17T21:32:00+08:00
description: 要想真正理解什么是环境变量，那我们就不得不认识究竟什么是CMD。CMD其实就是Command的缩写， 中文译作命令提示符。稍微了解Linux的人应该不会对命令行陌生。事实上， 在电脑刚刚出现的时候，并不存在所谓的图形界面，在Windows出现之前， DOS-磁盘操作系统的时代，一切指令都需要通过命令行来实现，而后出现的初代Windows也是基于DOS开发的， 所以在互联网萌芽时期，掌握命令行是一件必须的技能。然而，随着时代的发展，图形界面逐渐取代了DOS系统，命令行也逐渐远离了普通使用者的视野。 然而，命令行无论是在调试方面还是在远程支持上性能与便捷性都远超图形界面，因此Linux内核一直保留并将命令行的传统发扬， 也就是我们现在熟知的Bash等（CLI-Shell命令行界面壳层，是用户用于操作内核的程序，在Windows中， CMD也属于CLI-Shell，但是其功能和操纵性已经及其退化，除此之外，还有GUI-Shell图形界面壳层，Windows资源管理器， MacOS访达均属于这一层面）Windows Terminal下通过SSH协议RSA私钥验证连接远程CentOS的Shell简单了解一下CMD刚才我们提到了，CMD是一种CLI-Shell，那么他也拥有一个壳层该有的功能， 即对内核进行操作。我们早在小学就已经学过，操作系统内核的作用，简单来说， 就是用来操作文件和、进程，调度设备、资源以及负责通讯的核心程序。那么环境变量究竟与这些有什么关系呢？既然内核可以做这么多事情，那我们是不是就可以用CMD来取代图形介面了呢？答案是肯定的。 想必大家都使用过Python、MySQL或GCC等等需要用命令行来执行的程序，对于命令行一窍不通的朋友，可能连CMD是什么都不知道。 稍微有一点经验的，知道CMD就是命令提示行，但是也只是止步于此，至于为什么输入python就会打开python解释器却一点也不了解。其实，在你利用CMD输入相应指令时，你的操作系统内核会在系统路径下找到对应的可执行文件， 为其分配CPU等硬件资源，同时为其建立一个新的线程。CMD执行可执行文件的步骤管理员模式启动的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指令和把可执行程序放到…