Linux认证的概念

Linux认证的概念,第1张

Linux认证的概念

RHCA(Red Hat Certified Architect),是RedHat公司在2004年推出的顶级认证,也是Linux界公认的 *** 作系统最高级认证。下面是我整理的关于Linux认证的概念,欢迎大家参考!

Linux用户认证方法简介

当今IT环境中,任何计算机系统都要充分考虑设计、使用和运行过程中的安全性。所以在目前主流 *** 作系统的各个环节当中都增加了很多安全方面的功能和特性,而在众多的安全特性和功能中有相当多的技术是确保用户鉴别和身份认证方面的安全性的。

所谓用户鉴别,就是用户向系统以一种安全的方式提交自己的身份z明,然后由系统确认用户的身份是否属实的过程。换句话说,用户鉴别是系统的门户,每个用户进入到系统之前都必须经过鉴别这一道关。 而所谓认证安全,简而言之就是计算机系统确认了用户是经过授权的合法用户之后才能允许访问。安全认证最常用的方式是比对用户输入和预存于数据库中的密码。

不过在用户进行身份鉴别和安全认证的过程中,肯定会涉及几个核心问题。例如:

如何真正实现正确鉴别用户的真实身份

在鉴别用户合法身份之后,如何确定用户可以对哪些资源进行访问

如何控制用户以何种方式来访问计算机资源

如何对用户的安全访问随时随地按需调整

上述这些问题都是在设计鉴别和认证程序过程中需要充分考虑和精心设计的。而在Linux类的 *** 作系统中,这些问题的处理实际上有一套完整的流程和机制。

在Linux类的 *** 作系统中,最初用户鉴别过程就像各种Unix *** 作系统一样:系统管理员为用户建立一个帐号并为其指定一个口令,用户用此指定的口令登录之后重新设置自己的口令,这样用户就具有了一个只有它自己知道的口令或者密码。一般情况下,用户的身份信息在Linux系统中存放在/etc/passwd文件当中,这实际上是一个拥有简单格式的数据库表,通过":"作为分隔符分隔出多个字段,其中包括用户的名称、用户ID、组ID、用户说明、主目录和登录使用的shell等相关信息。而用户口令经过加密处理后存放于/etc/shadow 文件中。也是一个格式类似的数据库表,除了用户名和经过加密之后的密码之外,还包括多个对密码有效期进行定义的字段,包括密码有效时间、密码报警时间等。

用户登录的时候,登录服务程序提示用户输入其用户名和口令,然后将口令加密并与/etc/shadow 文件中对应帐号的加密口令进行比较,如果口令相匹配,说明用户的身份属实并允许此用户访问系统。这种思想基于只有用户自己知道它的口令,所以输入的口令是正确的话,那么系统就认定它是所声称的那个人。

在Linux类 *** 作系统中,定义用户信息和密码信息的字段和格式都需要符合标准的Linux Naming Service Switch定义,即NSS定义。因此用户信息只要保证满足NSS规范,就可以来源于本地passwd和shadow之外的其它信息数据库和认证源。所以在此基础上还派生出一些其它认证解决方案。例如NIS、LDAP等,都可作为存放用户信息的数据库,而存放用户口令或者鉴别用户身份的数据库,可以采用专用于网络环境的Kerberos以及智能卡鉴别系统等方式。

这一整套的鉴别和认证方案貌似无懈可击,但是将这种解决方案真正应用到 *** 作系统中的话就会发现一些问题:

第一,在 *** 作系统上所包含的认证不仅仅只涉及到系统登录和访问,在系统外围往往提供了众多的应用程序,相当多的应用程序在访问过程中是有认证需求的。那么是否需要针对每一个应用程序都得加入认证和鉴别的功能如果要,那么无论从程序的开发和使用管理角度来讲,工作量都将成倍增加;如果不要,则系统级的用户鉴别和安全认证与应用程序没有任何关系,意味着不管用户是否需要登录系统,但是对应用程序的访问都将缺乏最基本的安全性。

