当前位置: 首页 > 编程日记 > 正文

Linux下的Shell工作原理

为什么80%的码农都做不了架构师?>>>   hot3.png

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实现),结束登录。
    技术交流qq:2905283896
    更多详细信息请登录:www.edu118.com

转载于:https://my.oschina.net/u/866271/blog/232840

相关文章:

C++/C++11中头文件functional的使用

<functional>是C标准库中的一个头文件&#xff0c;定义了C标准中多个用于表示函数对象(function object)的类模板&#xff0c;包括算法操作、比较操作、逻辑操作&#xff1b;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(functi…

飞天AI平台到底哪里与众不同?听听它的架构者怎么说

采访嘉宾 | 林伟 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 天下没有不散的宴席。 9 月 25 日&#xff0c;云栖大会在云栖小镇开始&#xff0c;历经三天的技术盛宴&#xff0c;于 9 月 27 日的傍晚结束。 三天、全球6.7万人现场参会、超1250万人…

浅谈 sessionStorage、localStorage、cookie 的区别以及使用

1、sessionStorage、localStorage、cookie 之间的区别 相同点 cookie 和 webStorage 都是用来存储客户端的一些信息不同点 localStorage localStorage 的生命周期是 永久的。也就是说 只要不是 手动的去清除。localStorage 会一直存储 sessionStorage 相反 sessionStorage 的生…

任务栏窗口和状态图标的闪动 z

Demo程序&#xff1a; 实现任务栏窗体和图标的闪动&#xff1a; 整个程序是基于Windows Forms的&#xff0c;对于任务栏右下角状态图标的闪动&#xff0c;创建了一个类型&#xff1a;NotifyIconAnimator&#xff0c;基本上是包装了Windows Forms中的NotifyIcon类型&#xff0c;…

深度学习中的最大似然估计简介

统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。点估计&#xff1a;点估计试图为一些感兴趣的量提供单个”最优”预测…

简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

&#xff08;图片付费下载自视觉中国&#xff09; 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 【导读】 TensorFlow 2.0 于近期正式发布后&#xff0c;立即受到学术界与科研界的广泛关注与好评。此前&#xff0c;AI 科技大本营曾特邀专家回顾了 Te…

常见运维漏洞-Rsync-Redis

转载于:https://blog.51cto.com/10945453/2394651

zabbix笔记

&#xff08;1&#xff09;转载于:https://blog.51cto.com/zlong37/1406441

C++/C++11中头文件algorithm的使用

<algorithm>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的基础性的算法(均为函数模板)。<algorithm>定义了设计用于元素范围的函数集合。任何对象序列的范围可以通过迭代器或指针访问。 std::adjacent_find&#xff1a;在序列中查找第一对相邻且值…

js filter 用法

filter filter函数可以看成是一个过滤函数&#xff0c;返回符合条件的元素的数组 filter需要在循环的时候判断一下是true还是false&#xff0c;是true才会返回这个元素&#xff1b; filter()接收的回调函数&#xff0c;其实可以有多个参数。通常我们仅使用第一个参数&#xff…

每30秒学会一个Python小技巧,GitHub星数4600+

&#xff08;图片付费下载自视觉中国&#xff09;作者 | xiaoyu&#xff0c;数据爱好者来源 | Python数据科学&#xff08;ID:PyDataScience&#xff09;很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题&#xff0c;有些问题并不是很难的问题&#xff0c;或者已经…

Nginx自定义模块编写:根据post参数路由到不同服务器

Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器&#xff0c;然而当我们需要根据http包体来进行请求路由时&#xff0c;Nginx默认的配置规则就捉襟见肘了&#xff0c;但是没关系&#xff0c;Nginx提供了强大的自定义模块功能&#xff0c;我们只要进行需要的扩…

深度学习中的贝叶斯统计简介

贝叶斯用概率反映知识状态的确定性程度。数据集能够被直接观测到&#xff0c;因此不是随机的。另一方面&#xff0c;真实参数θ是未知或不确定的&#xff0c;因此可以表示成随机变量。在观察到数据前&#xff0c;我们将θ的已知知识表示成先验概率分布(prior probability distr…

少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 黄海广来源 | 机器学习初学者&#xff08;ID: ai-start-com&#xff09;知识更新非常快&#xff0c;需要一直学习才能跟上时代进步&#xff0c;举个例子&#xff1a;吴恩达老师在深度学习课上讲的TensorFlow使用&#xf…

有状态bean与无状态bean

在学习bean的作用域的时候&#xff0c;了解了这个问题。 bean5种作用域&#xff1a;分别是&#xff1a;singleton、prototype、request、session、gloabal session 接下来就讲一下有状态bean与无状态bean&#xff1a; 有状态会话bean &#xff1a;每个用户有自己特有的一个实例…

从Developer Removed From Sale 回到可下载状态的方法

2019独角兽企业重金招聘Python工程师标准>>> 如果你不小心点了”Remove“ 按钮&#xff0c;App的状态会变成"Developer Removed From Sale "&#xff0c;这时&#xff0c;即使更新应用也无法改变这个状态。想要让App恢复可下载状态&#xff0c;你需要尝试…

