摘录自博客链接地址:http://c.biancheng.net/view/706.html
1. Shell是什么?
答:shell本意是指壳,在计算机术语中,shell是指用户操作接口的意思。操作系统运行起来后都会给用户提供一个操作接口,这个操作接口就叫shell。
用户可以通过shell来调用操作系统内部的复杂实现。
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 本身并不是内核的一部分,它只是在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。
然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。
2. Shell的分类?
答:常用的Shell功能有两种形式外在形式:GUI和cmdline
(1)GUI(图形用户界面),特点是操作简单、易学易用,适合使用电脑来工作的人。
(2)cmdline(命令行界面),譬如linux的终端和windows的cmd,特点是不易用易学,优点是可以进行方便的shell编程,适合做开发的人。
用户界面和命令行就是这个另外开发的程序,就是“代理”作用。在Linux下,这个特定程序叫做 Shell。
3. 为什么需要Shell?
答:1. 因为计算机程序本身很复杂,操作系统内部功能的实现和外面接口的调用必须分开。
操作接口本身就是对内部复杂功能实现的一种封装,外部只需要通过操作接口就可以很容易去调用操作系统内部功能,但是却不用理会内部功能实现的复杂性和原理。
2. 由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;
该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。
4. Shell 是如何连接用户和内核的?
答:Shell 能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,
这就是大部分读者对 Shell 的认知。你看,我一直都在使用 Shell,哪有使用内核哦?我也没有看到 Shell 将我和内核连接起来呀?!
其实,Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。我们运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏了起来,它自己在背后默默进行,我们看不到而已。接口其实就是一个一个的函数,使用内核就是调用这些函数。这就是使用内核的全部内容了吗?嗯,是的!除了函数,你没有别的途径使用内核。
比如,我们都知道在 Shell 中输入cat log.txt命令就可以查看 log.txt 文件中的内容,然而,log.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?
这些底层细节 Shell 统统不知道的,它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,然后内核就乖乖地按照 Shell 的吩咐去读取文件了,
并将读取到的文件内容交给 Shell,最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。整个过程中 Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。
5. Shell 也支持编程
Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程,这和使用 C++、C#、Java、Python 等常见的编程语言并没有什么两样。
Shell 虽然没有 C++、Java、Python 等强大,但也支持了基本的编程元素,例如:
if...else 选择结构,case...in 开关语句,for、while、until 循环;
变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)。
站在这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。我们平时所说的 Shell,有时候是指连接用户和内核的这个程序,有时候又是指 Shell 编程。
Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件,例如检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。
使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。
尤其是 Linux 运维工程师,Shell 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器。
6. Shell 是一种脚本语言
任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。
编译型语言:有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。
脚本语言:有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。
编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。
脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。
Shell就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。
Android面试05-跨进程通信IPC他是谁?哪里需要用到多进程?1.序列化1.serializable和parcelable区别2.Binder1.定义1.从IPC角度来说2.从Android Framework角度来说3.从Android应用层来说2.架构3.优点3.Android 中的IPC方式他是谁?IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信windows IPC机制剪贴板,管道,邮槽Linux IPC机制命名管道,共享内容,信
vs与qt项目总结1.PDB文件无法找到:(IntDir)vc(IntDir)vc(IntDir)vc(PlatformToolsetVersion).pdb (OutDir)(OutDir)(OutDir)(TargetName).pdb2.Excel的头文件:#include<ActiveQt/QAxObject>3.以控件名字命名的槽函数,不需要再连接,否则是连接两次,...
Spring项目集成Spring-Session以及可能遇到的问题
理学博士,副教授,硕士生导师办公电话: +86-10-82805281 电子邮箱:[email protected]学习经历2015.9-2016.9 德国康斯坦茨大学化学生物学与药理学系 访问学者2013.8-今 北京大学药学院 药物化学系副教授,硕士生导师;2007.8-2013.7北京大学药学院 药物化学系讲师;2002.9-2007.7...
Generative Adversarial Imitation Learning 2016 NIPS Paper精读,结合GAN思想进行指导的Imitation Learning
[[email protected] ~]# mysql_secure_installation-bash: mysql_secure_installation: 未找到命令出现这种情况,请将命令修改为:mariadb-secure-installation
????前言???? C语言学的怎么样,做个小项目检验自己的能力吧。通过这个游戏你能学到什么?·二维数组的创建与使用·自定义函数的设计与使用·递归(深度优先搜索思想)
一:java转型大数据“2019年可能会是过去十年里最差的一年,但却是未来十年里最好的一年”。市场发展的受限,不仅波及了各个行业的从业者,就连IT领域也受到了影响,很多IT人开始寻找新的出路,其中,很多java程序员将转型大数据看成是迎接“春天”的一个契机,其原因究竟是什么呢?在资本“寒冬”的影响下,互联网巨头们纷纷的传出缩招的消息,像阿里、京东等。而像华为这样的企业,也曾传出了停止社...
vue使用element的upload组件保存到springboot静态资源,网页可访问(超详细)安装element ui组件vue界面使用upload上传组件springboot后端保存到静态资源以及请求地址编写保存到静态资源类controller类编写注意 注意·······以下为效果图安装element ui组件详细方法参考官网如使用npm过慢或者失败可以使用cnpm安装vue界面使用upload上传组件参考官网代码,界面写上代码<template> <div clas
1 依赖倒置模式 (DIP)稳定不依赖于变化,提出了抽象类。2 开放封闭原则(OCP)对扩展开放,对更改封闭类模块应该是可扩展,不可修改的3 单一职责原则 (SRP)类里面不要放太多的成员,这代表这个类里面隐含了多个责任。4 Liskov替换原则(LSP)5接口隔离原则(ISP)接口应该小而完备 注意public、private、protected的使用。6 优先使用对象组合而不是类继承7 封装变化点使用封装来创建对象之间的分界层。8 针对接口编程,而不是针对实现编程。...
关于浏览器缓存浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能。但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据。像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的。今天主要介绍清除缓存的几种方法。清理网站缓存的几种方法Meta HTTP-EQUIV="pragma" CONTENT="no-cache">...
最近看到用py开发打飞机游戏,于是就需要pygame插件包。python的pip工具有点像是iphone的apple store,如果安装Python的的插件和其他开源框架的时候,一般都要用pip和dos命令安装。python2.7以上的版本都自带pip工具,但是版本都是10.0不支持python3.7 所以如果是python2.7以下版本的需要重新安装pip https://pypi...