【Linux】-- 认识bash shell
一、前言
我们知道管理整个计算机硬件的其实是系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们所想要达到的工作。那么Linux系统有多少shell可用呢?为什么我们要使用shell?下面分别来谈一谈。
二、什么是shell?
要弄明白shell是什么,首先要弄明白硬件、内核与shell的关联,如下图:
操作系统其实就是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测,若用户应用不当,将会使得整个系统崩溃,所以当然不能够随便被一些没有管理能力的终端用户随意使用。但是总是需要让用户操作系统的,所以就有了在操作系统上发展的应用程序。用户可以通过应用程序来指挥内核,让内核达到我们所需要的硬件任务。因为应用程序在操作系统角色图中的最外层,就如同鸡蛋的外壳一样,因此这个也就被称为shell。
是不是所用的应用程序都可以称为shell呢?当然不是,我们还需要从功能来对shell进行定义,shell的功能只是提供用户操作系统的一个接口,因此这个接口要能调用其他的软件才行,例如vi,mkfs等命令其实都是独立的应用程序,但我们能通过shell(就是命令行模式)来操作这些应用程序,让这些应用程序调用内核来运行所需的工作。shell就是一个命令解释器。现在是不是有些理解了?
那么我现在来对什么是shell做一个总结
只要能够操作应用程序的接口都能够称为shell。狭义的shell指的是命令行方面的软件,包括之后我们介绍的bash等。广义的shell则包括图形界面的软件,因为图像界面其实也能够操作各种应用程序来调用内核工作。
那么接下来我们对shell进行分类
从界面角度来看,shell分为图形化界面shell(例如windows explorer,Linux下的kDE、GNOME)和命令行界面shell。
这是百度百科对于explorer的解释
explorer.exe进程为用户提供了图形用户界面(也称为图形壳),Explorer 图标简单的说就是用来显示系统的桌面环境,包括桌面图标和文件管理。另外请不要将此进程与浏览器进程(iexplore.exe)混淆。
从使用角度来看,shell分为交互式和非交互式。
交互式:在shell中键入指令,计算机执行指令返回结果,这种一问一答的方式就是交互式shell。
非交互式:我们将一些命令写在文件中,shell读取这些文件中的命令,并将这些命令进行执行,当shell执行到文件末尾就完成了它的任务退出。我们常用的shell脚本就是非交互式shell
三、为什么要学习命令行界面的shell?
1、操作统一化
尽管有很多软件(如Linux下的X window)可以帮助我们很简单的设置好我们的主机,尽管它们界面亲善,功能强大。但不同的软件使用起来是有差异的,即使是相同的软件也是会有版本差异的,甚至不同的linux发行版所设计的x window界面也都不相同,这样会造成学习方面的困扰。
命令行shell不同,几乎所有Linux发行版使用的bash都是一样的,这样就可以轻松切换不同的发行版,做到“一法通、万法通”。
2、远程管理速度快
Linux的管理经常需要通过该远程连接,而联机时命令行界面的传输速度一定比较快,而且,较不容易出现断线或者是信息外流的问题。
3、Linux的核任督二脉:shell
学习shell的好处多多,如果你是个系统管理员,或者有心要管理系统的话,那么shell与shell script真的有必要看一看,它就像“打通任督二脉,任何武功都能随你应用”一样。
四、bash shell的功能
既然bash是Linux默认的shell,那么这个shell有什么好处,为什么Linux要使用它作为默认的shell呢?bash主要的优点有下面几个:
1、命令记忆功能
只有在命令行中按上下键就可以找到前/后一个输入的命令,默认的命令记忆功能可以达到1000个,这些命令记录放在主文件夹内的.bash_history中。
2、命令与文件补全功能(tab键)
3、命令别名设置功能(alias)
查看系统内所有别名:
给命令ls -al设置别名la:
4、作业控制台、前台、后台控制
这一部分后面在文章:Linux过程控制中在详细介绍。
5、程序脚本(shell script)
将平时管理系统常需要执行的连续命令写成一个文件,该文件并且可以通过交互的方式来进行主机的检测工作。也可以通过shell提供的环境变量及相关命令来设计。相当于一个小型的程序语言,功能相当强大。
6、通配符
除了完整的字符串之外,bash还支持许多通配符来帮助用户查询与命令执行。
举例:使用“ls-l /usr/bin/X*,可以知道/usr/bin下面有多少以X开头的文件。
五、bash shell的内置命令
输入man bash可以查看bash的说明文档,如果你浏览过这个文档,你会发现这个说明文档中有其它的文件说明,举例来说,cd命令的说明就在这个文档中,这是因为为了方便shell的操作,bash已经“内置”了很多命令,例如上面提到的cd。
通过type命令可以知道每个命令是来自于外部命令(指的是其他非bash所提供的命令)或是内置在bash中的命令。
利用type找到后面的名称时,如果后面接的名称并不能以执行文件的状态被找到 ,那么该名称是不会被显示出来的。也就是说type找的是“执行文件”而不是一般的文件名,这也进一步说明了上面说的每一个命令都是一个应用程序。