shell编程 --- Shell入门介绍

排好队,跟我一起涨知识

什么是Shell?Shell的中文意思是“外壳”,至于啥是Shell,你确定你真的知道?今天,我们就来谈谈,什么是Shell,它是干嘛的,有哪些优点…

首先说说Shell、内核与硬件的关系

当我们要让计算机为我们做一件事情的时候,其实真正帮我们把事情给完成好的是硬件这个家伙。例如,当你要计算 a + b = ?的时候,我们都知道是通过各种电路、芯片等的配合来完成的。硬件这个家伙虽然干活强,但是头脑可能并不是很管用,计算a+b这些指令的时候,它并不知道执行的顺序

这个时候内核就出场了,它指挥着硬件如何工作。也就是说,用户输入一段命令,内核根据这条命令来指挥硬件如何工作。不过很遗憾,内核这家伙藏的比较深,用户是很难与内核直接沟通的。内核管理的东西太多了,拥有的权力太大了,如果用户叫内核干嘛,内核就干嘛的话,万一用户一不小心胡乱操作,可能会导致操作系统奔溃的。

说这么多,其实就是想说用户一般情况下用户无法与内核直接交流。

这个时候,Shell就出场了,也就是说,用户输入命令,Shell对用户输入的命令进行解释,然后提交给内核,内核再指挥硬件正确着工作。

这就是这三个家伙的关系。如下图:

其实用户想要通过计算机来完成某些工作,总不能直接来操作系统吧?但用户又必须通过操作系统来完成我们的任务。这个时候用户一般是通过所谓的应用程序来操作内核,然后让内核来指挥硬件。我们都知道,应用程序在操作系统中是处于最外层的,就像鸡蛋的外壳一样,因此也就被称之为Shell

也就是说,Shell的功能只是为用户操作系统提供一个接口。只要能够操作应用程序的接口我们都称之为Shell。侠义的Shell指的是命令行类的软件。广义的Shell还保存那些图形界面的软件。

学习Shell有哪些好处呢

有些人可能会觉得现在已经有好多图形界面的工具可以来操作我们的系统了,为啥还要学习Shell呢?其实Shell的优点多到数不清,我就暂时列举几个。

  • 与图形界面相比,Shell命令行下的执行效率更高,不信你打开你window下的命令行去删除一个软件试试。
  • 学了Shell,装逼也高格了,当然指的是装给外行人看,如果有个女同学叫你帮个忙,你用命令行来操作她的电脑,分分钟成为她的大神。
  • 功能更加强大,有些操作可能在图形界面不好操作,说个简单的,例如你想查看你电脑端口的监听情况等,用命令行分分钟的事。
  • 可以远程操作Linux服务器,这个可以说用的可多的,通过远程工具来操作你的服务器,你总不能要求用界面的来操作吧?

好吧,我就不在列举了。总之,作为一个程序员,学点Shell是必须的。

Shell的种类

虽然一直说是Shell,但是Shell有挺多种的。例如Bourne Shell(sh), Sun里头默认的C Shell, 商业上常用的K Shell等。每一个Shell都有各自的特点,语法上也有一些差别。Linux里使用的这一种版本就称之为”Bourne Again Shell(简称bash)”,这个是Bourne Shell的增强版,算是用的人比较多。还有那个C Shell因为语法与C类似,因此也比较出名,用的人也比较多。 不过我们讲的主要以bash为主。

bash有哪些功能?

Linux是使用bash这个shell这个默认的shell的,那它有哪些功能呢?,下面我就列举它的一些功能

  • 命令记忆能力 不得不说,命令记忆能力是一个很棒的功能,例如我们可以通过上下按键来找到前后一个输入的命令,这可以让我们进行更高效的操作。而且我们可以通过历史命令来进行排错,当我们系统除问题什么的时候,我们可以通过查看我们的历史命令,看看我们之前都执行了什么命令,来定位出错的原因。 不过这些命令都被存在哪里呢?其实这个命令就在你的主文件夹内的.bash_history文件里,不过需要注意的是,~/.bash_history记录的是前一次登陆以前所执行过的命令,而这一次登陆所执行的命令都被暂存在内存中,当你成功注销系统后,这些命令才会被记录到.bash_history里。当然,你也可以强行把这些命令更新的.bash_history里。
  • 命令与文件补全功能 这个功能也是很好用的,可以帮助我们少打些字,也去让我们输入的命令更见准确。例如: (1).[tab]接在一串命令的第一个字的后面,则为命令补全 (2).[tab]接在一串命令的第二个字以后时,则为文件补全 (3).连续按两次[tab]可以显示所有可以执行的命令,要想系统中有多少以c开头的命令,直接c[tab][tab]。
  • 命令别名的设置(alias) 给一个命令设置一个别名,可以把指令设置成符号我们习惯的名字,更好的记忆,而且可以把复杂的指令简单化。
  • 程序脚本(shell script) 通过Shell来写一个脚本,可以更方便我们执行工作,例如我们可以把进行需要连续用到的命令写成一个脚本文件。

