运维基础部分:
什么是运维?我的理解是运用软件维护公司的服务器,网站,然后各种服务搭建、维护和调优。看似简单实际上通过课上课下的了解,发现要掌握很多知识。首先从操作系统开始接触运维。
冯诺依曼体系
将计算机分为五大部分组成:运算器、控制器、存储器、输入设备、输出设备。运算器的功能主要是进行算术运算和逻辑运算;存储器存储数据和指令;控制器就是从存储器提取各种数据指令给运算器,再把结果处理输出给外部设备。这些最底层的硬件是实现功能的基础,而软件是实现功能的逻辑过程。
内核
一个完整的操作系统由内核(Kernel)和各种应用程序(Applications)组成,这是一个广义的操作系统,比如我们所用的windows操作系统实际上已经被装上各种应用软件了。而狭义上的操作系统是单指内核(Kernel),内核的功能有负责驱动底层硬件被访问、合理分配资源、管理进程等等。
“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的软件。内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作,隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。
有一个问题,操作系统内核还是直接面向的底层硬件,并不能让用户方便使用硬件。于是添加各种应用程序使得用户使用硬件变的方便。最直观的就是用户界面。我们常用的是图形界面(GUI),另外还有命令界面(CLI)。Windows操作系统的Command窗口就是一种CLI。
计算机语言
机器语言 即二进制数字,计算机直接识别的语言。
微码语言 又叫汇编语言,面向机器的程序设计语言。
早期的程序设计均使用机器语言。程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。这样的机器语言十分复杂,不方便阅读和修改,也容易产生错误。程序员们很快就发现了使用机器语言带来的麻烦,它们难于辨别和记忆,给整个产业的发展带来了障碍,于是汇编语言产生了。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。
高级汇编语言分为系统级语言和应用级语言
系统级语言:诸如C、Java,更偏向底层,编写难度大,运行效率高。
应用级语言:诸如PHP、Python易于理解,编写方便,更贴近人。
Unix的发展
1969年之前,BELL实验室、MIT、GE联合开发Multics。
1969年:BELL的Ken Thompson为自己开发了Unics(这个是戏称的非正式的名称,因为思想源自Multics)。
Ken Thomson利用实验室废弃的PDP-7小型机,为实现自己设计的游戏star travel 结合multics的思想发明的unics.
BELL实验室开始研究他所发明的Unix。当时的软件程序用Basic语言编写。
Ken于1973年和他的学生Dennis·Ritchie一起用C语言重写了UNIX。
UNIX成为历史上第一个开放源代码供广泛研究的开源系统。
1977年:UNIX分支--BSD诞生,加州伯克利大学BillJoy取得了UNIX的源代码,加以修改和
完善,成为UNIX重要分支BSD-UNIX。之后的x86上的FreeBSD就是BSD改版而来。
1979年:AT&T宣布收回UNIX版权,不再开放,同时发布SystemV架构的UNIX。期间众多
公司的UNIX系统纷纷出现。
很多诸如Berkeley…等高校或公司极大促进了Unix的进一步发展代表人物:Bill Joy-->BSNG-->BSD(Berkeley SystemDistribution)
Linux操作系统
在服务器管理上,运维人员要掌握的是Linux操作系统。同样Linux指的是内核。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Richard Stallman,是自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名***。他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GNU 调试器。 他所写作的GNU通用公共许可证(GNUGPL)是世上最广为采用的自由软件许可证。
Apache ASF 响应自由软件,但要由自己的声明
Pro Andrew 自己编写内核 4000行左右代码 戏称为:Minix
Linus Torvalds---Andrew的学生在1991年,当时还是芬兰大学生的他萌发了开发一个自由的Unix操作系统的想法,当年,Linux就诞生了,在他的自传中他写到刚开始的名字是Freax,后来在1991.10正式发布了Linux 0.10 并完全开源。
**五大开源许可协议
0.0什么是许可协议?
什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供一定的权限。
不管产品是免费向公众分发,还是出售,制定一份许可协议非常有用,否则,对于前者,你相当于放弃了自己所有的权利,任何人都没有义务表明你的原始作者身份,对于后者,你将不得不花费比开发更多的精力用来逐个处理用户的授权问题。
而开源许可协议使这些事情变得简单,开发者很容易向一个项目贡献自己的代码,它还可以保护你原始作者的身份,使你至少获得认可,开源许可协议还可以阻止其它人将某个产品据为己有。以下是开源界的 5 大许可协议。
1.GNU GPL
GNUGeneral Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:
可自由复制
你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
可自由分发
在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
可以用来盈利
你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
可自由修改
如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
2.GNU LGPL
GNU 还有另外一种协议,叫做LGPL (Lesser General Public Licence),它对产品所保留的权利比 GPL 少,总的来说,LGPL 适合那些用于非 GPL 或非开源产品的开源类库或框架。因为 GPL 要求,使用了 GPL 代码的产品必须也使用 GPL 协议,开发者不允许将 GPL 代码用于商业产品。LGPL 绕过了这一限制。
3.BSD
BSD 在软件分发方面的限制比别的开源协议(如 GNU GPL)要少。该协议有多种版本,最主要的版本有两个,新 BSD 协议与简单 BSD 协议,这两种协议经过修正,都和 GPL 兼容,并为开源组织所认可。
新 BSD 协议(3条款协议)在软件分发方面,除需要包含一份版权提示和免责声明之外,没有任何限制。另外,该协议还禁止拿开发者的名义为衍生产品背书,但简单 BSD 协议删除了这一条款。
4.MIT
MIT 协议可能是几大开源协议中最宽松的一个,核心条款是:
该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版权和许可提示。
这意味着:
你可以自由使用,复制,修改,可以用于自己的项目。
可以免费分发或用来盈利。
唯一的限制是必须包含许可声明。
MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。
5.Apache
Apache 协议 2.0 和别的开源协议相比,除了为用户提供版权许可之外,还有专利许可,对于那些涉及专利内容的开发者而言,该协议最适合(这里有一篇文章阐述这个问题)。
Apache 协议还有以下需要说明的地方:
永久权利
一旦被授权,永久拥有。
全球范围的权利
在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。
授权免费,且无版税
前期,后期均无任何费用。
授权无排他性
任何人都可以获得授权
授权不可撤消
一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。
分发代码方面包含一些要求,主要是,要在声明中对参与开发的人给予认可并包含一份许可协议原文。
转载于:https://blog.51cto.com/healerj9/1889833