热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《UNIX/Linux系统管理技术手册(第四版)》——1.12查找和安装软件的途径

本节书摘来自异步社区《UNIXLinux系统管理技术手册(第四版)》一书中的第1章,第1.12节,作者:【美】

本节书摘来自异步社区《UNIX/Linux 系统管理技术手册(第四版)》一书中的第1章,第1.12节,作者:【美】Evi Nemeth , Garth Snyder , Trent R.Hein , Ben Whaley著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.12 查找和安装软件的途径

UNIX/Linux 系统管理技术手册(第四版)
第12章详细讲述了软件方面的知识。但是对于没有耐性的读者来说,这一节是个初级速成教材,教给读者怎样知道自己系统上已经安装好的软件有哪些,以及怎样获得和安装新软件。

现代操作系统把自己分成多个软件包,软件包可以逐个独立安装。默认安装的只包括一定范围的起步软件包,用户可以根据需要再扩充。

附加软件常常也以预先编译好的软件包形式提供,这是一种主流的方式,各个系统间的区别仅仅在于程度的不同。大多数软件都是由独立的小组开发,且以源代码的形式发布出来。接下来,软件库收集这些源代码,然后根据软件库为之服务的系统上的使用习惯,对其进行编译,再把编译结果打成软件包。安装针对特定系统的二进制软件包通常要比取得并编译原来的源代码更容易。不过,打包软件有时候要比当前版本落后一两个版本号。

两种系统使用相同的软件打包系统不一定意味着两个系统的软件包能够互换使用。例如,Red Hat和SUSE都使用RPM,但是它们的文件系统布局却稍有不同。如果能找到专为自己系统做的软件包,那就用它们,这是最好的做法。

主流的Linux发行版本都提供优异的软件包管理体系,里面包括能够访问和搜索Internet上软件库的工具。发行商替社区积极维护这些软件库,所以Linux系统管理员很少需要跳出自己系统上的默认软件包管理器。生活真美好。

UNIX系统在软件包管理方面显得畏手畏尾。Solaris、HP-UX和AIX都提供打包软件,在单机的层次上使用没问题。但是,这些系统的厂商却没有维护开源软件库,而让用户群大多进行自我维护1。遗憾的是,维系一个打包软件环境所依赖的纽带之一,是有一条途径可以让软件包可靠地检索其他软件包,从而掌握依赖性和兼容性方面的信息。没有某种中心作为协调,整个体系就会很快分崩离析。

在现实世界里,情形则各不相同。Solaris有一套附加系统(blastwave.org的pkgutil),可以方便地从Internet软件库安装软件,这和Linux发行版本上自带的系统很像。HP-UX有一个不错的Internet软件库,它采用了HP-UX移植和存档中心(HP-UX Porting and Archiving Centre)的形式,地址为hpux.connect.org.uk,但是必须手工逐个下载软件包。在这个领域内做得较差的典型,就是AIX,给它预先打包好的软件找起来很分散。

系统管理员没找到打好包的二进制软件,就必须采用老办法安装软件:下载一个tar源代码包,手工配置、编译和安装它。这个过程可长可短,取决于具体软件和操作系统。

在本书里,我们一般认为可选软件都已经装好了,并不折磨读者按生搬硬套的步骤去安装每个软件包。如果有可能发生混淆,我们有时候也会给出完成某个特定项目所需软件包的确切名称。但是,对于大部分内容来说,我们都不会重复讲述安装步骤,因为前后软件包的安装都很类似。

1.12.1 判断软件是否已经安装
出于各种原因,要判断实际需要的东西在哪个软件包里,需要有点儿小技巧。除了在软件包的级别上查找之外,更简单的做法是使用shell的which命令找出相关的二进制程序是否已经在搜索路径中。例如,下面的命令就揭示出已经在机器上安装了GNU的C编译器。

aix$ **which** gcc
/opt/pware/bin/gcc

如果which没有找到要找的命令,那么试试whereis;该命令搜索更大范围的系统目录,与shell的搜索路径无关。

另一种方法是采取作用非凡的locate命令,它参照预先编译好的一个文件系统索引,以此确定与特定模式相匹配的文件名。locate命令是GNU的findutils软件包里的一个程序,这个软件包在大多数Linux系统上都是默认包含的,但在UNIX系统上必须手工安装。