当然,bash的功能还有很多,以上只是列举几个。

下面我们看看内置命令与外部命令

在我们执行的命令中,有一些是shell自带的,我们称之为内置命令,而有些命令则是程序员们为了更方便这工作,加进去的,我们称之为外部命令。

显然,内置命令的执行速度更快。内置命令是当我们登陆系统时,内置命令就被装入内存了,而外部命令则时只有在被调用时,才被装入内存。

例如,当我们输入一个命令,系统会先判断该命令是内置命令还是外部命令。如果是内置命令,则直接调用执行,否则会根据用户给出的路径或者系统环境变量中查找该命令,找到的话把它装入内存,然后在进行调用执行。说白了,外部命令其实就是一个可执行文件。

我们可以通过type命令来查看该命令是内置命令还是外部命令。

type [-tpa] name

参数:

不加任何参数时,type会显示出name是外部命令还是内置命令或是别名 -t: 加了-t后会以如下字眼显示它的意义: file:表示为外部命令。 alias:表示该命令为命令别名所设置的名称 builtin:表示为内置命令 -p: 如果给出的命令是外部命令,则显示其绝对路径 -a:在环境变量”PATH”指定的路径中,显示给定命令的信息,包括别名、路径。

测试用例如下所示:

vi为外部命令,cd为内置命令


原文发布于微信公众号 - 苦逼的码农(di201805)

原文发表时间:2018-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Silverlight 2.0细节

平台/浏览器/设备: --支持Linux(将由Novell提供) --支持FireFox --支持移动设备 兼容性: --Silverlight 2...

20190
来自专栏北京马哥教育

成吨提高开发效率的终极武器——自己开发workflow

之前我写过一篇关于提高 Mac 开发效率的文章,里面介绍了很多大幅度提升Mac开发效率的方法,遗憾的是那篇文章里并没有介绍 Alfred 这款神器。 然而转念一...

32840
来自专栏FreeBuf

Office 365中的0-day漏洞baseStriker出现在野利用实例

5 月 1 日,Avanan 的研究人员发现 Office 365 中出现了一个名为 baseStriker 的 0-day 漏洞。攻击者可利用这个漏洞发送恶意...

14740
来自专栏Debian社区

基于 Qt 的开源笔记软件 VNote 1.11.1 发布

新年伊始,VNote发布小更新v1.11.1。顾名思义,这次更新将会很“小”,主要是修复已知问题。当然,这次更新也有值得大家浪费带宽下载的地方:

23320
来自专栏python开发者

Linux及文件系统基本介绍

Linux及文件系统基本介绍 1   互联网行业现状 在服务器端市场: 超级计算机 2014年11月的数据显示前500系统中的485个系统都在运行着 Linu...

28870
来自专栏Python中文社区

Python微博移动端爬虫实例

專 欄 ❈ 作者:麦艳涛,挖掘机小王子,数据分析爱好者。 ❈ 本文简要讲述用Python爬取微博移动端数据的方法。可以看一下Robots协议。另外尽量不要爬取...

28850
来自专栏玄魂工作室

【翻译】用SettingContent-ms绕过ASR和Office2016的OLE阻止功能执行命令

原文链接:https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d3...

12830
来自专栏一名叫大蕉的程序员

分布式文件系统.get(V2)No.106

2018年9月28号,我估计会记得很久这一天,因为那天刚刚好是我来西厂的一周年,那天刚刚好是农历生日,刚刚好那天晚上我挖了一个大坑,跟遣怀师兄和小美姐姐一起填坑...

12820
来自专栏phodal

\b深入浅出全栈工程师: 提高效率的工具

节选自《Growth: 深入浅出全栈工程师》 在提交效率的N种方法里:有一个很重要的方法是使用快捷键。熟练掌握快捷键可以让我们随着自己的感觉编写程序——有时候如...

20660
来自专栏用户2442861的专栏

window 下 pycharm的安装以及 教程(一)安装和首次使用

http://blog.csdn.net/chenggong2dm/article/details/9365437

80610

扫码关注云+社区

领取腾讯云代金券