slackware:
   suse
    opensuse
  debian:
   ubuntu
    mint
  redhat:
   rhel: redhat enterprise linux
    每18个月发行一个新版本
   CentOS:兼容rhel的格式
   fedora:每6个月发行一个新版本

  ArchLinux
  Gentoo
  LFS: Linux From scratch

  Android: kernel+busybox+java虚拟机

 GNU: GPLv2, GPLv3, LGPL(lesser)
  Apache: apache
  BSD: bsd

  A: 1000, GPL,
  B: 20000, 20

 问题1:CentOS和Linux是什么关系?CentOS和RHEL是什么关系?
 问题2:各种开源协议的具体细节?
  GPL, LGPL, Apache, BSD

 程序包管理器:
  rpm:
   RHEL, Fedora, S.u.S.E, CentOS
  dpt:
   Debian, Ubuntu

 自由软件:
  自由使用;自由学习和修改;自由分发;自由创建衍生版;

 Linux的哲学思想:
  1、一切皆文件;
   把几乎所有资源,包括硬件设备都组织为文件格式;
  2、由众多单一目的小程序组成;一个程序只实现一个功能,而且要做好;
   组合小程序完成复杂任务;
  3、尽量避免跟用户交互;
   目标:实现脚本编程,以自动完成某些功能;
  4、使用纯文本文件保存配置信息;
   目标:一款使用的文本编程器即能完成系统配置工作;

 如何获取CentOS的发行版:
  http://mirrors.aliyun.com  http://mirrors.sohu.com  http://mirrors.163.com

X86体系的CPU提供4种特权模式ring0—ring3,其中ring0特权最高,ring3特权最低

Linux操作系统提供了用户模式和内核模式,ring0模式运行内核态的代码,ring3运行用户态的代码

程序运行模式

用户空间 US user space——只用调用非特权指令的

系统模式/内核模式 system space——要通过操作系统系统调用特权指令的

 

(CPU就一个,现代操作系统一般都可以多个应用程序同时使用,为了防止冲突,这个时候就需要一个中间人也就是内核来分配CPU,也叫作系统监视器)

 

POS 可移植操作系统规范 portable operating system

       Wondow库和linux库接口存在不兼容的情况,如果winodw库和linux库都支持POS规范的话,方便操作系统以及上面的软件在不同库上面的运行

       API:编程接口

 

运行程序格式

       可执行文件 executable file——在不同的操作环境下,可执行程序的呈现方式不一样,可执行文件是可以由操作系统进行加载执行的文件

              Window运行支持格式:EXE格式   库文件:dll格式

              Linux运行支持格式:ELF格式(Executable Linkable Format)  库文件:SO格式

 

程序——指令+数据

       指令:只读

       数据:读写

程序——算法+数据结构(一组指示计算机或其他具有信息处理能力装置执行动作或做出判断的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。打个比方,一个程序就像一个用汉语(程序设计语言)写下的红烧肉菜谱(程序),用于指导懂汉语和烹饪手法的人(体系结构)来做这个菜。)

 

库(在linux中被叫做共享对象)调用

系统调用:已经写好的程序,允许被调用(将一个整体的功能进行了整合,被调用的东西一般不提供数据,只提供指令)——提供接口

 

Malloc(),free()

 

垃圾收集器;——垃圾回收

       系统定时的查看去某个对象是否被其他对象所引用,某一刻后,该对象不再被其他对象所引用,此时该独享随时都可以被回收,从而清理该对象所占内存,但不一定是立刻,这是由系统并不是实时的去检测有无垃圾决定

 

编程语言的层次:

       汇编语言:嵌码编程——系统中某些与硬件相关的特有代码、与驱动程序开发有关的语言

       高级语言C,C++——系统级应用、驱动程序开发

       高级语言java,python,php——应用程序(例如web页面的后台语言等),与底层硬件基本上不相关了,所以可以在不同的系统上运行

 

编译自己的程序运行在操作系统之上,没有编译器,没有操作系统

 

Bash——bash是一个为GUN计划编写的Unix shell,是Bourne-Again Shell。Bourne shell是一个早期的重要shell。bash是大多数Linux系统以及Mac OS X v10.4默认的shell,他能运行大多数Unix风格的操作系统之上。Linux默认采用的是bash,当你在命令行中敲入bash命令时,相当于进入bash环境,如果本身就是bash环境,那么进入一个子bash环境,相当于开了一个子进程。

 

Linux三大主流发行版;

       Slackware——suse——opensuse

       Deblan——ubantu——mint

       Redhat——rhel:redhat,enterprlse,linux :每18个月发行一个版本;

fedora:每6个月发行一个新版本

              centOS

       ArchLinux

       Centoo

       LFS

 

Android:kernel+busybox+java虚拟机

GUN :GPLv2,GPLv3 ; LGPL

          Apache:apache

       BSD:bsd

 

问题:CentOS和Linux什么关系?CentOS和rehel什么关系?

       答:1、Linux是内核,centOS是GUN/Linux发行版本Red Hat系列中的一个

              2、centOS使用Linux内核外加一整套的界面,组成一个完整的可供使用的操作系统

              3、linux属于内核系统,只有终端命令界面,无图形界面

              4、centos同时拥有终端命令界面和图形界面

 

各种开源协定的具体细节?GPL,LGPL,BSD

答:GPL(GNU General Public License)

Linux采用的是GPL。GPL是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。

LGPL (GNU Lesser General Public License)

                     LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

 

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

 

BSD (original BSD license、FreeBSD license、Original BSD license)  

       BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

 

 

软件包包管理器:

       rpn :是由Red Hat推出的应用软件管理器,在linux中,可以使用rpm调用RPM包管理器

       Dpt

      

自有软件:

       自由使用,自由学习和修改,自由分发,自由创建衍生版

      

Linux的哲学思想

1、一切皆文件

把几乎所有资源,包括硬件设备都组织为文件格式;

2、由众多单一目的的小程序组成,一个程序只实现一个功能,而且要做好;组合小程序完成复杂任务

3、尽量避免和用户交互,目标在于实现脚本编程,以自动完成某些功能

4、使用纯文本文件保存配置信息:

目标:一款使用的文本编辑器即能完成系统配置工作