Shell是什么?1分钟理解Shell的概念!
前言
在学习shell的时候对shell的概念,理解的还是有点不清晰,所以在网上有关shell的内容,百科的内容是真的不说人话。直至我找到了这篇文章,写的是通俗易懂,把各方面都涉及到了,把抽象的概念具体化,非常适合初学者进行阅读。
1. 开始了解shell
现在我们使用的操作系统(Windows、Mac OS、Android、iOS 等)都是带图形界面的,简单直观,容易上手,对专业用户(程序员、网管等)和普通用户(家庭主妇、老年人等)都非常适用;计算机的普及离不开图形界面。
然而在计算机的早期并没有图形界面,我们只能通过一个一个地命令来控制计算机,这些命令有成百上千之多,且不说记住这些命令非常困难,每天面对没有任何色彩的“黑屏”本身就是一件枯燥的事情;这个时候的计算机还远远谈不上炫酷和普及,只有专业人员才能使用。
图:早期的电脑,都是“黑纸白字”猛击《带你逛西雅图活电脑博物馆》可以欣赏更多早期的计算机。对于图形界面,用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。关于程序的运行原理,请猛击《载入内存,让程序运行起来》。换句话说,图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。然而,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁。如果你不了解操作系统的作用,请转到《操作系统是什么》。由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。你看,在用户和内核之间增加一层“代理”,既能简化用户的操作,又能保障内核的安全,何乐不为呢?用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做Shell。Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。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 就是一个“中间商”,它在用户和内核之间“倒卖”数据,只是用户不知道罢了。Shell 还能连接其它程序 在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令;有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令。Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。更加惊讶的是,Shell 还可以让多个外部程序发生连接,在它们之间很方便地传递数据,也就是把一个程序的输出结果传递给另一个程序作为输入。大家所说的 Shell 强大,并不是 Shell 本身功能丰富,而是它擅长使用和组织其他的程序。Shell 就是一个领导者,这正是 Shell 的魅力所在。可以将 Shell 在整个 Linux 系统中的地位描述成下图所示的样子。注意“用户”和“其它应用程序”是通过虚线连接的,因为用户启动 Linux 后直接面对的是 Shell,通过 Shell 才能运行其它的应用程序。
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 更是必不可少的,是必须掌握的技能,它使得我们能够自动化地管理服务器集群,否则你就得一个一个地登录所有的服务器,对每一台服务器都进行相同的设置,而这些服务器可能有成百上千之多,会浪费大量的时间在重复性的工作上。Shell 是一种脚本语言 任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。这个过程叫做编译(Compile),这样的编程语言叫做编译型语言,完成编译过程的软件叫做编译器(Compiler)。而有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。这个过程叫做解释,这样的编程语言叫做解释型语言或者脚本语言(Script),完成解释过程的软件叫做解释器。编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。
来源自: https://www.360kuai.com/pc/96255b8f73d5e4c34?cota=4&kuai_so=1&tj_url=so_rec&sign=360_57c3bbd1&refer_scene=so_1
这个比官方的好理解多了
3.再来点官方的概念
【一】 shell的含义:
首先shell的英文含义是“壳”;
它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核。Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息;
【二】shell在Linux中的存在形式:
由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面。这样,在Linux系统中,就出现了两种shell表现形式,一种是在无图形界面下的终端运行环境下的shell,另一种是桌面上运行的类似Windows 的MS-DOS运行窗口,前者我们一般习惯性地简称为终端,后者一般直接称为shell
【三】shell如何执行用户的指令
shell有两种执行指令的方式,第一种方法是用户事先编写一个sh脚本文件,内含shell脚本,而后使用shell程序执行该脚本,这种方式,我们习惯称为shell编程。第二种形式,则是用户直接在shell界面上执行shell命令,由于shell界面的关系,大家都习惯一行行的书写,很少写出成套的程序来一起执行,所以也称命令行。总结:shell可以说只是为用户与机器之间搭建成的一个桥梁,让我们能够通过shell来对计算机进行操作和交互,从而达到让计算机为我们服务的目的。以上。
来源自: https://www.cnblogs.com/tjudzj/p/7088543.html
Shell是什么?1分钟理解Shell的概念!相关推荐
- 【Shell 编程基础第一部分】Shell脚本HelloShell及简单的Shell基础
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/shell/759.html ☞ 点击订阅 ☜ ...
- 理解shell命名空间扩展
原文地址: Understanding Shell Namespace Extensions Windows Explorer provides a graphical representation ...
- Liunx中shell命令行和权限的理解
文章目录 前言 1.shell外壳的理解 2.关于权限理解 1.Linux下的用户 2.角色划分 3.文件和目录的权限 3.粘滞位 3.总结 前言 Linux中的操作都是通过在命令行上敲指令来实现的, ...
- 【Linux命令行与Shell脚本编程】第五章 理解 Shell 父子关系 后台进程 协程
Linux命令行与Shell脚本编程 第五章 理解 Shell 文章目录 Linux命令行与Shell脚本编程 五,理解 Shell 5.1,shell的类型 5.2,shell的父子关系 5.2.1 ...
- linux shell bin sh,linux shell中#bin/sh的理解
摘要 腾兴网为您分享:linux shell中#bin/sh的理解,支付旭尊,小熊到家,天天美剧,淘金宝等软件知识,以及维棠flv视频软件,usb抓包工具,红警2无敌,ucbug造梦西游4,壁纸工作室 ...
- 你是这样理解shell编程的嘛?
学习使用linux系统,绕不过去的就是shell脚本编程,在编写shell脚本之前.当然还要熟悉linux上的一些常用的命令(ls.mv.alias.cp.crontab.find.grep.mkdi ...
- Windows Shell编程-第七章.侵入Shell
第七章 侵入Shell 与所有其它Win32进程一样,Shell也有其自己的内存地址空间,这是其它应用完全不可知的地址空间.为了进入这个地址空间,我们必须传递一定数量的控制点,就象我们正在跨过国家边界 ...
- Linux shell 学习笔记(3)— shell 父子关系及内建命令
1. shell 类型 只要用户登录到某个虚拟控制台终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行. 默认的交互 shell 会在用户登录某个虚拟控制台终端或在 GUI 中 ...
- linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路
122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...
最新文章
- 手低眼高 初学者学习Hibernate的方法
- The Elements of Statistical Learning的笔记
- java 进程100_原创:如何排查java进程cpu100%的问题
- Kubernetes 系列(三):Kubernetes使用Traefik Ingress暴露服务
- swing和MySQL登录注册_JavaSwing+Mysql实现简单的登录界面+用户是否存在验证
- git clone 速度过慢
- Git入门教程(2)
- linux 版本信息 64位,Centos查看版本信息
- ​​​​​​​CUDA ---- Shared Memory
- 初学者Pytorch 和 Caffe 使用对比
- vue学习项目之去哪儿网笔记
- 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
- 客户说发货慢怎么回复_买家投诉卖家物流送货慢怎么处理
- 解决word文件另存为PDF时图片变模糊
- vue中使用 minix 混入
- 建站分享:调整WordPress自带标签云参数
- 关于IP网络号和主机号的原理
- extract($_POST, EXTR_SKIP)讲解
- Dart中常量构造函数
- 理解:L1正则先验分布是Laplace分布,L2正则先验分布是Gaussian分布——复习篇
热门文章
- Word中如何去掉换行符
- 微信小程序实现“转发给朋友”、“分享到朋友圈”
- 【LDPC编码】CDR系统中LDPC编码,LDPC编码的码长为9216
- kali渗透技术实战——搭建渗透测试环境
- 独立站案例分析,电子烟和盲盒品类独立站怎么玩? 收款有什么限制?
- 加密算法、散列算法、摘要、签名、证书、MD5、RSA、SSL通讯等等
- xcode php插件,H5项目开发iOS插件功能的实例代码
- 极客学院web前端学习笔记 (一)概况
- 转载--淘宝hadoop升级遇到的问题
- Postman接口Mock Server服务器设置