一、前言

  我们知道管理整个计算机硬件的其实是系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过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. 关于 'chromedriver' executable needs to be in PATH 的解决办法

    用 chrome 浏览器跑 selenium,执行以下脚本: from selenium import webdriverdr=webdriver.Chrome()dr.maximize_window ...

  2. Ambari 大数据集群管理

    最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复. 1前置配置 Centos7系统,每台系统都有java运行环境 全程使用root用户,避免安 ...

  3. 接口是用get还是post,如何选择?

    为了保证信息安全性,注册.登录等操作通常都会使用POST请求,GET请求一般用来获取信息 GET与POST的区别可以参考下方链接 https://www.cnblogs.com/hyddd/archi ...

  4. C++ string push_back()

    函数功能: 在后面添加一项 vector头文件的push_back函数,在vector类中作用为在vector尾部加入一个数据.string中的push_back函数,作用是字符串之后插入一个字符. ...

  5. CF-378 B.Semifinals

    题目意思:有n个参赛者,他们都需要参加两场半决赛.第一场半决赛的成绩依次是a1, a2, ..., an,分别对应第1-第n个人的成绩.第二场则是b1, b2, ..., bn.其中这两个序列都是以递 ...

  6. 1+x证书Web前端开发中级理论考试(试卷1)

    2019年下半年 Web前端开发中级 理论考试 (考试时间19:00-20:30 共150分钟,测试卷1) 本试卷共3道大题,满分100分. 请在指定位置作答. 一.单选题(每小题2分,共30小题,共 ...

  7. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...

  8. python asyncio run_until_complete

    import asyncio def callback(loop, i): print("success time {} {}".format(i, loop.time())) a ...

  9. 基于MicroPython:TPYBoard心率监测器

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 一.前言 这几年智能穿戴设备大火,尤其是手环类,从A ...

  10. gitLab 分支保护设置

    一.需求背景 开发当前开发的分支遇到暂时无法解决的问题,现在有需要开发其他应用,所以希望运维这边将当前有问题分支冻结,让其他人无法进行修改,待后续有时间在排查代码问题 二.Gitlab配置步骤 1.搜 ...