一、前言

  我们知道管理整个计算机硬件的其实是系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过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找的是“执行文件”而不是一般的文件名,这也进一步说明了上面说的每一个命令都是一个应用程序。

【Linux】-- 认识bash shell的更多相关文章

  1. linux之bash shell

    GNU bash ======================================================== 通常计算机硬件是由运算器.控制器.存储器.输入/输出设备等等这些物理 ...

  2. 【Linux】bash shell学习

    Bash Shell Linux系统的合法shell都写入/etc/shells这个文件,默认使用的shell版本称为“Bourne Again Shell(简称bash)” 用户登录时系统会分配一个 ...

  3. Linux的Bash Shell详解

    一.Bash Shell概述 1.什么是bash         bash是Bourne Again Shell的简称,是从unix系统中的sh发展而来的,是用户和Linux内核交互的工具,用户通过b ...

  4. ubantu linux的bash shell初接触

    本人是Linux初习者,同时也刚刚开始学习,将我的学习成长记录下来,来和大家一同分享! 我用的系统是Ubuntu 12.04,脚本编辑器用的是VIM,觉得很顺手!Shell语言用的是Bash Shel ...

  5. 如何在Windows 10安装和使用Linux的Bash shell

    转载自:百度经验 Windwos 10 的周年更新为开发人员提供一个大的新功能:一个完整的,基于Ubuntu的Bash shell中,可以直接在Windows上运行Linux软件. 这使得“Linux ...

  6. Linux下Bash shell学习笔记

    原文地址: http://www.cnblogs.com/NickQ/p/8870423.html 1.shell下没有变量类型和定义的概念. 变量直接使用不用定义 所有值都视为字符串. 在对变量取值 ...

  7. Linux之bash shell的学习

    1.什么是bash  shell bash 是Bourne Again Shell的简称,是从unix系统中的sh发展而来,是用户和偶Linux内核交互的工具,用户通过bash操作内核完成系统的使用和 ...

  8. linux 10 -Bash Shell编程

    二十三. Bash Shell编程:     1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后 ...

  9. Linux中bash shell环境变量

    别名 别名是命令的快捷方式.为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用.语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令.重要的 ...

  10. Linux系统bash shell之历史命令

    1.相关变量: HISTSIZE: 定义命令历史记录的条数 HISTFILE: 定义命令储存的文件,一般是 ~/.bash_history HISTFILESIZE: 定义了历史文件记录历史的条数 H ...

随机推荐

  1. (三)Amazon Lightsail 部署LAMP应用程序之连接到Lightsail数据库

    连接到Lightsail数据库 简介:应用程序的Web前端的第一次迭代不建议固有的可伸缩性,因为数据库和前端位于同一台机器,只需要额外的前端容量,添加额外的数据库实例就会出现问题,若想解决此问题,需要 ...

  2. CF343D Water Tree 树链剖分

    问题描述 LG-CF343D 题解 树剖,线段树维护0-1序列 yzhang:用珂朵莉树维护多好 \(\mathrm{Code}\) #include<bits/stdc++.h> usi ...

  3. 【day02】Xhtml

    一.HTML实体(HTML Entites) 1.HTML实体:W3C规定在浏览器看到的特殊符号必须用HTML实体  单引号(') ===== '  双引号(") ===== "  ...

  4. ORB-SLAM2 地图保存

    一.简介 在ORB-SLAM2的System.h文件中,有这样一句话:// TODO: Save/Load functions,让读者自己实现地图的保存与加载功能.其实在应用过程中很多场合同样需要先保 ...

  5. 公式推导【BACF//ICCV2017】

    HK Galoogahi, A Fagg, S Lucey. Learning Background-Aware Correlation Filters for Visual Tracking[C]. ...

  6. 理解CMS GC日志

    本文翻译自:https://blogs.oracle.com/poonam/entry/understanding_cms_gc_logs 准备工作 JVM的GC日志的主要参数包括如下几个:-XX:+ ...

  7. ELK 框架整体流程编写 以及logstash脚本编写

    Elasticsearch Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析.它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引 ...

  8. date——系统时间的命令

    这是一个可以用各种姿势获得各种时间的命令.最近在写自动化定时脚本时学了一下. 参考:https://www.cnblogs.com/ginvip/p/6357378.html 比如: 利用cronta ...

  9. 一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(下)

    接着上一篇:一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(上) 直接贴代码了: using System; using System. ...

  10. 《数据结构》《C++程序设计》《计算机组成原理》中的英语名词

    一.数据结构 data 数据data element 数据元素data item 数据项data object 数据对象data structure 数据结构ADT (Abstruct Date Ty ...