第二,如果针对每一个应用程序都开发用户鉴别和认证的功能,那么一旦发现所用的算法存在某些缺陷或想采用另一种鉴别和认证方法时,开发者或者用户都将不得不重写(修改或替换)应用程序,然后重新编译原程序。

所以,尤其是当实现鉴别功能的代码以通常方法作为应用程序一部分一起编译的时候,上述问题将十分突出。很明显,传统的身份鉴别和用户认证方式一旦整合到实际的 *** 作系统中,在实用当中缺乏灵活性。

鉴于以上原因,Linux *** 作系统的开发者和设计人员开始寻找一种更佳的替代方案:一方面,将鉴别功能从应用中独立出来,单独进行模块化的设计,实现和维护;另一方面,为这些鉴别模块建立标准的应用程序接口即API,以便众多的应用程序能方便地使用它们提供的各种功能;同时,鉴别机制对上层用户(包括应用程序和最终用户)要求一定要是透明的,这样可以对使用者隐藏其中比较复杂的实现细节。

可插拔认证模块PAM的基本概念

事实上直到1995年的时候,SUN的研究人员才提出了一种满足以上需求的方案,这就是可插拔认证模块(Pluggable Authentication Module--PAM)机制,并首次在其 *** 作系统 Solaris 23上部分实现。

可插拔认证模块(PAM)机制采用模块化设计和插件功能,使用户可以轻易地在应用程序中插入新的认证模块或替换原先的组件,同时不必对应用程序做任何修改,从而使软件的定制、维持和升级更加轻松。因为认证和鉴别机制与应用程序之间相对独立。所以应用程序可以通PAM API来方便地使用PAM提供的各种鉴别功能而不必了解太多的底层细节。此外PAM的易用性也较强,主要表现在它对上层屏蔽了鉴别和认证的具体细节,所以用户不必被迫学习各种各样的鉴别方式,也不必记住多个口令;又由于它实现了多鉴别认证机制的集成问题,所以单个程序可以轻易集成多种鉴别机制,如Kerberos和Diffie - Hellman等认证机制,但用户仍可以用同一个口令登录而且感觉不到采取了各种不同的鉴别方法。

在广大开发人员的努力下,各版本的UNIX系统陆续增加和提供了对PAM应用的支持。其中Linux-PAM是专门为Linux *** 作系统实现的,众多的Linux *** 作系统包括Caldera、Debian、Turbo、Red Hat、SuSE 及它们的后续版本都提供对PAM的支持。而FreeBSD从31版本也开始支持PAM。而且除了具体实现方法上多少有些不同外,各种版本Unix系统上PAM的框架是相同的。所以我们在这里介绍的Linux的PAM框架知识具有相当的普遍性,而且在下文介绍其框架过程中可以看到,我们并没有刻意区分Unix PAM与Linux PAM这两个技术术语。

PAM的分层体系结构

PAM 为了实现其插件功能和易用性,采取了分层设计思想。就是让各鉴别模块从应用程序中独立出来,然后通过PAM API作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中"插入"所需要的鉴别功能模块,从而真正实现了在认证和鉴别基础上的随需应变。实际上,这一思路也非常符合软件设计中的"高内聚,低耦合"这一重要思想。

PAM 的体系如下简图所示:

从上面的结构图可以看出,PAM 的API起着承上启下的作用,它是应用程序和认证鉴别模块之间联系的纽带和桥梁:当应用程序调用PAM API 时,应用接口层按照PAM配置文件的定义来加载相应的认证鉴别模块。然后把请求(即从应用程序那里得到的参数)传递给底层的认证鉴别模块,这时认证鉴别模块就可以根据要求执行具体的认证鉴别 *** 作了。当认证鉴别模块执行完相应的 *** 作后,再将结果返回给应用接口层,然后由接口层根据配置的具体情况将来自认证鉴别模块的应答返回给应用程序。

上面描述了PAM的各个组成部分以及整体的运作机理。下面将对PAM中的每一层分别加以介绍。

