the code linux(linux版软件网站)

本篇文章给大家谈谈the code linux,以及linux版软件网站对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

linux系统是怎么回事可以简单的介绍下吗

什么是 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的核心 1.0版于 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年,他终于将 0.02版的 hobby放到网络上面供大家下载,并且由于 hobby受到大家的肯定,相当多的朋友一起投入这个工作中!终于到了 1994年将第一个完整的核心 Version 1.0释出!并且造成目前的大流行.....由于 Linux kernel的发展是由『虚拟团队』所达成的,大家都是透过网络取得 Linux的核心原始码,经由自己精心改造后再回传给 Linux社群,进而一步一步的发展完成完整的 Linux系统,至于 Torvalds先生是这个集团中的发起者。由于这个群策群力的缘故, Torvalds先生将 Linux定为同样造福大家的 GNU授权模式!

企鹅的来源:

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

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

什么是 distribution

好了,经由上面的说明,我们知道 Linux是个『操作系统』,而且他是 GNU的授权模式,并且有个老大哥是 Unix。不过,毕竟由 Torvalds先生负责维护的 Linux提供的仅是『核心』与『核心工具』的集合,对于需要更完整功能的操作系统来说,毕竟还不够完备,例如如果你要桌面程序,还得要加入 X-Window系统对吧!?如果你要架设 WWW还得加入服务器软件对吧?所以,虽然 Linux的核心已经提供了相当多的支持与工具程序,但毕竟还不足以构成一个很完整的操作系统。

好在,由于 Linux的稳定性良好,并且可以在便宜的 x86架构下的计算机平台运作,所以吸引了很多的套件商与自由软件的开发团队在这个 Linux的核心上面开发相关的软件,例如有名的 sendmail, wu-ftp, apache等等。此外,亦有一些商业公司发现这个商机,因此,这些商业公司或者是非营利性的工作团队,便将 Linux核心、核心工具与相关的软件集合起来,并加入自己公司或团队的创意的系统管理模块与工具,而释出一套可以完整安装的操作系统,这个完整的 Linux操作系统,我们就称呼他为 distribution,或者是中文所谓的『安装套件』啰!当然啰,由于是基于 GNU的架构下,因此各家公司所发行的光盘套件是可以在网络上面自由下载的。不过,如果想要有较佳的服务,那么购买该公司发行的光盘也是不错的!

不过,由于发展的 Linux公司实在太多了,例如有名的 Red Hat, OpenLinux, Mandrake, Debian, SuSE等等,所以很多人都很担心,如此一来每个 distribution是否都不相同呢?这就不需要担心了,由于各个 distribution都是架构在 Linux Kernel下来发展属于自己公司风格的 distribution,因此大家都遵守 Linux Standard Base( LSB)的规范,也就是说,各个 distribution其实都是差不多的!反正用到的都是 Linux Kernel啊!只是各个 distribution里面所使用的各套件可能并不完全相同而已。所以啰,大家可以按照自己的喜好来选择 Linux的 distribution光盘啰!底下列出几个主要的 Linux发行者网址:

Red Hat:

Mandrake:

Slackware:

SuSE:

OpenLinux:

Debian:

Linpus:

UniteLinux:

当然发行套件者不仅于此,您可以查阅其它的 Linux新闻来发现喔!而其中中文化较为有名的就属 CLE这个套件发行者了!有兴趣的话也可以到底下的网页上看看!

CLE:

好了,那么哪一个安装套件比较好呢?!就如同 VBird前面提到的,每一个发行者所使用的 Linux核心其实是一样的,都是由 www.kernel.org开发出来的核心呀!所以其架构,甚至包括其档案放置的目录,都是大同小异的,基本上除了某些内容套件不太一样之外(例如有人使用 wu-ftpd有人使用 proftpd等等),其它的档案架构与指令系统其实几乎都是相同的,因此我们不去探讨哪一个套件比较棒!而是要来介绍如何学习与使用一个套件!至于下载的地点,网友提供了一个相当棒的多种 Linux distributions的下载网站:

www.linuxiso.org

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

Linux的功能与优缺点

Linux的起源:

前面提到了,Linus Torvalds先生一直以来就喜欢那个小小的操作系统核心,而核心是管理一个系统的最底层的东西,所有的硬件资源都是由 kernel来管控的!但是,就如同前面说的,早期的 Unix并不支持 x86的个人计算机架构,一直到了 1991年在 BBS里面 Linus先生贴了个小布告之后,才有了重大的转变: Hello everybody out there using minix-

