一、自由软件的结构
一个自由软件的发行版本,总是有相同的文件结构,它通常包含下面几个文件:
INSTALL: 说明安装程序。
README: 关于这个程序的一般性信息(简介,作者,下载文件的地址,相关文件及连结等),如果没有INSTALL文件,通常会把简单的安装程序放在这个文件。
COPYING:其中包括了使用执照或是描述软件发地版本,有时LICENCE文件取代。
CONTRIB或CRED99vS :与这个软件相关人士的列表(积极参与者,中肯的评论,辅助软件)
CHANGE :有时这个文件会叫做NEWS,纪录最近改版及除错的状况
Makefile :有这个文件才能编译软件,但是通常在配置的过程中才会产生这个文件。
你会经常看到一个configure或Imakefile文件,可以让我们由这个文件产生Makefile文件。
一个存放原始码的目录:也是编译完成后存放二进制文件的地方,通常命名为src。
一个存放与软件相关文件的目录(通常是Texinfo或man的格式):,通常命名为doc。
有时会有一个目录存放软件的特定资料,用来放配置文件,产生资料的范例,或是资源文件。
二、 还原安装文件(解压缩)
在Linux的世界里,最常见的压缩格式,就是gzip格式,这是由GNU计画所开发,也是一种常用的压缩工具。
Gzip常和一个叫tar的公用程序同时使用,tar是一个历史悠久的程序,以前用来将资料储存在磁带上。现在软盘和光盘已经取代磁带,但是tar还是用来产生压缩程序,它可以将所有的文件及目录结合为一个文件,这个文件可以简单的用gzip压缩。这就是为何很多tar的压文件用gzip来压缩,所以这些压缩文件的后缀名为.tar.gz(
或者tgz)。
2.1 GNU Tar的使用
要解开以.tar.gz为后缀的压缩文件,先用gzip解压缩再用tar还原目录结构就可以解开了。但是GNU版本的tar会自己去直接调用gzip,所以在解压缩的时候也不用拆成两个步骤,当然也不会浪费多余的硬盘空间。
Tar的命令格式如下:
tar <文件选项> [文件名称]
[文件名称]:这个参数是可以省略的,如果省略了,会直接将整个压缩文件解开。对以tar.gz为后缀的压缩文件,该参数不是必要的。
例如:
$ tar xvfz guile-1.3.tar.gz
-rw-r--r-- 442/1002 10555 1998-10-20 07:31 guile-1.3/Makefile.in
-rw-rw-rw- 442/1002 6668 1998-10-20 06:59 guile-1.3/README
-rw-rw-rw- 442/1002 2283 1998-02-01 22:05 guile-1.3/AUTHORS
-rw-rw-rw- 442/1002 17989 1997-05-27 00:36 guile-1.3/COPYING
-rw-rw-rw- 442/1002 28545 1998-10-20 07:05 guile-1.3/ChangeLog
-rw-rw-rw- 442/1002 9364 1997-10-25 08:34 guile-1.3/INSTALL
-rw-rw-rw- 442/1002 1223 1998-10-20 06:34 guile-1.3/Makefile.am
-rw-rw-rw- 442/1002 98432 1998-10-20 07:30 guile-1.3/NEWS
-rw-rw-rw- 442/1002 1388 1998-10-20 06:19 guile-1.3/THANKS
-rw-rw-rw- 442/1002 1151 1998-08-16 21:45 guile-1.3/TODO
...
tar的选项说明如下:
v: 让tar进入监视状态,在解压缩过程中,会将所有压缩文件中的文件名显示出来,如果没有这个选项,在解压缩过程当中,将不会显示这些信息。
f:必要选项,代表要打开指定的压缩文件。否则,tar会去寻找磁带而不是文件来解压缩。
z:允许你处理gzip文件(后缀为.gz),如果没有这个选项,tar会产生错误信息,反过来说,如果压缩文件没有经过gzip处理过,请不要加这个参数。
tar允许对压缩文件进行解压缩、读取、压缩、新增文件等动作,执行这些动作的选项如下:
x: 从压缩文件中解出文件
t: 列出压缩文件中的内容
c: 产生压缩文件,可以利用这个指令备份个人资料。
r: 在压缩文件中增加新文件,但是新加的文件不能为压缩文件。
2.2 bzip2与gzip
bzip2是最近兴起的压缩格式,有逐渐取代gzip地位的趋势。Bzip压出的文件比gzip要小,但尚未成为标准,附属文件名.tar.bz2,是最近才出现的。
两个压缩程序有近似的语法:
Gzip [选项] [文件名称]
如果没有给文件名称,gzip及bzip2都会等着由标准输入取得资料并将结果送到标准输出,因此可以在这两个程序使用管道,两个程序也有一些相同的选项:
[1] [2] [3] 下一页
1.-1,....,-9: 设定压缩比,数字越大,压缩比越高但同时也就越慢,天下没有白吃的午餐。
2.-d: 解压缩文件案,等于使用gunzip或bunzip2。
3.-c: 将压缩或解压缩文件的结果打印到标准输出。
请注意!如果没有使用-c选项,gzip及bzip2在压缩完成后会删除源文件,在bzip2可以使用-k选项防止,但gzip就没办法啦!
接下来以几个例子作为说明,首先将所有现行目录中,扩展名为txt的文件用bzip2压缩:
$ bzip2 -9 *.txt
若想与某人分享文件的备份,但他只有gzip,所以要将最后的文件转换成为.gz格式,有些麻烦吧:(。没关系,下面这条命令无须将文件解压缩再重新压缩,只要解压缩到标准输出,利用管道,由标准输出压缩转向输出成新的备份文件:
Bzip2 -dc images.tar.bz2 gzip -9 >images.tar.gz
通过tar使用Bzip2的用法与gzip完全相同,唯一要做的是将选项z换成y,例如:
$ tar xvfy foo.tar.bz2
有一些发行版本会以I代替:
$ tar xvfI foo.tar.bz2
另外还有一种方式,看起来可移植性比较高, 可是却要多打不少字!?
$ tar --use-compress-program=bzip2 -xvf foo.tar.bz2
使用tar来处理.bz2格式压缩文件前,要确定bzip2已经被安装,而且PATH的环境变量中。
2.3 Just Do It!
2.3.1 最简单的方法
现在可以开始解压缩文件了,在这之前别忘了以系统管理者的身份来做这件事,因为以一般用户的身份,
是不被允许执行一部份程序的,即使可以,以系统管理者的身份来做,还是会简单很多。
第一步就是做备份,最好保持有一份原始压缩文件,当你安装好的程序毁了的时候,还可以重新安装,如果硬盘空间不够,可以将他备份在软盘上,再把硬盘上的压缩文件杀掉,当然如果确认当需要的时候,可由网络找到,可以不备份。
解压tar压缩文件后,通常会产生一个新目录(可以在解压缩前检查),进入这个目录,现在可以进行下一个步骤了。
2.4.2 最安全的方法
Linux系统有着较为完善的安全措施,一般用户无法执行危害到系统的操作(例如格式化硬盘),或改变其它用户的文件,同时也可以防止系统被病毒感染。
另一方面,超级用户root 可以做每一件事,甚至执行毁灭性的程序,拥有原始码可以检查这些不怀好意的程序代码(例如病毒或特洛依木马),对于这点最好小心一点。
有一个好方法,用addusr指令新增一个用户,让这个用户担任管理工作,它必须在下列目录具有写入的权限:
/usr/local/src, /usr/local/bin 及/usr/local/lib ,还有/usr/man下的所有子目录(或许还需要拷贝文件到其它地方),建议让这个用户或组拥有前述必要目录的写入权。做完这些预防措施后,就可以依照上面介绍的方法来做。
三、配置(configure)
在编译软件前,要对软件的运行环境进行设置。系统中,通常有好几个配置软件,你必须使用软件作者指定的,有时还要同时用到多个配置软件,如果如果在发行版本的主要目录中有configure这个文件存在通常使用Autoconf ;如果在发行版本的主要目录中有Imakefile这个文件就使用Imake。
3.1 Autoconf
Autoconf 是一个配置软件,产生的配置文件供编译程序(例如Makefile)使用,有时会直接修改原始码(例如在文件中使用config.h)。它的功能如下:
软件的程序设计师将编译软件所需做的测试(例如可以使用那个版本的函数库),依照规定的语法写在configure.in这个文件里。 程序设计师执行Autoconf,Autoconf读取configure.in的内容产生一个设定的命令槁,这个命令执行系统设定时,所应做的测试。最终用户执行这个命令,然后Autoconf 就做所有编译过程中所需的测试。
Autoconf使用范例:
$ ./configure
loading cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for main in -lX11... yes
checking for main in -lXPm... yes
上一页 [1] [2] [3] 下一页
checking for main in -lguile... yes
checking for main in -lm... yes
checking for main in -lncurses... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile
在configure 后加上环境变量,可对configure的产出好更好的的控制。例如:
$ ./configure --with-gcc --prefix=/opt/GN
(出处:http://www.sheup.com)
上一页 [1] [2] [3]
checking how to run the C preprocessor... gcc -E
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for ANSI C header files... yes
checking for unistd.h... yes
checking for working const... yes
updating cache ./config.cache
creating ./config.status
creating lib/Makefile
creating src/Makefile
creating Makefile
在configure 后加上环境变量,可对configure的产出好更好的的控制。例如:
$ ./configure --with-gcc --prefix=/opt/GN
(出处:http://www.sheup.com/)
上一页 [1] [2] [3] [4]