Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不属于内核部分,而是在核心之外,以用户态方式运行。其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口。系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序。它的执行过程基本上按如下步骤: 
(1)读取用户由键盘输入的命令行。
(2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式。
(3)终端进程调用fork( )建立一个子进程。
(4)终端进程本身用系统调用wait4( )来等待子进程完成(如果是后台命令,则不等待)。当子进程运行时调用execve( ),
子进程根据文件名(即命令名)到目录中查找有关文件(这是命令解释程序构成的文件),将它调入内存,执行这个程序(解释这条命令)。
(5)如果命令末尾有&号(后台命令符号),则终端进程不用系统调用wait4( )等待,立即发提示符,让用户输入下一个命令,转⑴。
如果命令末尾没有&号,则终端进程要一直等待,当子进程(即运行命令的进程)完成处理后终止,向父进程(终端进程)报告,
此时终端进程醒来,在做必要的判别等工作后,终端进程发提示符,让用户输入新的命令,重复上述处理过程。

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。 shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。 有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。 shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。 shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。 一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

Linux Shell 工作原理相关推荐

  1. Linux下的Shell工作原理

    为什么80%的码农都做不了架构师?>>>    Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不 属于内核部分,而是在核心之外,以用户态方式运行.其基本功 ...

  2. Linux workqueue工作原理

    1. 什么是workqueue        Linux中的Workqueue机制就是为了简化内核线程的创建.通过调用workqueue的接口就能创建内核线程.并且可以根据当前系统CPU的个数创建线程 ...

  3. Linux workqueue工作原理 【转】

    转自:http://blog.chinaunix.net/uid-21977330-id-3754719.html 转自:http://bgutech.blog.163.com/blog/static ...

  4. 十个问题理解Linux epoll工作原理

    作者:dustinzhou,腾讯 IEG 运营开发工程师 epoll 是 linux 特有的一个 I/O 事件通知机制.很久以来对 epoll 如何能够高效处理数以百万记的文件描述符很有兴趣.近期学习 ...

  5. 十个问题理解Linux epoll工作原理:惊群,

    目录 Question 1:是否所有的文件类型都可以被 epoll 监视?不是 Question 2:ep->wq 的作用是什么? Question 3:什么是 epoll 惊群? Questi ...

  6. linux协议栈网桥部分之cam表操作,Docker网络基础 - Linux网桥工作原理与实现

    本文转载自微信公众号「Linux内核那些事」,作者songsong001 .转载本文请联系Linux内核那些事公众号. Linux 的 网桥 是一种虚拟设备(使用软件实现),可以将 Linux 内部多 ...

  7. linux find工作原理,Linux基础教程:find 与 xargs

    find 命令的工作方式 find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作. find命令异常强大,因为它允许您按文件名.文件类型.用户甚至是时间戳查找文件. ...

  8. linux jbd2工作原理,JBD2(journaling block device 2)系统分析(三)

    在上一节,我们说到journal_init(void)里用到的两个重要函数,一个是journal_init_caches()和jbd2_journal_destroy_caches(); 前者的实现在 ...

  9. linux+mmu工作原理,虚拟内存介绍及MMU工作原理(一)

    在linux,包括很多操作系统中,虚拟内存的概念十分重要.在使用windows的过程中,我们经常会遇到"虚拟内存不足"的提示,linux中有个所谓的swap分区,包括linux和u ...

最新文章

  1. apache2和jk和tomcat安装笔记-ubuntu
  2. 计划任务管理 之 计划任务工具 cron 的配置和说明
  3. Boost:自定义静态向量
  4. js 动态生成html(js根据后台返回数据生成html页面中的table标签)(转义字符)
  5. Python多线程好文
  6. apache 下载安装linux,linux下安装apache详解
  7. Object.prototype.toString方法
  8. 【QT】入门基础教程Qt5
  9. win10锁屏状态闹钟提示设置
  10. Spring的Bean生命周期
  11. 电脑怎么用计算机打开指令,电脑常用快捷键及命令
  12. qplot函数添加回归曲线R方方差分析表
  13. 字节和兆字节的换算_兆字节(MB)中有多少个字节?
  14. QFP、PQFP、LQFP、TQFP封装形式及PCB详解(转载)
  15. 常见路由器开源系统(固件)简介
  16. 华为防火墙USG5500的配置方法
  17. phpwind mysql 密码_PhpWind教程:MySQL数据库密码修改方法
  18. 8g内存学习计算机专业够吗,现在电脑内存一般多大_现在电脑内存8个g够吗
  19. 64位 RT-Thread 移植到 Cortex-A53 系统 bug 修复笔记
  20. hihoCoder #1246 王胖浩与环

热门文章

  1. 管理距离 路由与交换_动态路由选择原理(距离矢量路由协议RIP)
  2. Java项目接口安全_ESAPI安全开发实战
  3. SpringBoot中使用rabbitmq
  4. Data-truncation--Incorrect-string-value
  5. Spring Boot Bean的使用,@Repository,@Service,@Controller,@Component
  6. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)
  7. PHP中htmlentities跟htmlspecialchars的区别
  8. Python实战案例,requests模块,Python实现获取动态图表
  9. 真厉害用python只要50行代码爬取黑丝美眉纯欲高清图
  10. c语言二十四点游戏,C语言解24点游戏程序