第
19
章 源码与
Tarball
套件管理程序
390
19.1
简介
如果笔者想在
Linux
服务器上运行网页服务器(
WWW Server
)服务,应该做些什么事?当然,
一定要“安装网页服务器的套件”。如果服务器上没有这个套件的话,也就无法启用
WWW
的服务。所
以,要在
Linux
上运行一些现在暂且没有的功能,就需要学会“如何安装套件”,这是很重要的一个课
题。
安装套件有什么难的?在
Windows
操作系统上安装套件时,不是一直按“下一步”就可以了吗?没
错,不过,因为如此,在
Windows
系统上的软件都是一模一样的,也就是说,您“无法修改该软件的
源码”,如果要增加或者减少该软件的某些功能,只能求助于当初发行该软件套件的厂商了。
或许您会说:“我不过是一般人,不会用到多余的功能,所以不太可能更改到程序代码部分”。如
果您这么想的话,很抱歉,这是有问题的。因为当前网络上的病毒、黑客软件、臭虫程序等,都可能
对主机上的某些软件造成影响(这是因为软件开发人员在编写之初可能并没有想到某些问题所致),
导致主机死机或其他数据损坏等。如果可以通过安全信息单位所提供的修改方式进行修改,那么将可
以快速自行修补好该软件的漏洞,而不必一定要等到套件开发商提供修补的程序包。要知道,提早补
洞是很重要的一件事。
因为
Linux
上的套件几乎都是经过
GPL
的授权,所以每个套件均提供源码,您可以自行修改该程
序代码,以符合您个人的需求。这就是开放源码(
Open Source
)的优点。不过,到底什么是开放源
码?这些程序代码是什么?
Linux
上可以执行的相关套件文件与开放源码之间是如何转换的?不同版
本的
Linux
能不能使用同一个执行文件?或者,执行文件是否需要通过源码部分重新进行转换?这些
都是需要弄清楚的概念。下面我们首先介绍源码与可执行文件。
19.1.1
什么是开放源码、编译器与可执行文件
我们先讨论一下什么是可执行文件?我们说过,在
Linux
系统上,一个文件能不能执行看的是有
没有可执行权限(
x
权限),不过,
Linux
系统真正认识的可执行文件其实是二进制文件(
binary
file
),例如
/usr/bin/passwd
、
/bin/touch
这些文件即为二进制的可执行文件。
或许您会说,
shell
脚本不是也可以执行吗?其实
shell
脚本只是利用
shell
(例如
bash
)这个程序
的功能进行一些判断,而最终执行的,除了
bash
提供的功能外,仍是调用一些已编译好的二进制文
件(
bash
本身就是二进制文件)。那么,我怎么知道一个文件是否为二进制呢?还记得我们在第
7
章
提到过
file
命令的功能吗?用它就是了。我们现在来测试一下:
#
先用系统文件测试看看:
[root@linux ~]# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
#
如果是系统提供的
/etc/init.d/syslog
呢?
[root@linux ~]# file /etc/init.d/syslog
/etc/init.d/syslog: Bourne-Again shell script text executable
如果是二进制文件而且可执行时,它就会显示执行文件类别(
ELF 32-bit LSB executable
),同时
会说明是否使用动态函数库(
shared libs
)。如果是一般的脚本,就会显示出
text executables
之类的字
样。
事实上,
syslog
的数据显示出
Bourne-Again
……
那一行,是因为脚本上第
1
行声明了
#!/bin/bash
,如果去掉