linux培训系列第五讲.pdf
《linux培训系列第五讲.pdf》由会员分享,可在线阅读,更多相关《linux培训系列第五讲.pdf(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、rrktqt的个人空间Linux培训系列作者:红联Linux培训系列第五讲欢迎学习“编译源代码和管理软件包”,在本教程中,我们将向您演示如何从源代码编译程序、如何管理共享库以及如何使用 Red Hat 和 Debian 软件包管理系统。内容基础,语言简短简洁红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋友学习。红联Linux门户:红联Linux论坛: Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联目录共享库共享库静态可执行程序与动态可执行程序比较动态链接相关性动态装入器ld.so.confld.so.c
2、acheldconfig 技巧LD_LIBRARY_PATH从源代码编译应用程序从源代码编译应用程序介绍下载解包列出压缩文档解包 bzip2 压缩的压缩文档bzip2 管道bzip2 管道(续)检查源代码配置使用配置-prefix 选项使用-prefixFHS 怎么样?该配置了该配置了(续)config.cache配置脚本和制作文件制作文件介绍调用 make安装make install安装之后好,完成了!可能出现的问题遗漏一些库其它问题其它问题(续)软件包管理概念软件包管理概念软件包管理的缺点rpm,Red Hat 软件包管理器rpm,Red Hat 软件包管理器安装 rpm重新安装一个 rp
3、m强制安装一个 rpm用-nodeps 安装或除去更新软件包用 rpm-q 查询博客:http:/2/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联用 rpm-ql 列出文件用 rpm-qp 查询软件包查询所有已安装的软件包查找文件的所有者显示相关性验证软件包的完整性验证已安装的软件包配置 rpmDebian 软件包管理Debian 软件包管理介绍 apt-get模拟安装软件包资源列表:apt-setup从 apt-get 到 dselect启动 dselect使用 dselect 的 Select 方式软件包状态安装和
4、配置(dpkg-reconfigure)获取已安装软件包的状态文件与其.deb 之间的链接查找要安装的软件包Linux海量文章海量Linux技术文章博客:http:/3/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联共享库共享库发布时间:2007-01-27 19:50:34Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。第二类是动态链接的可执行程序。我们将在
5、下页讨论这一内容。博客:http:/4/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联静态可执行程序与动态可执行程序比较发布时间:2007-01-27 19:51:11我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的:#ldd/sbin/sln not a dynamic executable“not a dynamic executable”是 ldd 说明 sln 是静态链接的一种方式。现在,让我们比较 sln 与其非静态同类ln 的大小:#ls-l/bin/ln/sbin/sln-rwxr-xr-x
6、 1 root root 23000 Jan 14 00:36/bin/ln-rwxr-xr-x 1 root root 381072 Jan 14 00:31/sbin/sln如您所见,sln 的大小超过 ln 十倍。ln 比 sln 小这么多是因为它是动态可执行程序。动态可执行程序是不完整的程序,它依靠外部共享库来提供运行所需的许多函数。博客:http:/5/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联动态链接相关性发布时间:2007-01-27 19:51:45要查看 ln 依赖的所有共享库的列表,可以使用 ld
7、d 命令:#ldd/bin/ln libc.so.6=/lib/libc.so.6(0 x40021000)/lib/ld-linux.so.2=/lib/ld-linux.so.2(0 x40000000)如您所见,ln 依赖外部共享库 libc.so.6 和 ld-linux.so.2。通常,动态链接的程序比其静态链接的等价程序小得多。不过,静态链接的程序可以在某些低级维护任务中发挥作用。例如,sln 是修改位于/lib 中的不同库符号链接的极佳工具。但通常您会发现几乎所有 Linux 系统上的可执行程序都是某种动态链接的变体。博客:http:/6/69制作于:2007-01-27 Pow
8、ered by X-Spacerrktqt的个人空间Linux培训系列作者:红联动态装入器发布时间:2007-01-27 19:52:19那么,如果动态可执行程序不包含运行所需的所有函数,Linux 的哪部分负责将这些程序和所有必需的共享库一起装入,以使它们能正确执行呢?答案是动态装入器(dynamic loader),它实际上是您在 ln 的 ldd 清单中看到的作为共享库相关性列出的 ld-linux.so.2 库。动态装入器负责装入动态链接的可执行程序运行所需的共享库。现在,让我们迅速查看一下动态装入器如何在系统上找到适当的共享库。博客:http:/7/69制作于:2007-01-27
9、Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ld.so.conf发布时间:2007-01-27 19:52:54动态装入器找到共享库要依靠两个文件 /etc/ld.so.conf 和/etc/ld.so.cache。如果您对/etc/ld.so.conf 文件进行 cat 操作,您可能会看到一个与下面类似的清单:$cat/etc/ld.so.conf/usr/X11R6/lib/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/usr/lib/mozilla/usr/lib/qt-x11-2.3.1/lib/usr/lo
10、cal/libld.so.conf 文件包含一个所有目录(/lib 和/usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。博客:http:/8/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ld.so.cache发布时间:2007-01-27 19:53:29但是在动态装入器能“看到”这一信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点:#ldconfig当 ldconfig 操作结束时,您会有一个最新的/etc/ld.so.cach
11、e 文件,它反映您对/etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看您在/etc/ld.so.conf 中指定的所有新目录。博客:http:/9/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联ldconfig 技巧发布时间:2007-01-27 19:54:03要查看 ldconfig 可以“看到”的所有共享库,请输入:#ldconfig-p|less还有另一个方便的技巧可以用来配置共享库路径。有时候您希望告诉动态装入器在尝试任何/etc/ld.so.conf 路径以前先尝试使用特定
12、目录中的共享库。在您运行的较旧的应用程序不能与当前安装的库版本一起工作的情况下,这会比较方便。博客:http:/10/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联LD_LIBRARY_PATH发布时间:2007-01-27 19:54:39要指示动态装入器首先检查某个目录,请将 LD_LIBRARY_PATH 变量设置成您希望搜索的目录。多个路径之间用逗号分隔;例如:#export LD_LIBRARY_PATH=/usr/lib/old:/opt/lib导出 LD_LIBRARY_PATH 后,如有可能,所有从当前
13、shell 启动的可执行程序都将使用/usr/lib/old 或/opt/lib 中的库,如果仍不能满足一些共享库相关性要求,则转回到/etc/ld.so.conf 中指定的库。我们已经完成了对 Linux 共享库的介绍。要了解有关共享库的更多内容,请输入 man ldconfig 和 man ld.so。博客:http:/11/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联从源代码编译应用程序从源代码编译应用程序介绍发布时间:2007-01-27 19:55:28假设您发现了一个特定的应用程序并想将它安装在系统上。您可
14、能需要运行这个程序的最新版本,但还没有这个最新版本的打包格式(如 rpm)。或许您只能得到这个特定应用程序的源代码格式,或者您需要启用缺省情况下在 rpm 中未启用的该程序的某些特性。无论什么原因,不管您必须还是仅仅因为您想从源代码编译该程序,本节将向您演示如何做。博客:http:/12/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联下载发布时间:2007-01-27 19:55:58首先,要找到并下载您要编译的源代码。它们可能在以.tar.gz、tar.Z、tar.bz2 或.tgz 扩展名结尾的单个压缩文档中。继续进
15、行,用您喜爱的浏览器或 ftp 程序下载这个压缩文档。如果这个程序碰巧有一个网页,那么最好访问该网页以熟悉所有可能有用的安装文档。您正在安装的程序可能依赖于许多当前在系统上已安装或未安装的其它程序。如果您确切知道该程序依赖的其它程序或库当前没有安装在系统上,则您需要先安装这些软件包(从象 rpm 那样的二进制软件包安装或同样从它们的源代码进行编译)。这样,您将为成功安装原始源代码文件做好准备。博客:http:/13/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联解包发布时间:2007-01-27 19:56:27解包源压
16、缩文档相对较简单。如果压缩文档名称以.tar.gz、.tar.Z 或.tgz 结尾,您应该可以通过输入以下内容来解包:$tar xzvf archivename.tar.gz(x 用于解压缩,z 用于 gzip 解压,v 用于显示详细信息 打印解压缩的文件名,而 f 意味着文件名将接着在命令行上出现)。几乎所有的“源代码 tar 包(tarball)”都将创建一个包含程序所有源代码的主目录。这样,当您解包这个压缩文档时,您的当前工作目录不会被大量的文件搞得乱七八糟 相反,所有的文件被整齐地组织在单个目录中,不会妨碍工作。博客:http:/14/69制作于:2007-01-27 Powered
17、by X-Spacerrktqt的个人空间Linux培训系列作者:红联列出压缩文档发布时间:2007-01-27 19:57:13时不时您会遇到这样的压缩文档,在对它解压缩时,会在您的当前工作目录中创建数量巨大的文件。尽管大多数 tar 包不是这样创建的,但这样的情况确有发生。如果您希望验证您的 tar 包被正确地组装在一起并会创建一个主目录来容纳源代码,您可以输入以下内容来查看其内容:$tar tzvf archivename.tar.gz|more(t 用于显示压缩文档的文本清单。不进行解压缩)。如果压缩文档清单的左边没有列出公共目录,则您要创建一个新的目录,将 tar 包移至该目录下,进
18、入该目录,这时再解压缩这个 tar 包。不这样做的话,您会面对一团乱麻!博客:http:/15/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联解包 bzip2 压缩的压缩文档发布时间:2007-01-27 19:57:47您的压缩文档有可能是.tar.bz2 格式。具有这种扩展名的压缩文档是用 bzip2 进行压缩的。bzip2 的压缩效果通常比 gzip 好得多。它唯一的不足之处是压缩和解压缩的速度较慢,并且在运行时,bzip2 比 gzip 消耗更多的内存。对于现代计算机,这不成问题,因此,可以预料 bzip2 会随
19、着时间的推移变得越来越流行。因为 bzip2 日益受到欢迎,所以许多 Linux 分发版(distribution)都带有经过补丁程序修正的 tar 版本,这样传递一个 y 或 i 选项将通知 tar:压缩文档是 bzip2 格式,需要用 bzip2 程序自动解压缩。要查看您是否带有用补丁修正过的 tar 版本,可以试着输入:$tar tyvf archive.tar.bz2|more或$tar tivf archive.tar.bz2|more即使两个命令都不起作用(而且 tar 提示参数无效),仍有办法 请继续阅读。博客:http:/16/69制作于:2007-01-27 Powered
20、by X-Spacerrktqt的个人空间Linux培训系列作者:红联bzip2 管道发布时间:2007-01-27 19:58:24哦,您的 tar 版本不能识别这些方便的 bzip2 快捷方式 该怎么办呢?所幸有一个简单的方法可以解压缩bzip2 tar 包的内容,并且这个方法几乎可以在所有的 UNIX 系统上工作,即使正被讨论的系统碰巧有一个非GNU 版本的 tar。要查看 bzip2 文件的内容,我们可以创建一个管道:$cat archive.tar.bz2|bzip2-d|tar tvf-|most接下来的这个管道实际上将解压缩 archive.tar.bz2 的内容:$cat ar
21、chive.tar.bz2|bzip2-d|tar xvf-博客:http:/17/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联bzip2 管道(续)发布时间:2007-01-27 19:58:57在前两个示例中,我们创建了一个标准的 UNIX 管道从压缩文档查看并解压缩文件。因为用了 f-选项来调用tar,因此它从标准输入(stdin)读取 tar 数据,而不是试图从磁盘上的文件读取数据。如果尝试用管道方法解压缩您的压缩文档的内容,而系统提示找不到 bzip2,则系统可能没有安装 bzip2。可以从 http:/ 下
22、载 bzip2 的源代码。安装 bzip2 源代码之后(通过遵照本教程),您才能首先解包并安装您希望安装的应用程序博客:http:/18/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联检查源代码发布时间:2007-01-27 19:59:28解包源代码之后,您可以进入解包的目录并检查其中的内容。最好是能找到所有与安装有关的文档。通常,这一信息可以在位于主源代码目录的 README 或 INSTALL 文件中找到。另外,可以查找 README.platform 和 INSTALL.platform 文件,这里的 platf
23、orm 是您的特定操作系统名称。博客:http:/19/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联配置发布时间:2007-01-27 19:59:55现在,许多源代码在主源代码目录中包含配置脚本。这个脚本(通常由开发人员使用 GNU autoconf 程序生成)特别设计用来设置源代码以使它们能在您的系统上正确编译。这个配置脚本在运行时会探测您的系统以确定系统性能,然后创建制作文件(Makefile),其中包含在您的系统上构建和安装源代码的指令。这个配置脚本几乎总是被命名为“configure”。如果您在主源代码目录中
24、找到配置脚本,那么它可以供您使用。如果您没有发现配置脚本,那么您的源代码可能带有一个设计用来跨越不同系统工作的标准制作文件 这意味着您可以略过以下配置步骤,在我们开始讨论“make”处继续学习本教程。博客:http:/20/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联使用配置发布时间:2007-01-27 20:00:28在运行配置脚本之前,最好是先熟悉它。输入./configure-help,您可以查看您的程序能够使用的所有不同配置选项。您所看到的选项,特别是在-help 打印输出的顶部列出的那些项,都是几乎可以在每
25、个配置脚本中找到的标准选项。在结尾部分列出的选项通常与您正尝试编译的特定软件包相关。查看它们并注意那些您希望启用或禁用的选项。博客:http:/21/69制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联-prefix 选项发布时间:2007-01-27 20:00:57大多数基于 GNU autoconf 的配置脚本都有-prefix 选项来允许您控制程序的安装位置。缺省情况下,大多数源代码安装时都用/usr/local 前缀。这意味着二进制文件最终在/usr/local/bin 中,手册页则在/usr/local/man 中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 培训 系列 第五
限制150内