第一层:模块层。模块层处于整个PAM体系结构中的最底层,它向上为接口层提供用户认证鉴别等服务。也就是说所有具体的认证鉴别工作都是由该层的模块来完成的。对于应用程序,有些不但需要验证用户的口令,还可能要求验证用户的帐户是否已经过期。此外有些应用程序也许还会要求记录和更改当前所产生的会话类的相关信息或改变用户口令等。所以PAM在模块层除了提供鉴别模块外,同时也提供了支持帐户管理、会话管理以及口令管理功能的模块。当然,这四种模块并不是所有应用程序都必需的,而是根据需要灵活取舍。比如虽然login可能要求访问上述所有的四种模块,但是su可能仅仅需要使用到鉴别模块的功能即可。至于如何取舍则涉及到接口层的PAM API和配置文件,这部分内容将在后文中加以介绍。

第二层:应用接口层。应用接口层位于PAM结构的中间部分,它向上为应用程序屏蔽了用户鉴别等过程的具体细节,向下则调用模块层中的具体模块所提供的特定服务。由上图可以看出,它主要由PAM API和配置文件两部分组成,下面将逐一介绍。

PAM API可以分为两类:一类是用于调用下层特定模块的接口,这类接口与底层的模块相对应,包括:

鉴别类接口:pam_authenticate()用于鉴别用户身份,pam_setcred()用于修改用户的私密信息。

帐号类接口:pam_acct_mgmt()用于检查受鉴别的用户所持帐户是否有登录系统许可,以及该帐户是否已过期等。

会话类接口:包括用于会话管理和记帐的 pam_open_session()和 pam_close_session()函数。

口令类接口:包括用于修改用户口令的 pam_chauthtok()。

第二类接口通常并不与底层模块一一对应,它们的作用是对底层模块提供支持以及实现应用程序与模块之间的通信等。具体如下:

管理性接口: 每组 PAM 事务从 pam_start()开始,结束于 pam_end()函数。接口 pam_get_item()和 pam_set_item()用来读写与 PAM 事务有关的状态信息。同时,能够用 pam_str()输出 PAM 接口的出错信息。

应用程序与模块间的通讯接口:在应用程序初始化期间,某些诸如用户名之类的数据可以通过 pam_start()将其存放在PAM接口层中,以备将来底层模块使用。另外底层模块还可以使用 pam_putenv()向应用程序传递特定的环境变量,然后应用程序利用pam_getenv()和pam_getenvlist()读取这些变量。

用户与模块间的通讯接口:pam_start()函数可以通过会话式的回调函数,让底层模块通过它们读写模块相关的鉴别信息,比如以应用程序所规定的方式提示用户输入口令。

模块间通讯接口:尽管各模块是独立的,但是它们仍然能够通过pam_get_item()和pam_set_item()接口共享某些与鉴别会话有关的公用信息,诸如用户名、服务名、口令等。此外,这些API还可以用于在调用pam_start()之后,让应用程序修改状态信息。

读写模块状态信息的接口:接口pam_get_data()和pam_set_data()用以按照PAM句柄要求访问和更新特定模块的信息。此外,还可以在这些模块后附加一个清除数据函数,以便当调用 pam_end()时清除现场。

由于 PAM 模块随需加载,所以各模块始化任务在第一次调用时完成。如果某些模块的清除任务必须在鉴别会话结束时完成,则它们应该使用 pam_set_data()规定清除函数,这些执行清除任务的函数将在应用程序调用 pam_end()接口时被调用。

;

一:C语言嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件 *** 作、队列、栈等。

二:Linux基础Linux *** 作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI,编译器GCC,调试器GDB和Make项目管理工具,ShellMakefile脚本编写等知识,嵌入式开发环境的搭建。

三:Linux系统编程重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。

四:Linux网络编程计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解>

五:数据结构与算法数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮性。此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。

六:C、QTC是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。

七:CortexA8、Linux平台开发通过基于ARMCortex-A8处理s5pv210了解芯片手册的基本阅读技巧,掌握s5pv210系统资源、时钟控制器、电源管理、异常中断控制器、nandflash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android *** 作系统开发流程。Android系统是基于Linux平台的开源 *** 作系统,该平台由 *** 作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。

八:驱动开发驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发 *** 作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARMCortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。