locate的搜索并不只针对命令或者软件包,而是能够找到任何类型的文件。例如,如果读者不能确定在哪儿能找到头文件signal.h,可以试试:

ubuntu$ **locate** signal.h
/usr/include/signal.h
/usr/include/asm/signal.h
/usr/include/asm-generic/signal.h
/usr/include/linux/signal.h

locate的数据库通常由updatedb命令定期更新,这条命令由cron来运行。因此,执行一次locate的结果不是总能够反映出文件系统新近的变化。

如果用户知道正在查找的软件包的名字,那么也可以使用系统上的软件包工具来直接检查是否有该软件包出现(以及已装软件的版本)。例如,在Red Hat或者SUSE系统上,下面的命令可以检查是否有Python脚本语言:

redhat$ **rpm -q python**
python-2.4.3-21.el5

参考第12章,了解有关软件包管理的更多知识。

1.12.2 增加新软件
如果需要安装额外的软件,首先要确定相关软件包的标准名称。例如,需要把“我想装locate”转换为“我需要安装findutils软件包”,或者把“我要named”转换为“我必须安装BIND”。在网上各种针对特定系统的索引能够帮助做转换,但是Google通常更有效。例如,搜索“locate命令”,就能直接找到若干与之相关的讨论。如果是在UNIX上,那么还需要输入操作系统的名字。

一旦知道了相关软件的确切名称,就可以下载并安装它。在Linux和安装了pkgutil的Solaris系统上,整个安装过程通常用一条命令就够了。对于HP-UX和AIX而言,则要么下载预编译好的二进制软件包,要么下载项目的源代码。如果是后者,需要通过Google定位该项目的正式网站,然后从项目的镜像站点之一下载源代码。

下面的例子展示了在我们的每一种示例系统上安装wget命令。它是一个很棒的GNU工具,能够把HTTP和FTP下载变成单条命令——对于脚本编程来说非常有用。我们所举的每种Linux系统默认都安装了wget,但是下面给出的命令用于初始化安装和后续升级。

Ubuntu使用APT(Debian Advanced Package Tool,Debian高级软件包工具):

ubuntu# apt-get install wget Reading package lists... Done Building dependency tree Reading state information... Done wget is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

SUSE版的操作:

suse# yast --install wget <在一个基于终端的UI里运行>

Red Hat版的操作&#xff1a;

redhat# yum install wget Loaded plugins: fastestmirror … Parsing package install arguments Package wget-1.10.2-7.el5.i386 is already installed and latest version Nothing to do

在已经装有pkgutil的Solaris系统上&#xff08;参考blastwave.org来了解配置说明&#xff09;&#xff1a;

solaris# /opt/csw/bin/pkgutil --install wget <安装了7个软件包产生的多页输出信息>

对于HP-UX&#xff0c;我们在hpux.connect.org.uk上找到了一个适用的二进制软件包&#xff0c;把它下载到/tmp目录下。解压缩和安装的命令如下&#xff1a;

hpux# gunzip /tmp/wget-1.11.4-hppa-11.31.depot.gz hpux# swinstall -s /tmp/wget-1.11.4-hppa-11.31.depot wget &#61;&#61;&#61;&#61;&#61;&#61;&#61; 05/27/09 13:01:31 EDT BEGIN swinstall SESSION (non-interactive) (jobid&#61;hpux11-0030) * Session started for user "root&#64;hpux11". * Beginning Selection * Target connection succeeded for "hpux11:/". * Source: /tmp/wget-1.11.4-hppa-11.31.depot * Targets: hpux11:/ * Software selections: wget.wget-RUN,r&#61;1.11.4,a&#61;HP-UX_B./800 * Selection succeeded. * Beginning Analysis and Execution … * Analysis and Execution succeeded.

在swinstall命令行里出现的depot软件包必须用/开头的完整路径&#xff1b;否则&#xff0c;swinstall就会到网络上找文件。最后的wget告诉swinstall从depot文件里安装哪个软件包。 遗憾的是&#xff0c;这个安装过程没有乍看上去那么简单。装好的wget版本实际上无法运行&#xff0c;因为没有装它所依赖的几个库。

