微信改版了,现在看到我们全凭缘分,为了不错过【全栈工程师修炼指南】重要内容及福利,大家记得按照上方步骤设置「接收文章推送」哦~
文章目录:
温馨提示:作者最近开通的知识星球,全栈系列从门到实践教程将会逐步同步到星球内,加入星球将获得作者在安全、运维、开发中的所有学习实践笔记,和问题答疑以及远程技术支持,希望大家多多支持!
0x00 前言简述
上一章节,我们简单的介绍一些计算机基础知识以及企业机房中关于服务器组件的相关介绍,相信仔细学习的朋友有了一定的了解吧,在此基础之上此篇文章将主要讲解两大(Windows、Linux、Unix
)操作系统及其关联的相关知识,为后续的Windows/Linux
运维奠定基础。
下面,我们首先学习操作系统 (Operating System)的相关知识(PS: 若想深入学习请参考后续作者发布的《计算机操作系统原理》相关笔记,关注作者公众号或者加入知识星球)获取最新,其次是各种操作系统演变发展、以及分类和市场暂额,和相关人物的介绍说明, 最后介绍了什么是开源?开源的意义?以及有哪些开源协议,以及如何选用开源协议的等,为后续的实践安装 Windows Server 与 Linux 操作系统到服务器做准备。
温馨提示:随着时间推移,可能安装的Windows与Linux版本与你后续安装时版本有所区别,但通常安装步骤是大致一样特别是 Windows Server安装,基本都是傻瓜式的。
温馨提示:作者当前已经开通了知识星球【@全栈工程师修炼指南
】作者十年学习笔记(涉及开发,运维,安全,物联网,设计,杂类等
)尽在其中(陆续更新),部分文章也会更新到【全栈工程师修炼指南
】公众号的【#运维从业必学】专栏中,由于作者花费大量时间进行总结归纳,所以为了尊重作者劳动成果以及防止爬虫,将此专栏设为9.9元,希望各位看友多多【点赞、转发、赞赏】支持,收获一定大于付出,并且一起学习,一起进步!
0x01 操作系统简述
操作系统概念
在计算机系统将软件分为两大类其特征是?(考点)
1.系统软件: 即
操作系统
它是也是一组程序是内核与其提供的接口工具,其主要管理计算机的所有活动以及驱动系统中的所有硬件设备,并且能开发一个软件接口给开发者进行开发各类软件;2.应用软件: 是参考操作系统所提供的API开发接口所开发出来的软件(
软件运行环境依赖于操作系统
),例如计算机上的计算器、QQ、Offices等
什么是操作系统?
描述: 主要用于管理与驱动硬件, 因此必须要能足够管理内存、管理设备、负责进程管理以及系统调用等,所以只要能够让硬件准备妥当的情况下,它就是一个操作系统,不过实际上它并没有清晰的定义,不过所有的操作系统都有几个统一的目标:
方便:使计算机系统易于使用
有效:以更有效的方式使用计算机系统资源
扩展:方便用户有效开发、测试和引进新功能
主要实现功能有硬件驱动、管理应用软件、调用分配资源、进程管理、内存管理、网络管理、安全管理、文件管理等;
操作系统的角色层次?
描述: 操作系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操作接口(硬件 > 操作系统(内核 -> 系统调用) -> 应用程序
), 将整个计算机系统相关软件/硬件绘制成图表示如下:
简单的说,操作系统目的是软件程序,它是控制软件, 管理与杀死应用程序, 并且为应用程序提供服务, 分配资源与管理外设;
什么是壳(Shell), 什么是内核(Kernel)? 其作用是什么?
答:Linux, Windows(gui), Android 的界面都属于Shell(壳),可以类比看做是用户与计算机的接口, 在Shell之下内核(Kernel)才是操作系统的重点。 答: 内核是操作系统非常重要的一部分其提供了管控硬件与计算机系统相关资源的分配(包括CPU、内存等资源),在其上层还需要应用程序用户才能操作系统,其主要功能如下;
1.系统调用接口(
System call interface
) : 便于和内核通信使之将硬件资源进一步利用2.程序管理(
Process control
) : 多任务多线程、CPU调度3.内存管理(
Memory management
) : 通常内核提供虚拟内存的功能当内存不足时候可以提供内存交换(SWAP)功能4.文件系统管理(
File system management
) : 文件的管理、数据的输入/输出IO等工作5.设备驱动(
Device driver
) : 设备驱动程序是内核需要做的事情,目前将驱动程序编辑成模块就不需要重新编译内核,实际上硬件设备驱动提供者应该是由硬件厂商完成的,由其参考操作系统的驱动程序开发接口;
若要使用抽象硬件表示,例如 CPU -> 进程,内存 -> 地址空间,磁盘 -> 文件;
操作系统内核特征(OS kernel)
并发 concurrent:交替运行,计算机系统中同时存在多个运行的程序,需要OS管理和调度;
并行 parallel:同时运行,在一个时间点上有多个程序需要有多个cpu;
共享:分时,互斥共享,同时对一个资源只有一个程序可以访问,但可以通过隔离成两块,达到“同时”访问 ;
虚拟:操作系统面对的是硬件.将CPU虚拟化成进程,磁盘虚拟化成文件,内存->虚拟空间,每个应用程序/用户觉得有一个计算机专门为他服务;
异步:一个CPU的情况下,只能有一个程序在跑,程序的执行不是一贯到底,而是走走停停,但只要运行环境相同,OS保证程序运行的结果相同.
操作系统与驱动程序的关系?
答: 操作系统通常会提供一个开发接口给硬件开发商,让其根据这个接口设计可以驱动他们硬件的驱动程序,然后由用户安装驱动程序后即可在该操作系统上驱动并使用这张显卡; 注意: 适当的驱动程序表明了不同的操作系统驱动程序可能无法成功安装和驱动;
接口(Interface): 在电气工程学科中指的是插座和插头的连接口,起到将电月电器连接起为的功能;后衍生到软件工程指软件包向外提供的功能模块的函数接口,则操作系统通过接口的方式用于建立用户与计算机硬件的沟通方式,用户通过调用操作系统接口来使用计算机的各种计算机服务, OS 通常提供两个接口一是命令行、二是窗口界面。
命令行(Command interface): 实际是一个叫shell的终端程序提供的功能,该程序底层的实质还是调用一些操作系统提供的函数。
窗口界面(Window interface): 通过图形窗口程序接收来自操作系统的消息,比如:鼠标、键盘动作,从而做出一些响应。
应用程序编程接口(API, Application Programming interface):定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译,如果你接触过开发肯定知道 API 应用程序接口是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
可移植的操作系统接口(POSIX, Portable Operating System Interface): 即IEEE在操作系统上定义的一系列API标准,POSIX 兼容的程序可在其他 POSIX 操作系统编译执行;例如,系统调用 system call 和函数库 Library Function。
对于非一般性使用需求,操作系统提供了一系列的函数调用给软件开发者,由软件开发者来实现一些用户需要的功能,这些函数调用由于是操作系统内核提供的,为了有别于一般的函数调用,被称为系统调用。 比如,使用C语言进行软件开发时,经常用的printf函数,它的内部实际就是通过write这个系统调用让操作系统内核把字符打印在屏幕上的。
用户空间(User space):用户程序的运行空间,为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(system call),才能向内核发出指令。
内核空间(Kernel space):内核的运行空间,可执行任意命令,调用系统的一切资源。
例如: 以下面的伪代码进行演示用户、内核空间的切换。 说明: 第一行和第二行都是简单的赋值运算,在 User space 执行; 第三行需要写入文件,就要切换到Kernel space,因为用户不能直接写文件,必须通过内核安排; 第四行又是赋值运算,就切换回 User space
url = "www.weiyigeek.top" // User space
x = 1 // User space
x = x + 2 // User space
file.write(url) // Switch To Kernel space
y = x + 2 // Switch Back User space
操作系统分类
描述: 我们可按照多种方式划分操作系统,可按照使用类别,亦可按照系统类别进行划分或者按照服务器操作系统类别。
按使用类别
主机型计算:AIX、HP-UX
个人机服务器计算:Windows、Linux、BSD
移动网络计算:IOS、Android
普通计算:移动计算,云计算,大数据处理, 物联网设备计算服务 Future OS
按系统类别
服务器OS: Redhat(RHEL、CentOS)、Rocky、Debian、UbuntuWindows Server、AIX、KylinOS V10 SP3 (国产服务器操作系统)、
桌面OS: Windows 11/10/7/xp/vista、Ubuntu desktop、Mac OS、Fedora、Deepin, KylinOS V10 SP1 (国产桌面操作系统)
移动OS: Andriod (Google)、IOS、AliOS、HarmonyOS(华为鸿蒙)、Hyperos(小米澎湃)
温馨提示: 目前作者企业中由于国产化替代浪潮,选择了KylinOS (银河麒麟)作为承载业务的服务器操作系统,遂作者整理符合等保主机安全加固的脚本,希望对大家有帮助,且多多关注【全栈工程师修炼指南
】以及支持【weiyigeeker
】作者《网安等保 | 主机安全之KylinOS银河麒麟服务器配置优化与安全加固基线文档脚本分享》系列专栏,相信收获必定大于付出。
按服务器操作系统类别
作为一名运维学习者,实际上我们还可按照服务器操作系统类别划分,可划分为三大操作系统,即 Windows 、Unix、Linux,不用着急,作者将会在后续中依次介绍。
0x02 服务器操作系统介绍
操作系统历史
描述: 当前抛开非服务器操作系统来说,Linux 操作系统已成趋势,越来越多的 Window Server 上的业务,随着容器、微服务、云原生、AI的发展逐步的迁移到了Linux,更是随着国内国产化的大背景下,更多的企事业单位中逐步使用国产化的操作系统,实际上其本质也是 Linux,所以说当下主流的服务器系统的霸主是 Linux 这一点不容置疑,不过作为一个运维工作者,还是有必要简单了解一下各操作系统发展历史,铭记一下前人,站在巨人的肩膀上前行。
Unix 诞生历史
背景:为了进一步强化大型主机功能,让主机可以提供给更多的使用者同时使用,在1964年,由贝尔实验室(Bell)、麻省理工学院(MIT)以及GE美国通用电气公司,共同发起了Multics(多路信息计算系统)的计算,其目的是让大型主机可以同时支持300个以上的终端机连线使用,然而由于缺乏资金Bell实验室退出了该计划。
什么是兼容分时系统 (Multics)
Multics 是一种早期的操作系统,于20世纪60年代末至70年代初开发,主要用于大型计算机和时间共享系统。 现今,Multics 已经不再广泛使用,而是被更现代的操作系统所取代,不过现代的操作系统如 Linux、Windows 和 macOS 在设计上都有考虑到 Multics 的一些概念和思想,尤其是在安全性和时间共享方面。但是,就直接的兼容性而言,现代操作系统并不直接兼容 Multics。
1966 年,从加州大学伯克利分校毕业的
肯·汤普逊 Ken Thompson
(Unix 之父
)加入了贝尔实验室, 并参与了兼容分时系统 (Multics)研发,他基于Multics开发了 "star travel
” 游戏。1969 年,由于缺乏资金Bell实验室退出了Multics计划,原计划成员
Ken Thomspon
根据 Multics 开发的 star travel 灵感,利用一台老式计算机 PDP-7 以汇编语言(B语言)自行写了一个操作系统(Unix原型),因为相对" Multics "来说,简化了许多,所以当时朋友称这个系统为"Unics"(UNiplexed Information and Computing System
)(当时并不叫Unix)这个系统有一个很重要的概念,所有的程序和系统装置都是文件
,这个概念对后来Linux的发展有相当重要的影响!1970 年代初:Unix 在贝尔实验室内部得到推广和应用,一些改进和新功能被不断添加进来。
1973 年,UNIX 正式命名诞生, 丹尼斯·里奇
Dennis Richie
(C语言之父
)等人以C语言写出第一个正式的UNIX内核,从此 UNIX 与 C 语言组成CP。
1977 年,Unix 分支 BSD 诞生:伯克利大学的
Bill Joy
在Unix源码的基础上着手开发出来的系统,取名为Berkeley Software Distribution (BSD
),Bill joy便 是Sun公司的创办者,并且 Freebsd 便是由BSD发展而来。1979 年, AT&T公司发布System V 第七版由于商业行为,AT&T公司想收回版权并限制不对学生提供源码,同时期由于Unix的高度可移植性,很多商业公司开始了Unix的发展,包括 IBM 的AIX,HP 的 HP-Unix 等公司。
1983 年:理查德·斯托曼(Richard Stallman)创建了 GNU 计划,旨在开发一套自由的类 Unix 操作系统,但缺乏内核。
1985 年,发布 GNU-GPL(通用公共许可证),这对后来的自由软件有着重大意义,所有的自由软件都需要遵循GPL协议。
1987 年,x86架构的Minix操作系统诞生,由荷兰计算机科学家安德鲁·坦尼古斯(
Andrew S. Tanenbaum
)编写,旨在教学和研究用途, 是一个基于微内核设计的类 Unix 操作系统。1988 年,MIT发起Xfree86计划,即:X window System +Free+x86
1991 年:林纳斯·托瓦兹(Linus Torvalds)发布了 Linux 内核,这个内核与 GNU 软件结合形成了现代 Linux 操作系统。
总的来说,Unix 是一个经典的操作系统,对今天的操作系统设计产生了深远影响,包括 Linux、macOS 和其他类 Unix 系统。Unix 的开发历程展示了计算机科学领域的不断创新和发展。
Linux 诞生历史
描述: Linux操作系统诞生于 1991年的10月5日 (第一次正式向外公布时间,以MINIX为模版),芬兰大学生 Linus Benedict Torvalds
在 comp.os.minix 新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sources for 386-AT)- FREAX,含义是怪诞的、怪物、异想天开类Unix的内核,并在 GPL 协议下发布。
官网地址: https://www.kernel.org
最早版本: https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/
以下是 Linux 的主要发展历程:
1991 年:林纳斯·托瓦兹(
Linus Torvalds
)在芬兰赫尔辛基大学开始编写一个新的类 Unix 操作系统内核, 他最初只是出于个人兴趣(所以说兴趣爱好是最好的老师),并没有设想到这个项目会成为今天众所周知的 Linux。1991 年秋季:Linus Torvalds 完成了最初的 Linux 内核版本,他将其发布在互联网上,并邀请其他人一同参与开发。这个内核迅速吸引了全球的程序员和爱好者,他们开始为 Linux 内核贡献代码,从而使得 Linux 迅速成长壮大。
1992 年:发行了首个完整的 Linux 发行版,即由 Linus Torvalds 和其他社区成员共同开发的发行版。随着时间的推移,越来越多的人为 Linux 贡献代码并开发应用程序。
1990 年代中后期:Linux 开始在服务器领域取得成功,成为重要的服务器操作系统之一,同时,也逐渐扩展到个人电脑和嵌入式设备等领域。
1994 年,完成Linux核心正式版 v1.0 版本, 加入了对X Window System的支持。
1996 年,发布Linux核心正式版 v2.0 版本, Linus Torvalds 指定企鹅(
penguin
)为吉祥物,话说。至今:Linux 已经成为世界上最流行的操作系统之一,广泛用于服务器、个人计算机、移动设备、嵌入式系统等领域。同时,Linux 社区也继续活跃,不断推动着 Linux 技术的发展和创新。
总结: Linux 的成功得益于开放的开发模式、强大的社区支持和优秀的性能特点,使得它成为了一个受欢迎的开源操作系统。
小插曲:为啥选择小企鹅当做Linux的Logo?
答: 话说托瓦兹小时候去动物园时被企鹅咬了一口而恋恋不忘,所以在正式版2.0推出前将其小企鹅当成Linux的吉祥物;
Windows 诞生历史
描述: 1983年11月10日,为向IBM公司研发的计算机提供图形用户界面和多任务环境的操作系统,微软公司在纽约广场酒店宣布开发 Microsoft Windows;同月,微软公司CEO 比尔·盖茨
向IBM展示了Windows的测试版本,命名为“界面管理器”(后经过营销专家罗兰·汉森的建议改为现名)。
Windows 操作系统的发展历史可以追溯到 1985 年, 以下是 Windows PC 的主要发展历程:
1985 年,11月20日, 在宣布开发Windows两年后,微软公司正式发布Windows 1.0,硬件要求至少256KB内存、两个双面软盘驱动器和一个图形适配卡。比尔·盖茨在发布时说:“这是一款专为PC用户打造的独特软件。”Windows 1.0并不是一个完整的操作系统,而是MS-DOS系统的延伸,发布时即附带了包含计算器、日历、卡片文件、剪贴板查看器、时钟、控制面板、记事本、画图、黑白棋和书写器等一系列组件。,与当时流行的 MS-DOS 相比,Windows 提供了更直观、用户友好的界面。
1987 年,12月9日 Windows 2.0正式发布,该版本增加了控制面板、桌面图标和扩展内存,且开始支持重叠窗口、控制屏幕布局和键盘快捷键。
1990 年, 5月22日 Windows 3.0正式发布,改善了系统外观,增加了虚拟内存和VxD功能及程序管理器、文件管理器和打印管理器,在首销的六个月中便卖出了200多万份。
1992年,Windows 3.1基于3.0版本的基础发布。而后基于3.1发布的Windows for Workgroups 3.11增加了对等工作组和域网络支持。截至1994年,3.x系列销售总量超过1000万份,成为微软首部获取广泛商业成功的产品。
1994年,为照顾中国内地的Windows用户,微软公司发布了只提供简体中文版的Windows 3.2。