以上就是列出的关于一名合格嵌入式Linux开发工程师所必学的理论知识,其实,作为一个嵌入式开发人员,专业知识和项目经验同样重要,所以在我们的理论学习中也要有一定的项目实践,锻炼自己的项目开发能力。

makefile文件就是你的下面>

什么是 Linux ?什么是 *** 作系统?

要了解 Linux 之前,就不能不知道什么是 *** 作系统 ( Operation System, OS ),所以,首先我们来简单的说一说什么是 *** 作系统吧!先来想一想,当我们使用计算机时,屏幕上面显示的咚咚是由哪里来的?嗯!是由显示卡与屏幕显像的;那么你现在可以藉由网络看到这篇文章,则是藉由 Internet 、网络卡、网络线以及所有相关的电子器材与网络器材所完成的一项任务!如果你要看 VCD 呢?那么就需要光驱、光盘、声卡的发声等等的支持。这么说来的话,所以在『工作』的东西都是『硬件』的工作呀!对了!就是这些计算机硬件在工作的。那么硬件怎么工作呢?那就是藉由『 *** 作系统』来达成的啰!这个 *** 作系统就是在沟通你这个使用者跟硬件之间的讯息传递啦!也就是说,没有 *** 作系统,那么你的计算机硬件就只是一堆废铁,什么工作都不能做的!

那么 *** 作系统里面含有什么东西呢?简单的来说, *** 作系统主要分为两个东西,一个是『核心』、一个是『一堆核心提供的工具』我们以使用者常使用的 Windows 计算机来做一个简单的说明好了。大家应该都使用过 Windows 计算机里面的档案总管吧?那么当你开启档案总管的时候,他是否会显示你硬盘当中的资料?这个显示硬盘里面的资料,就是『核心』帮你做的,但是,你要核心去显示硬盘哪一个目录下的资料,则是由『档案总管』这个『工具』帮你达成的!这样可以理解吗?再来,如果您曾经使用过 Windows 2000 或 Windows XP 的话,那就更好了!你就应该听过有所谓的『FAT32 与 NTFS 档案格式』吧?在 Windows 98 这个早期的 Windows 版本中,他并无法读取或者是找到 Windows XP 的 NTFS 档案格式的硬盘,为什么呢?因为他的『核心』本来就不认识 NTFS 啊!所以,即使你有档案总管,但是由于核心根本不认识 NTFS ,所以,档案总管也是没有能力帮你达到你想要做的事情!这样应该就更清楚了吧?没错!你的整个硬件是由核心来管理的,而如果核心不认识你的硬件,那么你将无法使用该硬设备,例如上面提到的 NTFS 档案格式的硬盘!核心就是『 Kernel 』,他是一个 *** 作系统的最底层的东西,由他来掌管整个硬件资源的工作状态,而 Linux 有 Linux 自己的核心, Windows 也有他自己的核心。所以说,当有新的硬件加入到你的系统中的时候,那么若你的『 Kernel 』并没有支持他的时候,呵呵,这个新的硬件就肯定无法工作的,因为控制他的 Kernel 并不认识他呀!这样了解了吗?!先有个概略性的了解,后面我们提到『核心编译』的时候会在更详细的谈到他!

一般来说,Kernel 管理的事项有:

System call interface :一些服务与 kernel 沟通之后,将硬件的资源进一步的利用;

Process control :系统过程控制中心,所以核心编的越小越好;

Memory management :控制整个系统的内存管理;

File system management :档案系统的管理,例如 I/O 等等的工作啦!还有不同档案格式的支持啦等等,如果你的核心不认识某个档案系统,那么您将无法使用该档案格式的档案啰!例如上面提到的 Windows 98 不认识 NTFS 档案格式的硬盘;

Device drivers :就如同上面提到的,硬件的管理是 Kernel 的主要工作之一,当然啰,装置的驱动程序就是核心需要做的事情啦!好在目前都有所谓的『可加载模块』功能,可以将驱动程序编辑成模块,就不需要重新的编译核心啦!这个也会在后续的核心编译当中提到的!

