在Linux下进行软件安装或者升级的时候,往往会Google到一些安装命令,包括

  • apt-get install *

  • dpkg -i *

  • yum install *

等等

执行之后软件安装了,也知道是在线安装了软件,但是这些命令背后做了什么,以及相互之间的关系和区别是什么?这是不清楚的,趁着清明写个博文总结之。

1 tarball(源码编译安装)

这是最早的软件安装方式,即通过源代码编译安装。所谓的 Tarball 文件,其实就是将软件的所有原始码文件先以 tar 打包,然后再以压缩技术来压缩。

Tarball 是一个软件包, 解压缩之后,里面的文件通常就会有:原始程序码文件;侦测程序文件 (可能是 configure 或 config 等档名);本软件的简易说明与安装说明 (INSTALL 或 README)。

一般通过:

./configure --prefix=*** --with-***
make
make install

来进行安装。

执行configure脚本往往是在检测环境,包括是否有适合的编译器、操作系统平台、是否存在本软件依赖的库文件(如果默认查找路径有就直接使用,如果没有就需要通过--with-*来进行指定)。在检测完毕如果条件满足,则生成Makefile(来自于Makefile.in)。

make、make install在干什么就很简单了,执行makefile的obj,然后进行编译安装。

那么软件安装成功得到的结果是什么呢?一般linux上能够成功运行的软件包括:

  1. 二进制可执行文件,一般在/usr/bin或者/usr/local/bin或者自己通过./configure --prefix指定的/prefix/bin下面,这样在终端输入即可运行;
  2. 头文件。这个头文件用于当其他软件依赖自己的时候加入。一般在/usr/include或者/usr/local/include下面。
  3. 库文件。一般在/usr/lib或者/usr/local/lib或者/prefix/lib/下
  4. 配置文件。一般在/etc/下
  5. 其他文件,例如man page等,一般在/usr/share或者/usr/local/share等

来一个例子,curl软件的安装,得到的结果是prefix下的四个目录:/bin,/include,/lib,/share

result.png

2 dpkg与RPM

显然通过源码安装是比较...费劲的事情,如果依赖库很多,如果源码里面没有提供,那么就需要用户自己去安装,然后再编译源码的时候指定相应的路径。如果 Linux distribution 厂商能够针对自己的作业平台先进行编译等过程,再将编译好的 binary program 释出的话,那由於我的系统与该 Linux distribution 的环境是相同的,所以他所释出的 binary program 就可以在我的机器上面直接安装,这样就省略了configure、编译的过程。

2.1 介绍

通过这种方式安装的方式有两种:

2.1.1 dpkg

这个机制最早是由Debian Linux 社群所开发出来的,透过dpkg 的机制, Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息。 只要是衍生于Debian 的其他Linux distributions 大多使用dpkg 这个机制来管理软体的, 包括B2D, Ubuntu 等等。

deb是Debian软件包格式,文件扩展名为.deb,跟Debian的命名一样,deb也是因Debra Murdock(Debian创始人Ian Murdock的前妻)而得名。 Debian包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成。 处理这些包的经典程序是dpkg,经常是通过apt来运作。通过Alien工具,可以将deb包转换成其他形式的软件包。

deb包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为data.tar.XXX;安装信息及控制脚本包,包含deb的安装说明,标识,脚本等,文件名为control.tar.gz;最后一个是deb文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。

2.1.1 RPM

这个机制最早是由Red Hat 这家公司开发出来的,包括Fedora, CentOS, SuSE 等等知名的开发商都使用。

2.2 使用方法

2.2.1 安装

目的rpmdpkg
安装指定软件rpm -i pkgfile.rmpdpkg -i pkgfile.deb

2.2.2 查询

目的rpmdpkg
显示所有已安装的软件名称rpm -qadpkg -l
显示软件包含的所有文件rpm -ql softwarenamedpkg -L softwarename
显示特定文件所属套件名称rpm -qf /path/to/filedpkg -S /path/to/file
查询软件信息

rpm -qip pkgfile.rpm

rpm -qlp pkgfile.rpm

dpkg -I pkgfile.deb

dpkg -c pkgfile.deb

查询某软件是否安装

rpm -q softwarename

rpm -qi softwarename

dpkg -l softwarename

dpkg -s softwarename

dpkg -p softwarename

2.2.3 移除

目的rpmdpkg
删除指定软件rpm -e softwarename

dpkg -r softwarename

dpkg -P softwarename

3 apt 与 yum

3.1 产生原因

虽然RPM与DPKG有效的解决的软件的安装,移除与查询的需求,但是在Linux上的软件管理还有一个很大的问题必须解决,就是各软件间的相依性(dependency)。 RPM与DPKG只能做到检查依赖,在安装或移除时告知相依性的不满足,接下来就需要使用者自行去找出所需的软件来安装。 这样的确是有点不方便,因此产生了前端工具软件APT及YUM。

YUM(Yellow dog Updater, Modified )是Yellow Dog Linux开发的。 Yellow Dog Linux是完全源于Red Hat,CentOS及Fedora的基本预设安装中即将YUM列入其内。

3.2 命令

3.2.1 apt

APT

安装:apt-get install packageName

移除:apt-get remove packageName

升级:apt-get update packageName

搜索相关包描述:apt-cache search packageName

显示更多描述细节: apt-cache show packageName

3.2.2 yum

查询

yum search packageName:查询与 packageName 有关的软件

yum info packageName:查询 packageName 软件的功能

安装/升级

yun install packageName

卸载

yum remove packageName

3.3 apt源

源就是当我们使用apt这个dpkg前端进行在线安装软件的时候,请求软件distribution的site。在/etc/apt/sources.list 文件中记录。

apt-get update来更新源,以获得新的软件包或者某个软件的升级

apt-get upgrade用来更新系统中已经安装了的软件包

登录发表评论 注册

反馈意见