我以下图为基础,说明Linux的架构(architecture)。

最内层是硬件,最外层是用户常用的应用,比如说firefox浏览器,evolution查看邮件,一个计算流体模型等等。硬件是物质基础,而应用提供服务。但在两者之间,还要经过一番周折。

还记得Linux启动。Linux首先启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。

为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。系统调用看起来就像C语言的函数。你可以在程序中直接调用。Linux系统有两百多个这样的系统调用。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。一个系统调用函数就像是汉字的一个笔画。任何一个汉字都要由基本的笔画(点、横、撇等等)构成。我不能臆造笔画。

在命令行中输入$ man 2 syscalls可以查看所有的系统调用。你也可以通过$ man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示我们要在2类(系统调用类)中查询 (具体各个类是什么可以通过$man man看到)。

系统调用提供的功能非常基础,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。上面的分配内存的操作,可以定义成一个库函数(像malloc()这样的函数)。再比如说,在读取文件的时候,系统调用要求我们设置好所需要的缓冲。我可以使用Standard IO库中的读取函数。这个读取函数既负责设置缓冲,又负责使用读取的系统调用函数。使用库函数对于机器来说并没有效率上的优势,但可以把程序员从细节中解救出来。库函数就像是汉字的偏旁部首,它由笔画组成,但使用偏旁部首更容易组成字,比如"铁"。当然,你也完全可以不使用库函数,而直接调用系统函数,就像“人”字一样,不用偏旁部首。

(实际上,一个操作系统要称得上是UNIX系统,必须要拥有一些库函数,比如ISO C标准库,POSIX标准等。)

shell是一个特殊的应用。很多用户将它称为命令行。shell是一个命令解释器(interpreter),当我们输入“ls -l”的时候,它将此字符串解释为

1.在默认路径找到该文件(/bin/ls),
2.执行该文件,并附带参数"-l"。

我之前用>表示重新定向,用|表示管道,也是通过shell解释&或者|的含义。Shell接着通过系统调,用指挥内核,实现具体的重定向或者管道。在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。shell是可编程的,它可以执行符合shell语法的文本。这样的文本叫做shell脚本(script)。可以在架构图中看到,shell下通系统调用,上通各种应用,同时还有许多自身的小工具可以使用。Shell脚本可以在寥寥数行中,实现复杂的功能。

UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的"胶水",让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。这也是Linux老鸟鼓励新手多用shell,少用图形化界面的原因之一。

(shell也有很多种,最常见的是bash, 另外还有sh, csh, tcsh, ksh。它们出现的年代不同,所支持的功能也有差异。)

一个shell对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像上图一样,是一个图形化的窗口。你可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。

最后,我们进入一般的应用。应用是一个程序,它可以

1.直接调用系统函数
2.调用库函数
3.运行shell脚本

这些应用可以由多种语言开发。最常见的是C语言。

总结

Linux利用内核实现软硬件的对话。

通过系统调用的这个接口,Linux将上层的应用与下层的内核分离,隐藏了底层的复杂性,也提高了上层应用的可移植性。

库函数利用系统调用创造出模块化的功能,

Shell则提供了一个用户界面,并让我们可以利用shell的语法编写脚本,以整合程序。

Linux运维技术之Linux云计算架构相关推荐

  1. 阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能

    阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能 目前越来越多的企业需要依赖于IT技术发布产品与服务,尤其是电子商务最为明显,它凸显了IT技术在现代企业中的重要性.当企业 ...

  2. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  3. 视频教程-Linux运维高薪课程-Linux

    Linux运维高薪课程 京东商城运维架构师,京峰Linux云计算教学总监,担任国内多家知名社区运维专家网站Linux版主,专注Linux自动化运维,熟练LVS.Nginx,前端架构及Python开发: ...

  4. linux ospf 命令,Linux运维知识之linux下使用quagga配置ospf协议

    本文主要向大家介绍了Linux运维知识之linux下使用quagga配置ospf协议,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 环境:三台redhat6.5(VM虚拟机)一 ...

  5. linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...

    本文主要向大家介绍了Linux运维知识之Linux:复制并创建目标目录,如果它不存在,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 我需要一个命令(或者可能是cp的一个选项)来 ...

  6. linux mk创建文件,Linux运维知识之Linux mkkickstart建立安装的组态文件命令详解

    本文主要向大家介绍了Linux运维知识之Linux mkkickstart建立安装的组态文件命令详解,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 功能说明:建立安装的组态文件 ...

  7. linux用户密码转换为明文,Linux运维知识之linux下抓取内存中明文密码mimipenguin

    本文主要向大家介绍了Linux运维知识之linux下抓取内存中明文密码mimipenguin,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 下载地址:https://githu ...

  8. linux 安装git失败,Linux运维知识之linux下安装git常见故障整理

    本文主要向大家介绍了Linux运维知识之linux下安装git常见故障整理,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. FAQ1: Permission denied (pu ...

  9. linux cpu不足处理运维,Linux运维知识之Linux服务器CPU占用率较高问题排查思路

    本文主要向大家介绍了Linux运维知识之Linux服务器CPU占用率较高问题排查思路,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 注意:本文相关配置及说明已在 CentOS  ...

  10. linux维护rpm 数据库,Linux运维知识之linux rpm命令详细介绍

    本文主要向大家介绍了Linux运维知识之linux rpm命令详细介绍,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 虽然现在N多人都使用yum去替代rpm了,但是rpm在一些 ...

最新文章

  1. 算法-----数组------合并两个有序数组
  2. vscode 默认初始化_VSCode设置初始化模板
  3. 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊
  4. 直击「神策 2021 数据驱动大会」五大论坛,精彩不断
  5. websocket 历史及使用详解
  6. 面试必会系列 - 1.2 Java 集合,源码讲解
  7. xp系统什么梗_老式电脑,装个什么样的系统最好用?
  8. 浅谈算法和数据结构: 六 符号表及其基本实现
  9. Python语言入门教程(一)
  10. 如何用VS2015手撕白菜
  11. Velodyne 16线三维激光雷达
  12. 跟着小马哥学习Spring(1)
  13. 自由传奇|为你的队伍加油!
  14. 【华为OD机试模拟题】用 C++ 实现 - 预订酒店(2023.Q1)
  15. SQL Server 还原数据库
  16. 转:Windows8内核模式下开发NDIS应用-NDIS Filter讲解
  17. SAP中重复制造生产计划编制——生产版本
  18. Java8常用循环遍历操作方式的效率对比
  19. lm393 过零检测 功率因数检测
  20. 激光雷达的分类、主流激光雷达、原理是什么

热门文章

  1. java中if条件函数怎么用_if函数,多个条件怎么使用
  2. macbook黑屏_Mac Book突然黑屏开不了机怎么办
  3. 如何解决“App开发者需要更新此App以在此iOS版本上正常工作”
  4. 用友u8服务器修改ipv4,如何修改用友服务器ip地址
  5. 100比例怎么用计算机算,比例尺1:100怎么算
  6. Makefile 自动化变量及其说明
  7. 前端八股文,https、跨域、闭包、原型链,布局、防抖节流等
  8. XCOM V2.6串口助手
  9. ZIF-67沸石咪唑酯骨架结构材料/cas46201-07-4/2-MethylimidazoleCobaltsalt
  10. 每日10行代码86: 计算两个向量的夹角余弦值