所以啦!所有硬件的资源都是他来管理的!至于我们要达成一些工作时,除了藉由核心本身提供的功能 ( 例如上面提到的档案总管 ) 之外,还可以藉由其它的应用软件来达成喔!举个例子来说,你要看 VCD 影片是吧!那么除了 Windows 提供的媒体播放程序之外,你也可以自行安装 VCD 播放程序来播放 VCD 啰!这个播放程序就是应用软件啰,而这个应用软件可以帮你去控制核心来工作 ( 就是放映影片啰 ) ,因此,我们可以这样说,核心是控制整个硬件支持的咚咚,也是一个 *** 作系统的最底层,然而要让整个 *** 作系统更完备的话,那还需要含有相当丰富的核心提供的工具,以及核心相关的应用软件来支持!

OK!提到这里那么您知道 Linux 是什么了吗?呵呵!对啦!其实 Linux 就是一个 *** 作系统,这个 *** 作系统里头含有最主要的 kernel 以及 kernel 提供的工具啦!他提供了一个完整的 *** 作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭 Unix 良好的传统来的,所以相当的稳定而功能强大!此外,由于这个优良的架构可以在目前的个人计算机 ( X86 系统 ) 上面跑,所以很多的软件开发者将他们的工作心血移转到这个架构上面,那就是很多的应用软件啦!虽然 Linux 仅是其核心与核心提供的工具,不过,由于核心、核心工具与这些软件开发者提供的软件的整合,使得 Linux 成为一个更完整的、功能强大的 *** 作系统啰!我们可以将 Linux 的系统与使用者的相关性看成底下的图标:

图一、使用者、使用者接口与核心工具、核心、与硬件之相关性

约略了解 Linux 是何物之后,接下来,我们要谈一谈,『为什么说 Linux 是很稳定的 *** 作系统呢?他是如何来的?』

从 Unix 到 Linux 这一段历史

为什么大家常常会说, Linux 是很稳定的一套 *** 作系统呢?这是因为, Linux 他有个老前辈,那就是 Unix 家族啰!有这个前辈的提携,让 Linux 这个小老弟很快的就成为一套稳定而优良的 *** 作系统啦!所以,底下我们来谈一谈 Unix 到 Linux 的这一段历史吧!

早在 Linux 出现之前的二十年 ( 大约在 1970 年代 ), 就有一个相当稳定而成熟的 *** 作系统存在了!那就是 Linux 的老大哥『 Unix 』是也!怎么这么说呢?!他们这两个家伙有什么关系呀?这里就给他说一说啰!众所皆知的, Linux 的核心是由 Linus Torvalds 在 1991 年的时候给他开发出来的,并且丢到网络上提供大家下载,后来大家觉得这个小东西 ( Linux Kernel ) 相当的小而精巧,所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!但是为什么这的小东西这么棒呢?!然而又为什么大家都可以免费的下载这个东西呢?!嗯!等鸟哥慢慢的唬xx喔不!听我慢慢的道来!

一个没有完成的梦想: Bell, MIT 与 GE 的『 Multics 』系统

早期的计算机并不像现在的个人计算机一般,他可不是一般人碰的到的玩意儿,除非是军事或者是高科技用途才有可能接触到这类的 Computer !而如前面所言,有计算机硬件还需要 *** 作系统的配合才能够发挥计算机的效能,不过,在那个年代,由于计算机算是『奢侈品』,喔~应该说是『贵重物品』,所以,可能一间学校就只有一部大型主机当然,那个年代所谓的大型主机仍然无法提供适度的运算能力的。不过,既然只有一部大型主机,然而有许许多多的教师、学生要想要来使用,怎么办呢?为了解决这个问题,在 1960 年代初期,麻省理工学院 ( MIT ) 发展了所谓的『兼容分时系统 ( Compatible Time-Sharing System, CTSS )』,就字面上的意义来看,他主要让大型主机可以提供多个终端机联机进入主机使用主机的资源, ( 附带一提,当时的终端机 ( Terminal ) 本身并没有软件或者可供使用的资源,这些终端机要能使用,一定必需要联机登入主机之后,才能够使用主机的资源来工作!) 当时可以让约 30 位使用者联机使用主机。而为了让这个分时系统更加的强大,所以,在 1965 年前后由贝尔研究室 ( Bell )、 麻省理工学院 ( MIT ) 及奇异电器公司 ( GE ) 开始来共同开发一个名为 Multics 的大型计画,目标是想让大型主机可以联机 300 位以上的使用者。不过,在奋斗了四年之后,该计画仍然宣告不治喔!是失败啦!(注: Multics 有复杂、多数的意思。)

