Linux shell指令运行的原理
shell是一种命令行解释器
对于一般用户,我们不能直接使用操作系统(kernel)。而是通过 kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
    为什么不能直接使用kernel?
    从 技 术 角 度 , Shell 的 最 简 单 定 义 : 命 令 行 解 释 器(command Interpreter)
主要包含:
    a. 将使用者的命令翻译给核心(kernel)处理。
    b. 同时,将核心的处理结果翻译给使用者。
    对于windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如如进入D盘的操作,我们通常是双击D盘盘符. 或者运行一个应用程序)。shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运用出结果,通过shell解析给用户。
shell的普遍作用
UNIX的shell程序解释用户的命令, Shell脚本是解释型的,而不是编译型的。除了向内核传送命令之外, shell的主要任务是提供一个可单独配置的使用shell资源配置文件的用户环境。
    shell任务的一个重要部分是搜索命令。 Bash是按照下一的步骤来完成的:检查命令是否包含斜杠。如果没有,首先检查函数列表是否包含一个我们寻找的命令。如果命令不是一个函数,那么在内建命令列表中检查。shell内建命令是指bash(或其它版本)工具集中的命令。一般都会有一个与之同名的系统命令,比如bash中的echo命令与/bin/echo是两个不同的命令,尽管他们行为大体相仿。当在bash中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。所以在bash中键入echo命令实际上执行bash工具集中的bash命令也就是内建命令,而不是/bin/echo这个系统命令。备注: Linux中的type命令如果命令既不是函数也不是内建命令,那么扫描列在 PATH 中的目录列表来进行查找。 Bash使用一个 hashtable ( 内存中的数据存放区域) 来记忆可执行文件的完整路径,这样能防止对 PATH 的扩展搜索。如果搜索没有成功, Bash打印一条错误消息并返回退出状态127。如果搜索成功或者命令包含一个斜杠, shell在一个单独执行环境中执行这个命令。如果因为文件是不可执行的或者不是一个目录造成执行失败,就假设是一个shell脚本。如果命令是异步开始的, shell会等待命令完成并收集它的退出状态。
    shell如何运行程序。shell用fork建立新进程,用execv函数簇在新进程中运行用户指定的程序,最后shell用wait命令等待新进程结束。 wait系统调用同时从内核取得退出状态或者信号序号以告知子进程是如何结束的。shell输出一个提示符,等待你输入一行命令,然后执行这个命令。待此命令执行终止,shell随后输出一个提示符,等待下一个输入的命令行。
以hello.c程序为例。首先,shell程序执行它的指令,等待我们输入命令。当我们在键盘上输入字符串”./hello“后,shell程序就逐一读取字符到寄存器,再把它存放到存储器中。当我们在键盘上敲回车时,shell就知道我们已经结束了命令的输入。然后shell执行一系列指令,这些指令将hello目标文件中的代码和数据从磁盘拷贝到主存,从而加载hello文件。数据包括最终会被输出的字符串”hello,world\n“。shell加载和执行hello程序,然后等待程序终止,hello程序在屏幕上输出他的信息,然后终止。shell随后输出一个提示符,等待下一个输入的命令行。
Linux shell指令运行的原理的更多相关文章
- linux shell 指令搜索顺序
		
在linux shell 中输入一个命令,如果有多个同名指令,shell需要按照一定规则去取优先级高的一个执行,shell命令的搜索顺序为: 1.别名,使用alias创建的命令. 2.关键字,如if, ...
 - Linux shell中运行命令后加上字符“&”的作用
		
上午登录服务器编译运行服务端程序的时候,学到了在命令后加上字符“&”后,退出shell,运行的命令可以继续运行.不解原因,并到网上搜索了以下,明白了点! 以下是搜索到的片段: & 放在 ...
 - Linux Shell中管道的原理及C实现框架
		
在shell中我们经常用到管道,有没考虑过Shell是怎么实现管道的呢? cat minicom.log | grep "error" 标准输入.标准输出与管道 我们知道,每一个进 ...
 - Linux Shell脚本Ldd命令原理及使用方法
		
1.首先ldd不是一个可执行程序,而只是一个shell脚本2.ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量如下:LD_TRACE_LOADED_OBJECTS.LD ...
 - Linux学习笔记之Linux shell脚本运行出现问题:bash: ./test: bin/sh: bad interpreter: No such file or directory
		
问题: 在Linux系统中使用“vi test.sh”命令创建.sh文件,保存文件(:wq)并赋予权限(chmod +x test.sh)后,执行(./test.sh),出现问题:“bash: ./t ...
 - Linux shell中运行命令后加上字符“&”的作用(转)
		
原文链接为:http://blog.sina.com.cn/s/blog_963453200102uya7.html & 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程, ...
 - linux shell 指令 诸如-d, -f, -e之类的判断表达式
		
文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tmp/ ...
 - Linux shell 批量运行jmeter脚本
		
第一版,这些代码有点问题,需要继续更改 #!/bin/bash jmxpath= reportpath= timestamp=$(date +%Y%m%d_%H%M%S) echo timestamp ...
 - linux shell 指令 诸如-d, -f, -e之类的判断表达式简介
		
一.文件比较运算符 1. e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ] 2. -d filename 如果 filename为目录,则为 ...
 
随机推荐
- C#用DesignSurface实现一个简单的窗体设计器
			
System.ComponentModel.Design.DesignSurface是为设计组件提供一个用户界面,通过它可以实现一个简单的窗体设计器. 在构建之前,我们需要引入System.Desig ...
 - SpringMvc拦截器小测试
			
前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作 ...
 - centos 把网卡名称修改为 eth0
			
默认网卡名称是 eno16777736 1.修改配置文件 ifcfg-eno16777736 [root@localhost ~]# cd /etc/sysconfig/network-scripts ...
 - noi 1.8 11图像旋转
			
水题不解释 其实我偷懒了 直接输出,,,,,,, 个人QQ:757394026团队QQ:466373640个人博客:www.doubleq.winc++/noi/信息学奥数博客:http://www. ...
 - 平面上的地图搜索--Java学习笔记(四)
			
版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 这一个月以来,都在学习平面上的地图搜索,主 ...
 - FineUIMvc随笔 - 动态创建表格列
			
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 用户希望实现动态创建表格列,在 WebForms 中,我们通过在 Page_Init 中创建列来实现: 但是在 MVC ...
 - 每天一个Linux命令(19)--find命令
			
linux 下 find 命令在目录结构中搜索文件,并执行指定的操作.Linux 下 find 命令提供了相当多的查找条件,功能很强大.由于 find 具有强大的功能,所以它的选项也很多,其中大部分选 ...
 - 一个chrome图片下载插件的开发过程
			
最近在做采集,发现用chrome的插件来下载整站也是一个不错的思路,所以想开发一个下载网页(仿站)的插件,学习过程如下: 首先查看一些文档资料 学习360翻译的开发文档:http://open.se. ...
 - 北邮OJ
			
90. 字符串转换 时间限制 1000 ms 内存限制 65536 KB 题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而" ...
 - Visual Studio 2017 Bugs
			
Crash report information: Problem signature: Problem Event Name: CLR20r3 Problem Signature 01: deven ...