朴素贝叶斯分类器简介及C++实现(性别分类)

贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器。在机器学习中&#xff0c;朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。朴素贝叶斯是文本分类的一种热门(基准)方法&#xff0c;文本分类是以词频为特征判断文件所属类别或…

你当年没玩好的《愤怒的小鸟》,AI现在也犯难了

&#xff08;图片源自百度百科&#xff09;作者 | Ekaterina Nikonova&#xff0c;Jakub Gemrot译者 | Tianyu出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;现在说起《愤怒的小鸟》游戏&#xff0c;要把人的回忆一下拉扯到差不多十年前了。它是一款当时一经推出就广…

msf反弹shell

今天回顾了一下msf反弹shell的操作&#xff0c;在这里做一下记录和分享。(&#xffe3;︶&#xffe3;)↗ 反弹shell的两种方法 第一种Msfvenom实例&#xff1a; 1、msfconsole    #启动msf 2、msfvenom -p php/meterpreter/reverse_tcp LHOST<Your IP Address> LPOR…

mysql 5.5半同步复制功能部署

安装、配置Semi-sync Replication在两台主机上安装好MySQL5.5&#xff0c;编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下&#xff08;默认是/usr/local/mysql/lib/plugin&#xff09;。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql&#xff0c;则有&…

Windows7/10上配置OpenCV3.3.0-Python3.6.2操作步骤

目前OpenCV无论是2.4.x还是最新的3.3.0版本&#xff0c;默认支持的都是Python 2.7版本。这里介绍下如何使OpenCV 3.3.0支持Python 3.6.2的操作步骤&#xff1a;1. 从 https://github.com/opencv/opencv/releases/tag/3.3.0 下载3.3.0.zip或opencv-3.3.0-vc14.exe&#xff0c;…

manage.py命令

一、manage.py命令选 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件&#xff0c;需要通过python命令执行。manage.py接受的是Django提供的内置命令。 内置命令包含 checkdbshelldiffsettingsflushmakemigrationsmigraterunservershellstartappstartproject…

图灵奖得主Bengio再次警示:可解释因果关系是深度学习发展的当务之急

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Will Knight译者 | Monanfei来源 | Wired出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;深度学习擅长在大量数据中寻找模式&#xff0c;但无法解释它们之间的关系。图灵奖获得者 Yoshua Bengio 希望改变这一状…

解决jQuery不同版同时引用的冲突

今天研发的同事在开发一个新jQuery插件时&#xff0c;遇到一个揪心的问题。平台以前使用的 jQuery版本是1.2.6&#xff0c;偶&#xff0c;天啊&#xff01;这是古代的版本啊&#xff01; 由于很多功能基于老版本&#xff0c;不能删除啊&#xff0c;同志们都懂的&#xff01; 于…

TensorFlow中的计算图

作者 | stephenDC来源 | 大数据与人工智能&#xff08;ID:ai-big-data&#xff09;1 什么是计算图&#xff1f;一个机器学习任务的核心是模型的定义以及模型的参数求解方式&#xff0c;对这两者进行抽象之后&#xff0c;可以确定一个唯一的计算逻辑&#xff0c;将这个逻辑用图表…

java设计模式-适配器模式

模式导读: 每个人都有自己不同的需要&#xff0c;每个人都有自己能够接受的不同方式&#xff0c;就像是为满足现在快速度发展的社会&#xff0c;几乎人人离不开手机的时代&#xff0c;我们也许会碰到在外出行手机电量不足的情况&#xff0c;这个时候如果你在车站&#xff0c;你…

Ubuntu 14.04 64位上安装Valgrind 3.13.0 操作步骤

关于Valgrind的介绍和使用可以参考&#xff1a; http://blog.csdn.net/fengbingchun/article/details/50196189 在Ubuntu 14.04上可以通过以下命令直接安装Valgrind&#xff0c;直接通过命令安装的版本是3.10.1&#xff0c;如下图&#xff0c;有些较老&#xff0c;目前最新版本…

粗谈Android中的对齐

在谈这个之前先啰嗦几个概念。 基线&#xff1a;书写英语单词时为了规范书写会设有四条线&#xff0c;从上至下第三条就是基线。基线对齐主要是为了两个控件中显示的英文单词的基线对齐&#xff0c;如下所示&#xff1a; Start&#xff1a;在看API的时候经常会有Start对齐&…

OpenCV3.3中逻辑回归(Logistic Regression)使用举例

OpenCV3.3中给出了逻辑回归(logistic regression)的实现&#xff0c;即cv::ml::LogisticRegression类&#xff0c;类的声明在include/opencv2/ml.hpp文件中&#xff0c;实现在modules/ml/src/lr.cpp文件中,它既支持两分类&#xff0c;也支持多分类&#xff0c;其中&#xff1a;…

多数编程语言里的0.1+0.2≠0.3?

作者 | Parul Malhotra译者 | Raku出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;我们从小就被教导说0.10.20.3&#xff0c;但是在奇妙的计算机编程世界里面&#xff0c;事情变得不一样了。我最近在用JavaScript编程&#xff0c;正在阅读数据类型的时候&#xff0c;…