一个小型档案系统的产生:1969 年 Ken Thompson 的小型 file server system

在复杂的 Multics 系统的计画失败后,贝尔研究室当然就退出该计画。就在这个计画解散之后,曾经参与 Muitics 的贝尔研究室的成员 Ken Thompson 由于自己工作上的需求,需要一套档案存取的小型 *** 作系统,便在 1969 年的时候以 DEC 公司 ( Digital Equipment Corporation ) 的计算机 PDP-7 为硬件基准,设计了一个适合自己工作环境的小型档案系统,其中也含有他自行开发的一些小工具。那个系统就是最早期的 Unix 的源头!当初 Ken 设计这个档案系统时,主要是为了自己的存取方便所设计的简单 OS ,因此将原有的 Multics 系统大幅度的简化,不过,在当时还并没有 Unix 这个名词的出现!

Unix 的正式诞生:1973 年 Ritchie 等人以 C 语言写出第一个正式 Unix 核心

由于 Thompson 写的那个 *** 作系统实在太好用了,所以在 Bell 研究室内部广为流传,并且数度经过改版。到了 1973 年, Bell 研究室的 Dennis Ritchie 等人为了让这个系统的执行效能更佳化,所以使用编译效能更好的 C 语言将原有的 1969 年的那个系统之核心大幅度的改写过,并且确定该 *** 作系统名称为 Unix,呵呵!那就是最早的 Unix *** 作系统啰!不过,由于这个 *** 作系统是由这一群工程师所开发完成的,而且使用者也大多是这方面的工程师,因此造成了后来 Unix 系统接口较难被一般使用者接受的情况 @_@ (注: 相对于 Multics ,Unix 具有单一的意思!)

重要的 Unix 分支: 1977 年 BSD 的诞生

在 Unix 早期的发展中,有一件相当重要的事情,那就是 BSD 的诞生!由于 C 语言是一种高级语言,他可以被应用在不同的硬件架构上面,而 Unix 本身就是 C 语言写成的!在 Unix 发表之后, 柏克莱大学 ( Berkeley ) 的教授对于这个 *** 作系统相当的有兴趣,在经过取得 Unix 的原始码,并且几经修改之后,终于在 1977 年发表了第一代的 Berkeley Software Distribution ( BSD ) 。这个 BSD 是 Unix 的一个分支,他的发展对于 Unix 有相当大的影响,例如后来的 Sun 公司就是使用 BSD 发展的核心进行自己商业的 Unix 版本的发展的!

百家齐鸣的 Unix 版本:

由于 C 语言是一个相当高阶的程序语言,他与硬件没有很直接的相关性,例如你的 Windows 也可以执行 C 程序语言!而由于 Unix 是由 C 语言写成的,因此,也就是说,你只要经过稍微的原始码修改程序,就可以在不同的硬件架构上面执行这个 *** 作系统!后来,由于 Unix 的方便性,因此很多的商业公司及学术机构就加入这个 *** 作系统的研发啰。不过,也由于 Unix 的便利性与改写容易,因此就造成了很多的不同版本的 Unix 啰,例如 ATT 的 System V 、 加州大学的 BSD 版、 IBM 的 AIX 等等。