I'm doing a(free) operation system(just a hobby,

won't be big and professional like gnu) for 386(486) AT clones.

这封 BBS的邮件即是由当时还是芬兰的大学生 Linus Torvalds所发表的,他说他修改了一个简单的操作系统核心,核心名称为 hobby,这个 hobby的核心( Kernel)即为第一个 Linux的核心系统!此外,由于他是基于 GNU的协议而开发这个操作系统,所以他是 Free的,任何人都可以下载使用!(注:hobby是个人兴趣,just a hobby, won't be big and professional like gnu,其意思是:仅为个人兴趣,不会玩得跟 gnu那么大啦~~~)

Linus所开发的这个 hobby是基于 Unix的系统所发展出来的,他将 Unix里面的很多资料又加以简化,并且使之可以适用于 intel主导的 x86的系统下(当初的个人计算机系统为 386与 486架构),因此当初他所发表的这个最新的系统核心就被称为 linus's unix,简称为 Linux!当然,由于这个核心很像是当时的 Unix系统,因此也称为 Unix-like系统啰!(注:其实 Unix-Like可以说是目前服务器类型的操作系统的统称啦!因为,不论是 FreeBSD, BSD, Sun Unix, SCO Unix, HP Unix, Red Hat Linux, Mandrake Linux等等,都是由同一个祖先『Linux』来的,因此,这些咚咚都被统称为 Unix-Like的操作系统啰!)

那么这个系统有什么特异功能呢?简单的说:

免费:由于他是基于 GPL( General Public License)的架构之下,因此他是 Free的,也就是任何人都可以免费的使用或者是修改其中的原始码的意思!这就是所谓的『开放性架构』,这对科学界来说是相当重要的!因为很多的工程师由于特殊的需求,常常需要修改系统的原始码,使该系统可以符合自己的需求!而这个开放性的架构将可以满足各不同需求的工程师!因此当然就有可能越来越流行啰!

配备需求低廉:而他可以支持个人计算机的 X86架构,系统资源不必像早先的 Unix系统那般,仅适合于单一公司(例如 Sun)设备!单就这一点来看,就可以造成很大的流行啰!

功能强大而稳定:也且由于功能并不会输给一些大型的 Unix工作站,因此,近年来越来越多的公司或者是团体、个人投入这一个操作系统的开发与整合工作!

独立作业:另外,由于很多的软件套件逐渐被这套操作系统来来使用,而很多套件软件也都在 Linux这个操作系统上面进行发展与测试,因此, Linux近来已经可以独力完成几乎所有的工作站或服务器的服务了,例如 Web, Mail, Proxy, FTP.....。

所以,目前他已经是相当成熟的一套操作系统啰!而且不耗资源又免费,呵呵,可以说造成微软相当大的压力呀!此外,由于他的系统硬件要求很低,加上目前很多的人由于『Intel的阴谋』(呵呵!开玩笑的,因为 Tom的硬件评论网站常常这样说 Intel的不是!呵!很好笑!)而造成手边有相当多的淘汰掉的硬件配备, Linux

linux系统下邮件服务器sendmail的配置

安装所需软件

sendmail.8.12.10.tar.gz  

cyrus-sasl-2.1.18.tar.gz 

安装步骤

1、       先安装cyrus-sasl-2.1.18.tar.gz,sendmail安装时要用到sasl(简单认证和安全层协议)的库文档的头文档。

解压缩:

# tar-zxvf cyrus-sasl-2.1.18.tar.gz

编译:

进入刚解压的源码目录,运行以下命令完成安装。

#./configure--prefix=/usr/local/sasl2--enable-login

一定要加--enable-login,因为SASL2默认不支持login这种验证方式,而OUTLOOK是通过

login来进行SMTP验证的。

#make          #编译

#make install       #安装

完成以上linux程式安装三步曲之后,就能够开始配置和测试了。

2、配置SASL

为了把SASL应用于sendmail认证,还需进行一些配置工作。sendmail会到/usr/lib目录下去

找SASL2库,而我们是把程式安装在/usr/local/sasl2中,为什么不把软件安装在/usr/lib目录

呢?这主要是为了好管理自已安装的软件啦。所以我们要在/usr/lib目录下做一个链接:

# cd/usr/lib

# ln-s/usr/local/sasl2/lib/*.

ok,接着要在/var/目录下建一个目录给saslauthd进程存在临时数据。

# cd/var

# mkdir state

# cd state

# mkdir saslauthd

注:假如没有这些目录,运行saslauthd时,会提示出错。

ok,接着为确保CYRUS-SASL2函数库知道怎样验证所收来的SASL认证请求,必须创建一

个SASL的配置文档来把MTA程式定义成一个SASL应用。配置文档名为Sendmail.conf(注

意是大写的S),位于/usr/lib/sasl2目录中,也就是/usr/local/sasl2/lib/sasl2这个目录,记得上

面新建的链接了吗?在该文档中您定义您希望使用的认证数据库方法,以下这个例子使用

saslauthd来验证认证请求。

# cd/usr/lib/sasl2

# echo'pwcheck_method: saslauthd'; Sendmail.conf

3、测试

ok,现在能够运行saslauthd了,并进行测试。

# cd/usr/local/sasl2/sbin

#./saslauthd-a shadow              

用shadow的用户和密码进行验证

#./testsaslauthd-u userid-p password

0: OK"Success."

假如出现以上信息,就说明saslauthd正常运行了。testsaslauthd程式默认是没有编译的,您

需要在源码目录树的saslauthd子目录中运行    # make testsaslauthd命令生成。

4、sasl2安装完成后,就要开始安装sendmail了。

先解压sendmail源码。

# tar-zxvf sendmail.8.12.10.tar.gz

假如要sendmail支持SASL,需要修改源码的位置配置文档site.config.m4。site.config.m4位

于源码目录树的devtools/Site。文档中应包含以下行:

PREPENDDEF(`confMAPDEF', `-DMAP_REGEX')

APPENDDEF(`confENVDEF', `-DTCPWRAPPERS-DSASL=2')

APPENDDEF(`conf_sendmail_LIBS', `-lwrap-lsasl2')

APPENDDEF(`confLIBDIRS', `-L/usr/local/sasl2/lib')

APPENDDEF(`confINCDIRS', `-I/usr/local/sasl2/include')

第一行配置正则表达式相关内容

第二、三行配置表示在sendmail程式中支持sasl2和tcp_wrapper(可通过hosts.allow和

hosts.deny控制访问)

第四、五行配置指出sasl2的库文档和头文档的位置。

ok,接着在编译前要建立一些用户和目录,并确保有正确的权限。

sendmail必须有一个set-group-id(默认是smmsp组)的程式来在一个组可写的目录中查询

排队邮件。所以我们要建立一个smmsp用户和组。并建立如下目录并配置相应的权限,具

体配置需要可查询源码目录树下sendmail/SECURITY文档。

# groupadd smmsp

# useradd smmsp-d/var/spool/clientmqueue-s/dev/null

# mkdir/var/spool/clientmqueue

# chown-R smmsp:smmsp/var/spool/clientmqueue 

# chmod-R 770/var/spool/clientmqueue 

# mkdir/etc/mail

# mkdir/var/spool/mqueue

# chmod go-w//etc/etc/mail/usr/var/var/spool/var/spool/mqueue

# chown root//etc/etc/mail/usr/var/var/spool/var/spool/mqueue

ok,接下来就能够进入源码目录树开始编译了。

#./Build-c

-c选项能删除上次编译产生的文档。

#./Build install

编译完成后就能够进行安装。

5、sendmail配置

要sendmail正常运行,还需配置几个文档,首先最重要的就是sendmail.cf文档了。他在源

码目录树下的cf/cf目录下有很多例子可参考。您能够拷贝使用。由于sendmail.cf中的语法

很复杂,所以不建议手工修改。我们能够以sendmail.mc文档配合sendmail-cf目录下的宏通

过m4预处理器自动生成。m4预处理器用来从一组宏文档中创建sendmail配置文档。宏文

件作为输入被读进来。宏被展开,然后写到一个输出文档。sendmail-cf目录一般放在/usr/share

目录下。其实sendmail-cf目录的内容和源码目录树下的cf目录的内容是相同的,所以,为

了确保sendmail-cf目录的内容和安装版本同步,要把源码目录树下的cf目录的内容拷贝到

/usr/share/sendmail-cf目录。

sendmail.mc配置文档内容如下:

divert(-1)

include(`/usr/share/sendmail-cf/m4/cf.m4')

VERSIONID(`linux setup for Red Hat Linux')dnl

OSTYPE(`linux')

dnl Uncomment and edit the following line if your mail needs to be sent out

dnl through an external mail server:

dnl define(`SMART_HOST',`smtp.your.provider')

define(`confDEF_USER_ID',``8:12'')dnl

undefine(`UUCP_RELAY')dnl

undefine(`BITNET_RELAY')dnl

dnl define(`confAUTO_REBUILD')dnl

define(`confTO_CONNECT', `1m')dnl

define(`confTRY_NULL_MX_LIST',true)dnl

define(`confDONT_PROBE_INTERFACES',true)dnl

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

define(`ALIAS_FILE', `/etc/mail/aliases')dnl

define(`STATUS_FILE', `/etc/mail/statistics')dnl

define(`UUCP_MAILER_MAX', `2000000')dnl

define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl

define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl

define(`confAUTH_OPTIONS', `A')dnl

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl              

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5

LOGIN PLAIN')dnl

dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')

dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')

dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')

dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')

dnl define(`confTO_QUEUEWARN', `4h')dnl

dnl define(`confTO_QUEUERETURN', `5d')dnl

dnl define(`confQUEUE_LA', `12')dnl

dnl define(`confREFUSE_LA', `18')dnl

define(`confTO_IDENT', `0')dnl

dnl FEATURE(delay_checks)dnl

FEATURE(`no_default_msa',`dnl')dnl

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

FEATURE(`mailertable',`hash-o/etc/mail/mailertable.db')dnl

FEATURE(`virtusertable',`hash-o/etc/mail/virtusertable.db')dnl

FEATURE(redirect)dnl

FEATURE(always_add_domain)dnl

FEATURE(use_cw_file)dnl

FEATURE(use_ct_file)dnl

dnl The'-t' option will retry delivery if e.g. the user runs over his quota.

FEATURE(local_procmail,`',`procmail-t-Y-a$h-d$u')dnl

FEATURE(`access_db',`hash-T;-o/etc/mail/access.db')dnl

FEATURE(`blacklist_recipients')dnl

EXPOSED_USER(`root')dnl

dnl This changes sendmail to only listen on the loopback device 127.0.0.1

dnl and not on any other network devices. Comment this out if you want

dnl to accept email over the network.

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')

dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires

dnl      a kernel patch

dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')

dnl We strongly recommend to comment this one out if you want to protect

dnl yourself from spam. However, the laptop and users on computers that do

dnl not have 24x7 DNS do need this.

FEATURE(`accept_unresolvable_domains')dnl

dnl FEATURE(`relay_based_on_MX')dnl

MAILER(smtp)dnl

MAILER(procmail)dnl

记得要使以下两个条语句有效,他的意思是假如access.db访问控制没有配置,则启用以下

验证方式进行smtp验证。

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl              

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5

LOGIN PLAIN')dnl

sendmail宏定义说明

divert(n)               为m4定义一个缓冲动作,当n=-1时缓冲被删除,n=0时开始一个新缓冲

OSTYPE定义宏所使用的操作系统,该宏允许m4程式增加同相关操作系统相关的

文档

Domain定义MTA将使用哪些域来传输邮件

Feature定义配置文档中使用的一个特定的功能集

Define定义配置文档中的一个特定的选项值

MASQUERADE_AS               定义sendmail来应答邮件的其他主机名

MAILER定义sendmail使用的邮件传输方法

dnl注释

完成sendmail.mc文档的编写后就能够用m4程式生成正式的sendmail.cf配置文档。语法如

下:

# m4 sendmail.mc; sendmail.cf

也能够用源码目录树下的cf/cf/Build命令生成。前提是您要在该目录下有一个sendmail.mc

文档。语法如下:

#./Build sendmail.cf

ok,接着就能够把sendmail.cf and submit.cf文档安装到/etc/mail目录中的,语法如下:

#./Build install-cf

其实也能够自已用cp命令拷贝的啦。记得把sendmail.mc文档也拷贝一份到/etc/mail目录,

以便以后修改配置时可重新生成sendmail.cf文档。

ok,接着到/etc/mail目录下配置一些文档。

# cd/etc/mail

# echo'examply.com';; local-host-names        接收邮件的主机名

# echo'localhost   RELAY' ;; access                用来拒绝或允许来自某个域的邮件,本例允许

本地转发。

# makemap hash access生成access.db数据库

# touch domaintable        用来把旧域名映射互新域名

# makemap hash domaintable来覆盖向指定域的路由

# makemap hash mailertable用来把用户和域名映射到其他地址

# makemap hash virtusertable别名数据库,文本形式。可参照源码目录树下

sendmail/aliases文档。

# newaliases                 从文本文档中创建一个新的别名数据库文档。

# sendmail-v-bi       调试启动。

/etc/mail/aliases: 42 aliases, longest 10 bytes, 432 bytes total

假如出现以上提示信息,则启动成功。可用以下命令正式启动:

# sendmail-bd-q30m

该命令以后台进程方式(-bd)运行,并使其每隔30分钟(-q30m)轮询一次未发送邮件队

列,检查是否有新邮件。

服务器启动后,能够用telnet连接服务器。

# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is'^]'.

220 test.tigerhead ESMTP Sendmail 8.12.10/8.12.10; Tue, 30 Mar 2004 14:50:14+0800

ehlo test               您输入的命令,按回车结束。

250-test.tigerhead Hello LOCALHOST.localdomain [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN

250-DELIVERBY

250 HELP

以250-开头的为服务器的响应信息。注意倒数第三行,这就是成功配置smtp验证的显示。

输入quit离开。

安装完成后为确保系统安全,还需调整一些目录的权限。可参考sendmail源码目录下

sendmail/SECURITY文档。

# chmod 0640/etc/mail/aliases/etc/mail/aliases.{db,pag,dir}

# chmod 0640/etc/mail/*.{db,pag,dir}

# chmod 0640/etc/mail/statistics/var/log/sendmail.st

# chmod 0600/var/run/sendmail.pid/etc/mail/sendmail.pid

-r-xr-sr-x       root  smmsp       .../PATH/TO/sendmail

drwxrwx---       smmsp smmsp       .../var/spool/clientmqueue

drwx------       root  wheel       .../var/spool/mqueue

-r--r--r--       root  wheel       .../etc/mail/sendmail.cf

-r--r--r--       root  wheel       .../etc/mail/submit.cf

6、sendmail功能介绍

aliases别名数据库配置

test:       test1,test2,test3       配置test群组别名,test不是个实际的用户,只是个别名。发给

test的信,test1,2,3都可收到。

test:       test,testbak               在testbak邮箱中备份test的邮件。

test:       test,test@163.com       远程邮件备份,原理同上。

test:  :include:/etc/mail/userlist       使用用户列表配置群组。

userlist格式如下:

test1,/

test2,/

test3,/

test4

关于系统预设aliases,由于sendmail预设用mailer-daemon and postmaster作为资料传送者,

或邮件退回的帐号,但系统实际没有这两个帐号,所以要如下配置别名。

mailer-daemon: postmaster

postmaster:    root

配置完成后不要忘了用newaliases命令生成数据库。

~/.forward文档配置

其实该文档的作用和aliases数据库的作差不多啦,都是配置别名,做邮件转发的。因为alises

只能由管理员控制,个人用户不能修改,所以就能够在个人的目录下建立一个转寄文档。以

配置个人的邮件转寄列表。文档格式如下:

test

test1

test2

test3

and os on

但由于个人用户安全意识差,假如配置不当会有安全漏洞,不建议使用。

access访问控制列表配置

92.168 RELAY

test.NET       OK

test.COM REJECT

test.COM       550 SORRY,WE DON'T ALLOW SPAMMERS HERE

test.ORG       DISCARD

Ok--远程主机能够向您的邮件服务器发送邮件;

RELAY--允许中转;

REJECT--不能向您的邮件服务器发邮件和不能中转;

DISCARD--发来的邮件将被丢弃,同时并不向发送者返回错误信息。

nnn text--发来的邮件将被丢弃,但sendmail将会向发送者返回nnn确定的smtp代码和text

变量确定的文本描述。

配置完成后要用makemap hash access.db命令生成数据库。

mailq邮件队列查询命令。

Q-ID邮件id号。

Size邮件容量。

Q-Time邮件进入队列(也就是/var/spool/mqueue目录)的时间和不能邮寄的原因。

Sender/Recipient       发信和收信人的邮箱地址。

mailstats邮寄状态查询命令,可查询sendmail运行作至今邮件收发总计资料。

M    :

msgsfr:发送的邮件数量。

bytes_from:邮件容量

megsto:收到邮件的数量。

bytes_to:同上

msgsrej:邮件deny的次数。

msgsdis:邮件discard的次数。

Mailer:esmtp对外邮件,local本地邮件。

mail邮件命令

mail       查看/var/spool/mail/目录下自已邮箱内容。以q退出把看过的邮件保存在

~/mbox中。

mail test@example.com               直接发邮件给人。

mail-s'title text' test@example.com把文档中内容邮寄出去。

mail-f~/mbox查看home目录下邮箱内容。

用mail发附件也是可行,要用到uuencode and uudecode命令进行编码。

编码:uuencode [file] name         example:uuencode hello hello;hello.uue  default input

is stdin;default output is stdout.

解码:uudecode [-o outfile] name   example:uudecode hello.uue能够用-o选项输出另外一个

文档名。

# uuencode~/.bashrc bashrc| mail-s'test uuencode'

test@example.com

五、其他配置。

要想更好的使用sendmail,常用到的一些配置:

1、限制最大邮件。

vi/etc/sendmail.cf

# maximum message size

O MaxMessageSize=5000000   (注:5M)

2、最大的群发数目。

vi/etc/sendmail.cf

# maximum number of recipients per SMTP envelope

O MaxRecipientsPerMessage=20 (注:20个)

3、域名文档----local-host-name

能够用他来实现虚拟域名或多域名支持。

/etc/mail/local-host-name

v1mail.com

v2mail.com

.......

4、mail别名文档--aliases。

vi/etc/aliases

系统内部别名:peng:zpeng,hero,mmmn,yt  peng是我的用户名,其他的是别名,用逗号隔开。

转发到其他的邮箱:peng:zpeng@sina.com,yt.sohu.com

#newaliases  --写到库中

5、邮件控制文档--access

relay、ok、reject和discard。relay能够实现转发。ok是用来允许用户的任意访问,他会覆盖任何其他已建立的检查(实际配置中,最好别设这项,除非您对该用户是绝对信任的);reject能够实现对来访地址的拒绝,他根本就不容许该地址和您的邮件服务器进行连接通信;discard的作用是在接收到传输的邮件消息后,偷偷地把他丢弃掉(在发送者看来,他的邮件的确是接收了,但他并不知道,发送的目的地址根本不可能接收到他的邮件,服务器巧妙地欺骗了他。

vi/etc/mail/access.

localhost.localdomain   RELAY     ---允许

localhostRELAY

127.0.0.1                      RELAY

peng@sina.com             ok

@sexgirl.net                  reject

211.77.22.45                 discard

#makemap hash access.db写入库中

6、虚拟用户文档---virtusertable.

这个文档能够mail重名问题。

例如:您有两个域名,virt1.com and virt2.com,但是都有peng这个用户:

peng@virt1.com and peng@virt2.com,这是两个用户。但对于系统用户来说,他只认系统用户peng,只能通过一下改:

vi/etc/mail/virtusertable

peng@virt2.com  r010

这样就能够了。在新开一个用户r010,但是peng@virt2.com在客户端的pop3 and smtp server的用户名和口令要用r010的。

#makemap hask virtusertable.db

#/usr/sbin/sendmail-d0.1-bv root|grep SASL

NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS QUEUE SASL SCANF

我的问题已找到了是/usr/lib/sasl/Sendmail.conf的文档名中的S没有大写,问题已解决

linux下vsFTPd提示530 Login incorrect错误的原因

方法一:

   登录出现 vsftpd 530 login incorrect报错。

解决方法:

cp Path/RedHat/vsftpd.pam/etc/pam.d/ftp

path为vsftp解压缩源文件目录

这是因为我们RHEL启用了PAM,所在用到vsftp时需要用到/etc/pam.d/ftp这个文件(默认源码安装的不会有这个文件),因此除了匿名用户外本地用户无法登录。

方法二:

在测试Checkpoint的VPN1 R6x的时候,遇到了这个错误。这说明client端跟server端的连接性是没问题。但是就是想不出为什么,还以为是用户名和口令错误呢。后来才google了一下,发现是server端的配置有问题。

检查/etc/vsftpd/user_list和/etc/ftpusers,是这个文件/etc/vsftpd/vsftpd.conf少了一行:

复制代码

   

代码如下:

pam_service_name=vsftpd

   $ echo‘pam_service_name=vsftpd’/etc/vsftpd/vsftpd.conf

   $ service vsftpd restart

530 error就消除了!

下面是更详细的方法:

[root@atr-3-server1 admin]# cat/etc/vsftpd/vsftpd.conf

   # Example config file/etc/vsftpd.conf

   #

   # The default compiled in settings are fairly paranoid. This sample file

   # loosens things up a bit, to make the ftp daemon more usable.

   # Please see vsftpd.conf.5 for all compiled in defaults.

   #

   # READ THIS: This example file is NOT an exhaustive list of vsftpd options.

   # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's

   # capabilities.

   #

   # Allow anonymous FTP?(Beware- allowed by default if you comment this out).

   anonymous_enable=no

   #

   # Uncomment this to allow local users to log in.

   local_enable=YES

   #

   # Uncomment this to enable any form of FTP write command.

   write_enable=YES

   #

   # Default umask for local users is 077. You may wish to change this to 022,

   # if your users expect that(022 is used by most other ftpd's)

   local_umask=022

   #

   # Uncomment this to allow the anonymous FTP user to upload files. This only

   # has an effect if the above global write enable is activated. Also, you will

   # obviously need to create a directory writable by the FTP user.

   #anon_upload_enable=YES

   #

   # Uncomment this if you want the anonymous FTP user to be able to create

   # new directories.

   #anon_mkdir_write_enable=YES

   #

   # Activate directory messages- messages given to remote users when they

   # go into a certain directory.

   dirmessage_enable=YES

   #

   # Activate logging of uploads/downloads.

   xferlog_enable=YES

   #

   # Make sure PORT transfer connections originate from port 20(ftp-data).

   connect_from_port_20=YES

   #

   # If you want, you can arrange for uploaded anonymous files to be owned by

   # a different user. Note! Using"root" for uploaded files is not

   # recommended!

   #chown_uploads=YES

   #chown_username=whoever

   #

   # You may override where the log file goes if you like. The default is shown

   # below.

   #xferlog_file=/var/log/vsftpd.log

   #

   # If you want, you can have your log file in standard ftpd xferlog format

   xferlog_std_format=YES

   #

   # You may change the default value for timing out an idle session.

   #idle_session_timeout=600

   #

   # You may change the default value for timing out a data connection.

   #data_connection_timeout=120

   #

   # It is recommended that you define on your system a unique user which the

   # ftp server can use as a totally isolated and unprivileged user.

   #nopriv_user=ftpsecure

   #

   # Enable this and the server will recognise asynchronous ABOR requests. Not

   # recommended for security(the code is non-trivial). Not enabling it,

   # however, may confuse older FTP clients.

   #async_abor_enable=YES

   #

   # By default the server will pretend to allow ASCII mode but in fact ignore

   # the request. Turn on the below options to have the server actually do ASCII

   # mangling on files when in ASCII mode.

   # Beware that turning on ascii_download_enable enables malicious remote parties

   # to consume your I/O resources, by issuing the command"SIZE/big/file" in

   # ASCII mode.

   # These ASCII options are split into upload and download because you may wish

   # to enable ASCII uploads(to prevent uploaded scripts etc. from breaking),

   # without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be

   # on the client anyway..

   #ascii_upload_enable=YES

   #ascii_download_enable=YES

   #

   # You may fully customise the login banner string:

   #ftpd_banner=Welcome to blah FTP service.

   #

   # You may specify a file of disallowed anonymous e-mail addresses. Apparently

   # useful for combatting certain DoS attacks.

   #deny_email_enable=YES

   #(default follows)

   #banned_email_file=/etc/vsftpd.banned_emails

   #

   # You may specify an explicit list of local users to chroot() to their home

   # directory. If chroot_local_user is YES, then this list becomes a list of

   # users to NOT chroot().

   #chroot_list_enable=YES

   #(default follows)

   #chroot_list_file=/etc/vsftpd.chroot_list

   #

   # You may activate the"-R" option to the builtin ls. This is disabled by

   # default to avoid remote users being able to cause excessive I/O on large

   # sites. However, some broken FTP clients such as"ncftp" and"mirror" assume

   # the presence of the"-R" option, so there is a strong case for enabling it.

   #ls_recurse_enable=YES

pam_service_name=vsftpd

   userlist_enable=YES

   #enable for standalone mode

   listen=YES

   tcp_wrappers=YES

阅读剩余
THE END