hpux$ wget http://samba.org/samba/docs/Samba3-HOWTO.pdf /usr/lib/dld.sl: Can&#39;t open shared library: /usr/local/lib/ libcrypto.sl /usr/lib/dld.sl: No such file or directory [HP ARIES32]: Core file for 32 bit PA-RISC application [HP ARIES32]: /usr/local/bin/wget saved to /tmp/core.wget.

swinstall内置有依赖关系的管理机制&#xff0c;但是遗憾的是&#xff0c;它的这种功能不能延伸到Internet上的软件库里。用户不得不根据提示安装所有要求预装的软件包&#xff08;本例中有6个之多&#xff09;以达到最终目标。

1.12.3 从源代码编译软件
实际上&#xff0c;wget至少存在一种可用于AIX的二进制软件包&#xff0c;它是RPM格式的。用Google搜索“aix wget rpm”应该就能找到一些不错的线索。下载下来之后&#xff0c;安装命令很简单

aix# **rpm --install wget-1.11.4-1.aix5.1.ppc.rpm**

但为了演示&#xff0c;我们从源代码开始编译AIX版本的wget。

我们的第一项任务是找到代码&#xff0c;这很容易&#xff1a;用Google搜索“wget”得到的第一个结果就正好把我们指向GNU的wget项目&#xff0c;再点一下就能找到源代码的tar包。把当前版本的代码下载到/tmp目录里&#xff0c;再解开、配置和安装&#xff1a;

aix# **cd /tmp; gunzip wget-1.11.4.tar.gz**
aix# **tar xfp wget-1.11.4.tar**
aix# **cd wget-1.11.4**
aix# **./configure --disable-ssl --disable-nls** # 参考下面的注释
configure: configuring for GNU Wget 1.11.4
checking build system type... rs6000-ibm-aix

config.status: creating src/config.h config.status: executing default commands generating po/POTFILES from ./po/POTFILES.in creating po/Makefile
aix# **make**
<几页的编译输出>
aix# **make install**
<大约有一页的输出>

对于大多数UNIX和Linux软件来说&#xff0c;都可以依次执行configure/make/make install三条命令&#xff0c;只要已经安装了开发环境以及预先要求有的软件包&#xff0c;就会得到结果。不过&#xff0c;最好查看软件包的INSTALL或者README文件&#xff0c;了解该软件的特别之处。

在这个例子里&#xff0c;configure命令的两个选项--disable-ssl和--disable-nls省略了wget的一些特性&#xff0c;这些特性要依赖其他一些还没有安装的库。在实际中&#xff0c;用户可能想还是安装要求预装的那些库。使用configure--help查看所有的配置选项。另一个有用的配置选项是--prefix&#61;directory&#xff0c;这个选项可以把软件安装到/usr/local之外的其他目录里。



推荐阅读
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 如何在Lua中调用C语言编译的动态链接库
    本文介绍了如何在Lua中调用C语言编译的动态链接库。通过详细步骤和示例代码,帮助开发者理解和掌握这一技术。参考了《Lua编程入门》一书中的相关内容,并结合实际操作经验,提供了更加清晰和实用的指导。此外,还探讨了在不同操作系统下编译和链接Lua的方法,为跨平台开发提供了有价值的参考。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 在Windows环境下安装Python的dlib和cv2库时,首先需要安装Boost和CMake。由于CMake依赖于C编译器,因此建议安装Visual Studio,推荐版本为VS2015及以上。此外,确保CMake已正确配置到系统环境变量中,以便顺利编译dlib。安装过程中还需注意Python的版本兼容性,以避免潜在的错误。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • R语言中向量(Vector)数据类型的元素索引与访问:利用中括号[]和赋值操作符在向量末尾追加数据以扩展其长度
    在R语言中,向量(Vector)数据类型的元素可以通过中括号 `[]` 进行索引和访问。此外,利用中括号和赋值操作符,可以在向量的末尾追加新数据,从而动态地扩展向量的长度。这种方法不仅简洁高效,还能灵活地管理向量中的数据。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
author-avatar
辰S辰_588
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有