由于『 *** 作系统的核心 ( Kernel ) 必须要跟硬件配合,以提供及控制硬件的资源进行良好的工作!』,而在早期每一家生产计算机硬件的公司还没有所谓的『协议』的概念,所以每一个计算机公司出产的硬件自然就不相同啰!因此他们必须要为自己的计算机硬件开发合适的 Unix 系统,所以,他们自行开发的 Unix 当然只能配合本身的硬件配备啰!例如在学术机构相当有名的 Sun 、 Cray 与 HP 就是这一种情况,他们开发出来的 Unix 并没有办法在其它的硬件架构下工作的! ( 我们都称呼这种系统与配备为『超级计算机』 ) !由于没有厂商针对个人计算机设计 Unix 系统,因此,在早期并没有支持个人计算机的 Unix *** 作系统的出现 ( 当然,这是由于早期的个人计算机并没有现在这样风行就是了! ) ,每一家公司自己出的 Unix 虽然在架构上面大同小异,但是却真的仅能支持自身的硬件,所以啰,早先的 Unix 只能与服务器 ( Server ) 或者是大型工作站 ( Workstation ) 划上等号!

此外,由于版本太多了,而大家都是同样来自于 Unix 这个老祖宗,当然也都称自己是 Unix ,好了,如此一来,许多商业公司自然就会有类似的软件发表,喝!那么自然就有些许的商业纠纷啰!真是伤脑筋~

1984 年的 GNU 与 Free Software Foundation:

Unix 在商业上面的问题让许多对于 Unix 喜好者感到相当的忧心,其中一个就是有名的 Richard M Stallman 先生。他认为, Unix 是一个相当好的 *** 作系统,在这个系统上面,如果大家能够将自己所学的贡献出来,那么这个系统将会更加的优异!Stallman 先生认为最大的快乐就是让自己发展的良好的软件让大家来使用了!而且,由于每个人的工作环境 ( 指软硬件平台 ) 可能都不太相同,所以,他也强调应该要有 Open Source 的概念,让大家都能够分享这一份的心得!他认为,有了 Open Source 之后,你的程序将有很多的人可以帮忙检验,将使得 Unix 社群更佳的茁壮。为了自己的理想, Stallman 在 1984 年实际创立了 GNU 与 自由软件基金会 ( Free Software Foundation, FSF ),并创作了许多『自由软件』供大众来使用,此外,对于其作品以自由 ( free ) 的 GNU General Public License ( GPL ) 的授权模式提供大众使用。这个 FSF 的核心观念是『版权制度是促进社会进步的手段,版权本身不是自然权力。』对于 FSF 有兴趣或者对于 GNU 想要更深入的了解时,请参考朝阳大学的洪朝贵教授的网站,里面有更为深入的解说!而且,Stallman 的 GNU General Public License 一直强调 Free 这个字眼!他是这样说的:『"Free software" is a matter of liberty, not price To understand the concept, you should thik of "free speech", not "free beer" "Free software" refers to the users freedom to run, copy, distribute, study, change, and improve the software』大意是说,自由软件并不是指『免费』的,而是指具有『自由度, freedom』的软件,什么是自由度呢?也就是你在取得这个软件之后,可以进行修改、进一步发表与复制在不同的计算机平台上面。这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在 Unix 上面跑,但是经过原始码的修改之后,你将可以拿他在 Linux 或者是 Windows 上面来跑!Stallman 先生更直接对自由度下了这样的说明:

你可以根据任何你想要的提议 ( purpose ) 来跑这个 Free 的程序;

你可以在理解了这支 Free 的程序的运作之后,将他修改成你所想要的样式与功能;

你可以将你自己修改过的 Free 的程序再次的发表,以帮助你的朋友们;

你可以将这支 Free 的程序进行改良,并将改良过的程序公开发表,以造福社群!

简单的来说, GPL 授权具有几个特点:

任何软件挂上 GPL 授权之后,即为自由的软件,任何人均可取得,同时,亦可取得其原始码 ( Source Code );

取得 GPL 授权之软件后,任何人均可进行修改原始码,以符合自己的喜好;

除此之外,经过修改的 Source Code 应回报给网络社会,提供大家来参考!

但请特别留意,并非挂上 GPL 之后的软件就不可贩卖,这个是不同的两回事呦!举个例子来说,在 Red Hat 的官方网站上面提供 Red Hat 释出的 Linux 安装光盘提供大众下载,但是 Red Hat 本身依然有在卖 Linux 的套件,而且还卖的『很不便宜!』为何可以如此呢?呵呵!因为 Red Hat 他们卖的资料当中,含有相当大量经过整了的文件资料,这些资料虽然在网络上面可以下载,然而花了这么多的时间来整理这些资料,当然应该要给予相当程度的报酬啰!您说是吧!所以,请留意喔!并非 GPL 不可用来营利!

