本文最早于 2014年1月6日于本人个人博客(http://mooowooo.tk)发表,现博客搬家至此,转载请注明出处。
上一篇说完了 壳程序
的本质以及 Linux/Unix 家族的 Terminal 和不同的 Shell 环境,今天我们来看看 Windows。
目前的 Windows 里,提供了2个不同的壳程序——一般我们熟知的 CMD.exe 和后来其实我不知道是那个版本新加入的 PowerShell。那么这两个有有什么区别与联系呢?我们分别来看一下。
首先,CMD.exe 程序不是很多人所认为的“DOS窗口”,它其实是 Windows NT 的命令行接口,他是一个独立的程序,在 Windows 2000 之后,系统不支持直接运行 MS-DOS 程序的情况下,由 CMD.exe 在完成执行代码的动作。其实我们可以比较简单粗暴的把 CMD.exe 看做一个 MS-DOS 的虚拟机环境。说到这里,就不得不提一下另一个叫做 command.com 的程序。command.com 其实本质上来说是一个16位的 DOS 程序,主要用于运行一些老旧的 DOS 命令。不过事实上,在现在的系统里,几乎已经用不到甚至找不到 command.com 了,就算使用它,很大部分的命令最终也是发送给 CMD.exe 执行的。
说完了 CMD.exe,我们接下来说一下 PowerShell。PowerShell 其实可以看做 Windows 下的 Shell 环境。该程序与 CMD.exe 的区别在于他内置自己的脚本语言和相关辅助工具而非一个单纯的命令行接口。PowerShell 本身所用到的技术也于 CMD.exe 不太一样,PowerShell 由 .NET Framework 为基础向后兼容,它不光能访问 .NET CLR 也能使用 COM 技术,从我的理解来说,他不光可以完成 CMD.exe 所作的事情,还可以使用 C# 等 .NET 技术完成更高级更复杂的工作。
但是其实说一千到一万,真正的不同 Shell 间的差别都远非我这里所谈这么简单,这两篇文章只是针对 Terminal
Command
Shell
PowerShell
CMD
等等我们常见常用却不了解的工具做一个简单的梳理而已。根据我理解来说,其实我们目前在桌面环境下所打开的,其实都不是真正的 Shell 甚至不是真正的 Terminal,而是被图形界面和窗口管理系统再次包装过的一个更加高层次的壳
。
本文与上一篇文章全凭自身粗浅理解得来,中间掺杂不少个人的体会,如有错漏,望请一定指出,万分感谢!