在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上能够成功运行的软件包括:
- 二进制可执行文件,一般在/usr/bin或者/usr/local/bin或者自己通过./configure --prefix指定的/prefix/bin下面,这样在终端输入即可运行;
- 头文件。这个头文件用于当其他软件依赖自己的时候加入。一般在/usr/include或者/usr/local/include下面。
- 库文件。一般在/usr/lib或者/usr/local/lib或者/prefix/lib/下
- 配置文件。一般在/etc/下
- 其他文件,例如man page等,一般在/usr/share或者/usr/local/share等
来一个例子,curl软件的安装,得到的结果是prefix下的四个目录:/bin,/include,/lib,/share
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 安装
目的 | rpm | dpkg |
---|---|---|
安装指定软件 | rpm -i pkgfile.rmp | dpkg -i pkgfile.deb |
2.2.2 查询
目的 | rpm | dpkg |
---|---|---|
显示所有已安装的软件名称 | rpm -qa | dpkg -l |
显示软件包含的所有文件 | rpm -ql softwarename | dpkg -L softwarename |
显示特定文件所属套件名称 | rpm -qf /path/to/file | dpkg -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 移除
目的 | rpm | dpkg |
---|---|---|
删除指定软件 | 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用来更新系统中已经安装了的软件包