这个 GNU 对于后来的 Linux 有相当深远的影响,由于 Stallman 先生发展了 GNU 这个计画中,主力在推出各种方便而优异的工具软件,例如广为大家所知的 Emacs 文书编辑器、GCC, BASH然而没有作业平台怎么使用这些软件呢?然而,由于他倡导的自由软件,让后来的心血能很快的接触原始码来发展软件,这就是后来的 Linux 的故事这是后来的故事,等一下来说~

1988 年的图形接口 X-Free86 project:

有鉴于图形使用者接口 ( Graphical User Interface, GUI ) 的需求日益加重,在 1984 年由 MIT 与其它协力厂商首次发表了 X Window System ,并且更在 1988 年成立了非营利性质的 XFree86 这个组织。所谓的 XFree86 其实是 X window system 与 Free 及 x86 系统架构的整合名称呢!而这个 XFree86 的 GUI 接口更在 Linux 的核心 10 版于 1994 年释出时,整合于 Linux *** 作系统当中!

1991 年 芬兰大学生 Linus Torvalds 的一则简讯:

在后来的几年内,由于计算机硬件工业的强力运作,以 intel 主导的 x86 系统架构的个人计算机大行其道,所以个人计算机算是相当流行的一个机器了!但在此时,人们使用的大多还是旧旧而且需要吃很多系统资源的 DOS 系列或其它的 *** 作系统。 此时,有个芬兰的郝尔辛基大学 (Helsinki )Linus Torvalds 学生做了件不寻常的事情! Linus 手边有个 Minix 系统 ( 这也是 Unix 的分支 ) ,他对这个 *** 作系统相当的有兴趣!此外,由于当时他正好买了一部 386 的计算机,所以他就想说,咦!这个 Unix 这么棒!这么稳定,那我可不可以将他移植到个人计算机 ( X86 架构 ) 来使用呢?!好在由于 Stallman 提倡的 Open Source 风气,他得以接触到一些 source code ,而就经由这样的一个想法,呵呵!他就很有心的读取 Unix 的核心,并且去除较为繁复的核心程序,将他改写成可以适用于一般个人计算机的 x86 系统上面,到了 1991 年,他终于将 002 版的 hobby 放到网络上面供大家下载,并且由于 hobby 受到大家的肯定,相当多的朋友一起投入这个工作中!终于到了 1994 年将第一个完整的核心 Version 10 释出!并且造成目前的大流行由于 Linux kernel 的发展是由『虚拟团队』所达成的,大家都是透过网络取得 Linux 的核心原始码,经由自己精心改造后再回传给 Linux 社群,进而一步一步的发展完成完整的 Linux 系统,至于 Torvalds 先生是这个集团中的发起者。由于这个群策群力的缘故, Torvalds 先生将 Linux 定为同样造福大家的 GNU 授权模式!

企鹅的来源:

1994年发表 Linux 正式核心 10 的时候,大家要 Linus Torvalds 想一只吉祥物,怪怪的 Torvalds 突然想到小时候去动物园被一只企鹅追着满地打滚~还被咬了一口!既然想不到其它的吉祥物了,干脆就以这支企鹅来当吉祥物算了!所以,呵呵!目前我们常常看到这一只企鹅就是这么来的咯!

--------------------------------------------------------------------------------

什么是 distribution

好了,经由上面的说明,我们知道 Linux 是个『 *** 作系统』,而且他是 GNU 的授权模式,并且有个老大哥是 Unix 。不过,毕竟由 Torvalds 先生负责维护的 Linux 提供的仅是『核心』与『核心工具』的集合,对于需要更完整功能的 *** 作系统来说,毕竟还不够完备,例如如果你要桌面程序,还得要加入 X-Window 系统对吧!?如果你要架设 : >

以上就是关于Linux认证的概念全部的内容,包括:Linux认证的概念、Linux环境下C开发_linux搭建c语言开发环境、linux程序的意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10209161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存