shell简介

Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

运行背景

a 一个基本的linux系统结构

b.由上图可以看出,shell 在系统中是处于中间层次的。他为用户和kernel的交互提供了一种方式,方案。

c.关于分层结构的众多优势:

1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。

缺点:

1、降低了系统的性能。

  2、有时会导致级联的修改

shell命令执行原理

表层理解   我们一般做法就是:打开终端,输入命令,敲回车,等待命令运行,得到结果

那么,对于这个过程进行细致的解析,又包含了哪些东西呢?

  打开终端,输入命令,敲回车----IO中断

  等待过程:

    shell分析命令及参数----shell(一个终端位置的解释性程序)

    fork拷贝附近成pcb相关资源,为命令执行做准备----系统调用

    exec在fork得到的子进程中执行命令

  执行完成,返回结果----堆栈保护,栈帧注:当执行命令如  ls  &

&符号表示该命令在后台执行,而当命令执行过程中,我们是无法仅需输入命令的,这是因为父进程在fork执行shell命令的同时,回执行wait等待子进程结束,除非用户主动Ctrl+C中止命令执行或者Ctrl+z置入后台执行。

参考http://my.oschina.net/u/866271/blog/232840

linux shell执行原理的更多相关文章

  1. linux shell执行方式

    linux shell执行有两种方式 shell脚本以#!/bin/bash开头,执行shell时先检查首行,在内部以下列方式执行: $/bin/bash script.sh 1. 使用sh执行. $ ...

  2. linux shell 执行命令顺序

    1.shell命令搜索顺序 在linux shell 中输入一个命令,如果有多个同名指令,shell需要按照一定规则去取优先级高的一个执行,shell命令的搜索顺序为: 1.别名,使用alias创建的 ...

  3. Linux Shell 工作原理

    Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口.系 ...

  4. linux shell执行中需要交互输入回车,Yes/NO Y/N

    最近写自动安装脚本遇到redis-server安装的时候,需要输入3个回车,对此尝试无果,最后google比较满意的解决办法: shell 脚本需要交互,比如输入回车,输入YES/NO Y/N之类进行 ...

  5. linux shell 执行多个命令的方法

    (1)在每个命令之间用:(分号)隔开. (2)在每个命令之间用&&隔开. &&表示:若前一个命令执行成功,才会执行下一个.这样,可确保所有的命令执行完毕后,其执行过程都 ...

  6. linux shell 执行远程命令

    我在本地的shell脚本中,想要直接执行远程服务器的一个shell脚本: ssh -l root 192.168.1.1 "/data/t.sh" 记得提前给远程服务器的 /dat ...

  7. [2019.03.20]Linux Shell 执行传参数和expr

    前不久入职实习生,现在在帮着组里面dalao们跑Case,时不时要上去收一下有木有Dump,每次敲命令太烦人于是逼着自己学写Shell脚本.一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息 ...

  8. Linux shell 执行修改配置文件中的内容

    在开发的过程中可能Linux环境不一致需要适应本地环境的HOME目录,可以通过脚本来修改配置文件内容,写一个test.sh的脚本 在脚本里写入以下命令 sed -i “s#ftfts_com_serv ...

  9. linux shell执行远程计算机上的命令或者脚本(ssh)

    大数据平台下经常建立设计多个节点的集群需要统一部署,这就设计到守护进程或者部署脚本在不同节点执行,如果能在master机器上,统一执行脚本,一次性启动整个集群的服务,感觉很nice.因为,分享如下内容 ...

随机推荐

  1. 04Add.ashx(新增班级)

    04Add.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  2. C#知识

    2018年10月29日 1.类可以定义的位置: (1)单独定义一个class,在program类的同一个文件内 (2)单独定义一个class,在program类的不同一个文件内 (3)类内定义clas ...

  3. python问答模块

    """ 该模块功能:获取用户的输入文本,通过输入文本和数据库中的关键主题文本相比较, 获取最佳的回答内容 """ import xlrd i ...

  4. __devexit_p的功能

    看驱动的时候,时常会有如下代码: .remove = __devexit_p(XX_exit), 这里的__devexit_p有什么作用呢? 我在include/linux/init.h中找到了它的定 ...

  5. 【css flex】将多个<div>放在同一行

    使用style里的flex属性 默认情况下,一个div独占一行 使用css选择器给外层div加上以下flex属性,则该div的子div可以在同一行中显示, .runs-paginator-flex-c ...

  6. linux中gdb的可视化调试

    今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成 ...

  7. git-【九】基本常用命令

    mkdir:         XX (创建一个空目录 XX指目录名) pwd:          显示当前目录的路径. git init          把当前的目录变成可以管理的git仓库,生成隐 ...

  8. MySQL多个相同结构的表查询并把结果合并放在一起的语句(union all)

    union all select *,'1' as category from table1001 where price > 10 union all select *,'2' as cate ...

  9. placement new--《C++必知必会》 条款35

    placement new是重载operator new的一个标准.全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本 ...

  10. mysql索引之哈希索引

    哈希算法 哈希算法时间复杂度为O(1),且不只存在于索引中,每个数据库应用中都存在该数据结构. 哈希表 哈希表也为散列表,又直接寻址改进而来.在哈希的方式下,一个元素k处于h(k)中,即利用哈希函数h ...