虽然现在已经完全是Linux的天下,不过我们了解一下这个曾经和Linux分庭抗礼,在服务器端各占半壁江山的系统,对我们深入理解Linux以及未来发展趋势,是有一定借鉴意义的。
第一个理由:FreeBSD 是一个免费的开源的操作系统
Linux 也是一个免费的开源的操作系统。不过 Linux 是基于 GNU General Public License 的,而 FreeBSD 是基于 BSD License 的。BSD License 比 GNU General Public License 更加宽松。 FreeBSD 的系统源码可以通过各种方式免费的得到。系统源码包括内核源代码和基本系统源 代码,如果你在安装系统的时候选择了安装源码,那么它就在 /usr/src 目录底下。如果你经常更新系统源代码,那么 经常看看 /usr/src/UPDATING 是个很好的习惯。同理, 如果安装了 Ports 系统,经常看看 /usr/ports/UPDATING 可以了解很多有用的信息。
源代码的作用有很多。如果你是一个系统软件或者应用软件开发者,你可以改进源代码为 FreeBSD 作出贡献,或者你参考系统源代码写出很棒的应用软件,或者你通过阅读源代码掌 握了很多知识、取得了经验。如果你是一个普通用户,可以通过从源代码配置编译系统获得 更高的系统性能。总之,开放的源代码不仅给用户提供了很多好处,也为 FreeBSD 系统的 开发者提供了一个可能性,就是不同的人都可以通过源码找出系统中可以改进的地方并及时 反馈给系统开发者。
第二个理由:FreeBSD 是一个完整的系统
Linux 这个词指的是内核。当我们提到操作系统的时候,严格的用词应该是 GNU/Linux 或 者某个发行版的名字,比如:SUSE Linux,Debian GNU/Linux,CentOS, Fedora, Ubuntu Linux,Mandriva Linux 等。这些发行版使用的都是相同的 Linux 内核,可能只是内核的 版本有差异而已。各个发行版的系统结构可能都是不同的:比如系统启动的脚本,文件系统 的布局,系统和软件升级的方式方法,默认桌面环境等。
而 FreeBSD 这个词指的是一个完整的系统,包括内核,系统环境,应用软件,各种文档等。 不严格地说,Ubuntu 和 RedHat 之间的关系就有点像 FreeBSD 和 NetBSD,OpenBSD。但是,后面这些 BSD 系统都是 从 4.4BSD 发展来 的,而 4.4BSD 本身就是一个完整的操作系统,不是一个孤单的内核。
(FreeBSD被认为是自由操作系统中的不知名的巨人。它不是Unix,但如Unix一样运行,兼容POSIX。作为一个操作系统,FreeBSD被认为相当稳建可靠。)
FreeBSD 有一个 Core Team 来管理这个项目。这些 Core Team 成员是从为数众多的 Committer 中选举出来。这些 Committer 有权力对 FreeBSD 的内核代码进行维护,改进,升级等。 Core Team 和 Committer 对 FreeBSD 的内核代码质量有严格的把关。FreeBSD 的人经常说: 有问题的代码不能在这里生存。而 Linux 的内核掌握在 Linus Torvalds 手 里。所有有能力的人都可以对 Linux 内核作贡献。也就是 Eric S. Raymond 所说的 市集开发模式。 从管理模式来说,Linux 内核的代码质量相对要低一些。因此,如果是求稳定的话, FreeBSD 肯定是不二的选择。
FreeBSD 的应用软件要通过 Ports 系 统 来安装管理。所有的软件都经过特殊的设置来配合 FreeBSD 系统。这 些特殊的配置包括编译的参数,安装的路径,文档的存放等。这样可以方便的管理,安装, 卸载应用软件,而不需要太多人工的参与。而 Linux 系统的应用软件管理则比较混乱,各 种发行版都不相同。不过越来越多的 Linux 发行版都在向 Ports 系统学习。典型的比如 Debian/GNU Linux 的 APT。FreeBSD 的 Ports 系统更新是相当快的。随着系统的每次升级,Ports 系统都会有活跃的更新,以便使 各种应用软件跟上系统的升级。
第三个理由:FreeBSD 有清晰的目录结构
Linux 下目录结构有一个为人诟病的大缺点,就是文件存放的随意性。各种发行版可能都有 不同的选择。比如系统库,就有可能在 /usr/lib,或者 /lib 里面。比如 X (XFree86 或者 Xorg) 应用软件有可能放到 /usr/lib 里面。当一个 Linux 用户想要从源码编译安装 软件的时候,往往没有明确的标准来确定自己编译的软件到底应该安装在什么地方。他有可 能会作很多 symbolic link 把文件链接来链接去。系统里面经常留下很多失效的链接。而 FreeBSD 的目录结构是相当清晰的,我们可以看看一些目录作用的解释:
- /bin/ user utilities fundamental to both single-user and multi-user environments
- /boot/ programs and configuration files used during operating system bootstrap
- defaults/ default bootstrapping configuration files; see loader.conf(5)
- kernel/ pure kernel executable (the operating system loaded into memory
- at boot time).
- modules/ third-party loadable kernel modules; see kldstat(8)
- /etc/ system configuration files and scripts
- defaults/ default system configuration files; see rc(8)
- mail/ Sendmail control files
- mtree/ mtree configuration files; see mtree(8)
- namedb/ named configuration files; see named(8)
- pam.d/ configuration files for the Pluggable Authentication
- Modules (PAM) library; see pam(8)
- periodic/ scripts that are run daily, weekly, and monthly,
- via cron(8); see periodic(8)
- ppp/ ppp configuration files; see ppp(8)
- ssl/ OpenSSL configuration files
- /usr/ contains the majority of user utilities and applications
- compat/ files needed to support binary compatibility with
- other operating systems, such as Linux (created by
- sysinstall(8))
- include/ standard C include files
- lib/ shared and archive ar(1)-type libraries
- aout/ a.out archive libraries
- compat/ shared libraries for compatibility
- aout/ a.out backward compatibility
- libraries
- local/ local executables, libraries, etc. Also used as the
- default destination for the FreeBSD ports framework.
以上是 FreeBSD 系统下命令 # man hier 的输出的节选。 基本上每个目录都有特定的作用,什么东西放到哪里都有明确的规定。系统管理员在管理系 统的时候将从清晰的目录结构中得到很多益处。BSD 学院风格的严谨作风在这里体现得非常明显!
第四个理由:FreeBSD 可以方便的安装升级
Linux 各种发行版的用户肯定都有在网上到处寻找 rpm 的经历。而且很多用户都不敢贸然 升级自己的内核。如果要升级整个基本系统,对于很多 Linux 用户来说就是一个浩大而繁 杂的工程了。对于 FreeBSD 来说,升级只是一件很简单的事情。
从升级基本系统来说,FreeBSD 可以使用各种方式来升级。比如 Anonymous CVS、CVSup 等。或者也可以二 进制升级。比如,如果我要升级我的系统,可能我只需要如下的几个命令就可以轻松的完成:
- #cvsup stable-supfile
- #cd /usr/src
- #make buildworld
- #make buildkernel
- #make installkernel
- #reboot
- ... ...
- #mergemaster -p
- #cd /usr/src
- #make installworld
- #mergemaster
- #reboot
这些命令做了四件事情:第一是更新你的系统源码、第二是重新编译系统源码,第三是编译 安装新内核、第四是更新你的系统配置文件。这篇 The Cutting Edge 详细的解说了怎么更新你的系统。当然,我省略了内核的配置以及 mergemaster 这个命令的使用方法等。可能显得有点复 杂吧,不过与 Linux 相比,我觉得还是很简单容易上手的。
要安装升级应用软件,在 FreeBSD 下就更加简单了。如果你在安装系统的时候选择了安装 Ports 系统,那么你 只需要到 Ports 下相应的目录输入几个命令就可以轻松完成。比如,你要安装 Nvidia 的官方显卡驱动,那么你只 要:
- #cd /usr/ports/x11/nvidia-driver
- #make install clean
就可以自动完成驱动的安装和配置。当然,还有更加快捷的安装方法,使用命令 pkg_add -r nvidia-driver 可以从网上自动下载已经编 译好的驱动然后自动安装。FreeBSD 的官方文档 Using the Packages System 详细解说了 packages 的使用方法。如果是升级已经安装的驱动程序,则可以:
- #cd /usr/ports/x11/nvidia-driver
- #make deinstall reinstall clean
或者你可以使用 portupgrade 来升级已经安装的程序。
第五个理由:FreeBSD 的文档十分齐全
到目前为止,Linux 的文档在很多方面还比不上 FreeBSD 的文档。Linux 因为发行版的原因, 各种文档都纷繁复杂,难于寻找。而 FreeBSD 的文档几乎涵盖了系统的各个方面。对于 FreeBSD 的初学者来说,仔细阅读文档应该是必修的功课。国内的 FreeBSD 用户甚至翻译 了一个中文版本,这对 阅读英文有困难的 FreeBSD 中国用户来说是一个福音。
FreeBSD 的文档不仅包含最重要的 Handbook 和 FAQ,还有 专门给软件开发人员的 Developer's Handbook 和 Porter's Handbook。而且这些文档还只是所有 FreeBSD 文档的一个部分。Unix 系统的传 统 man 文档, GNU 的 Texinfo 文档等在 FreeBSD 中都很完整而详细。另外,FreeBSD 还有很多系统配置的例子 (一般这些例子都在 /usr/share/examples 和 /usr/local/share/examples 目录下)。这些例子对新手 系统管理员和普通用户是很好的帮助。
第六个理由:FreeBSD 很稳定而且性能优异
Linux 很稳定而且性能也很优异。在性能方面甚至要超过 FreeBSD ,比如文件系统的性能。 在 FreeBSD 的文件系统默认使用 softupdates 之前, FreeBSD 的磁盘性能一直是低于 Linux 的。虽然如此,Linux 的磁盘高性能是以牺牲系统 的稳定为代价的。在没有使用日志文件系统 之前,Linux 的文件系统使用会使用 async 模式将数据写入磁盘。而 FreeBSD 默认是使用 sync 模 式将数据写入磁盘。什么是 async 模式和 sync 模式?简单地讲, async 模式下系统往往把不太重要的数据写入内存或者 磁盘缓冲,等一段时间之后再把数据真正的写入磁盘。这样做的好处就是磁盘的读写效率比 较高,但是不安全。万一在数据真正写入磁盘之前系统突然掉电,那么那些你以为已经真正 写入磁盘的数据就会丢失。sync 模式是把所有应该写入 磁盘的数据都立即写入磁盘,这样的好处是数据比较安全,但是因为大量的读写操作导致磁 盘性能下降。FreeBSD 在版本 4 之前一直使用 sync 模 式来写入数据,安全是比较安全了,但是在文件系统性能方面就比不上 Linux 了。
Linux 开始使用日志文件系统之后,文件系统的稳定和安全通过日志系统得到了弥补。而 FreeBSD 没有采用日志文件系统,而是走了另一条道路,也就是 softupdates。softupdates 的原理就是强制 metadata 更新时的依赖检查。所谓 metadata 就是,比如磁盘的 i-node 和 v-node 之类的数据。这些数据描述了文件数据在磁盘上存储状态,不是一般的数据,所以叫 元数据。有了 softupdates 之后,FreeBSD 的磁盘性能有了很大的提高,而且在稳定性方面更加出色。FreeBSD 从版本 5 开始支持后台 fsck,就是后台文件系统检测。后台文件系统 检测可以让你在系统崩溃后重新开机时迅速恢复服务,而不需要像其他不支持这个特性的系 统那样,要等待 fsck 执行完毕之后才能进入到系统。 对于有海量硬盘的系统,这是一个非常吸引人的特性。
另外,在网络方面。FreeBSD 的性能也是相当优异的。在很重的负载之下,FreeBSD 仍然可 以稳定的运行。这也是很多网络服务器采用 FreeBSD 的原因之一。
|