排好队,跟我一起涨知识
什么是Shell?Shell的中文意思是“外壳”,至于啥是Shell,你确定你真的知道?今天,我们就来谈谈,什么是Shell,它是干嘛的,有哪些优点…
当我们要让计算机为我们做一件事情的时候,其实真正帮我们把事情给完成好的是硬件这个家伙。例如,当你要计算 a + b = ?的时候,我们都知道是通过各种电路、芯片等的配合来完成的。硬件这个家伙虽然干活强,但是头脑可能并不是很管用,计算a+b这些指令的时候,它并不知道执行的顺序。
这个时候内核就出场了,它指挥着硬件如何工作。也就是说,用户输入一段命令,内核根据这条命令来指挥硬件如何工作。不过很遗憾,内核这家伙藏的比较深,用户是很难与内核直接沟通的。内核管理的东西太多了,拥有的权力太大了,如果用户叫内核干嘛,内核就干嘛的话,万一用户一不小心胡乱操作,可能会导致操作系统奔溃的。
说这么多,其实就是想说用户一般情况下用户无法与内核直接交流。
这个时候,Shell就出场了,也就是说,用户输入命令,Shell对用户输入的命令进行解释,然后提交给内核,内核再指挥硬件正确着工作。
这就是这三个家伙的关系。如下图:
其实用户想要通过计算机来完成某些工作,总不能直接来操作系统吧?但用户又必须通过操作系统来完成我们的任务。这个时候用户一般是通过所谓的应用程序来操作内核,然后让内核来指挥硬件。我们都知道,应用程序在操作系统中是处于最外层的,就像鸡蛋的外壳一样,因此也就被称之为Shell
也就是说,Shell的功能只是为用户操作系统提供一个接口。只要能够操作应用程序的接口我们都称之为Shell。侠义的Shell指的是命令行类的软件。广义的Shell还保存那些图形界面的软件。
有些人可能会觉得现在已经有好多图形界面的工具可以来操作我们的系统了,为啥还要学习Shell呢?其实Shell的优点多到数不清,我就暂时列举几个。
好吧,我就不在列举了。总之,作为一个程序员,学点Shell是必须的。
虽然一直说是Shell,但是Shell有挺多种的。例如Bourne Shell(sh), Sun里头默认的C Shell, 商业上常用的K Shell等。每一个Shell都有各自的特点,语法上也有一些差别。Linux里使用的这一种版本就称之为”Bourne Again Shell(简称bash)”,这个是Bourne Shell的增强版,算是用的人比较多。还有那个C Shell因为语法与C类似,因此也比较出名,用的人也比较多。 不过我们讲的主要以bash为主。
Linux是使用bash这个shell这个默认的shell的,那它有哪些功能呢?,下面我就列举它的一些功能
当然,bash的功能还有很多,以上只是列举几个。
在我们执行的命令中,有一些是shell自带的,我们称之为内置命令,而有些命令则是程序员们为了更方便这工作,加进去的,我们称之为外部命令。
显然,内置命令的执行速度更快。内置命令是当我们登陆系统时,内置命令就被装入内存了,而外部命令则时只有在被调用时,才被装入内存。
例如,当我们输入一个命令,系统会先判断该命令是内置命令还是外部命令。如果是内置命令,则直接调用执行,否则会根据用户给出的路径或者系统环境变量中查找该命令,找到的话把它装入内存,然后在进行调用执行。说白了,外部命令其实就是一个可执行文件。
我们可以通过type命令来查看该命令是内置命令还是外部命令。
type [-tpa] name
参数:
不加任何参数时,type会显示出name是外部命令还是内置命令或是别名 -t: 加了-t后会以如下字眼显示它的意义: file:表示为外部命令。 alias:表示该命令为命令别名所设置的名称 builtin:表示为内置命令 -p: 如果给出的命令是外部命令,则显示其绝对路径 -a:在环境变量”PATH”指定的路径中,显示给定命令的信息,包括别名、路径。
测试用例如下所示:
vi为外部命令,cd为内置命令