目录

前言

虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distribution的发行商来说,则有软件管理不晚的问题,毕竟不是每个人都会进行源代码编译的。这个问题将会严重的影响linux平台上软件的发行与推广。

为了解决上述的问题,厂商先在他们的系统上面编译好了我们用户所需要的软件,然后将这个编译好并可执行的软件直接发布给用户安装。不同的 Linux 发行版使用不同的打包系统,一般而言,大多数发行版分别属于两大包管理技术阵营: Debian 的”.deb”,和 Red Hat的”.rpm”。也有一些重要的例外,比方说 Gentoo, Slackware,和 Foresight,但大多数会使用这两个基本系统中的一个。

rpm

rpm命名“RedHat Package Manager”,简称则为rpm。这个机制最早由Red Hat这家公司开发出来的,后来实在很好用,因此很多distributons就使用这个机制来作为软件安装的管理方式,包括Fedora,CentOS,SuSE等知名的开发商都是用它。

rpm最大的特点就是需要安装的软件已经编译过,并已经打包成rpm机制的安装包,通过里头默认的数据库记录这个软件安装时需要的依赖软件。当安装在你的Linux主机时,rpm会先依照软件里头的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。

优点:

  • 软件已经编译打包,所以传输和安装方便,让用户免除编译
  • 在安装之前,会先检查系统的磁盘、操作系统版本等,避免错误安装
  • 软件的信息都已经记录在linux主机的数据库上,方便查询、升级和卸载

缺点:

  • 软件包安装的环境必须与打包时的环境一致或相当
  • 必须安装了软件的依赖软件
  • 卸载时,最底层的软件不能先移除,否则可能造成整个系统不能用

使用:

# 安装
rpm -ivh emacs-25.3-1.fc28.aarch64.rpm

# 更新
rpm –Uvh  foo-2.0-1.i386.rpm

#查询你的Linux是否有安装某个软件
rpm -q yum

#查询属于该软件所提供的所有目录与文件
rpm -ql yum

#仅列出该软件的所有设置文件
rpm -qc yum    

#仅列出该软件的所有帮助文档
rpm -qd yum    

#列出gcc这个软件的相关数据说明
rpm -qi gcc

# 找出/bin/sh是由哪个软件提供的
rpm -qf /bin/sh

#卸载
rpm -e gcc

yum

yum可以看作是CS架构的软件,yum的存在很好的解决了rpm的属性依赖问题。

yum通过依赖rpm软件包管理器, 实现了rpm软件包管理器在功能上的扩展, 因此yum是不能脱离rpm而独立运行的。

特点:

  • 可以同时配置多个资源库(Repository)
  • 简洁的配置文件(/etc/yum.conf)
  • 自动解决增加或删除rpm包时遇到的依赖性问题
  • 使用方便
  • 保持与rpm数据库的一致性

yum原理:

  • Server端先对程序包进行分类后存储到不同repository容器中; 再通过收集到大量的rpm的数据库文件中程序包之间的依赖关系数据, 生成对应的依赖关系和所需文件在本地的存放位置的说明文件(.xml格式), 存放在本地的repodata目录下供Client端取用

  • Cilent端通过yum命令安装软件时发现缺少某些依赖性程序包, Client会根据本地的配置文件(/etc/yum.repos.d/*.repo)找到指定的Server端, 从Server端repo目录下获取说明文件xxx.xml后存储在本地/var/cache/yum中方便以后读取, 通过xxx.xml文件查找到需要安装的依赖性程序包在Server端的存放位置, 再进入Server端yum库中的指定repository容器中获取所需程序包, 下载完成后在本地实现安装。

所以yum是一个在线的包管理工具,它需要网络支持。

使用:

#查询与ftp相关的软件有哪些
yum search ftp

#查询gcc这个软件的功能
#可以查询到该软件的版本号、描述信息、是否已安装等信息。
yum info gcc

#列出yum服务器上所提供的所有软件名称
yum list

#列出目前服务器上可供本机进行升级的软件有哪些
yum list updates

#列出提供passwd这个文件的软件有哪些
yum provides passwd

#查找以pam开头的软件名称有哪些
yum list pam*

# 安装
yum install emacs

# 升级
# update:后面接要升级的软件。若要整个系统都升级,就直接update即可。
yum update emacs

# 卸载
yum remove emacs

dpkg

dpkg - package manager for Debian (debian系统的包管理工具)。

dpkg is a tool to install, build, remove and manage Debian packages,dpkg是Debian的一个底层包管理工具,主要用于对已下载到本地和已安装的软件包进行管理。

dpkg这个机制最早由Debian Linux社区所开发出来的,通过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时能提供安装后的软件信息,实在非常不错。只要派生于Debian的其它Linux distributions大多使用dpkg这个机制来管理,包括B2D,Ubuntu等。

安装相关:

# --install, 安装软件包,必须是deb包的完整名称。(软件的安装可被拆分为两个对立的过程“解包”和“配置”)
dpkg -i package-name.deb 

# 解开软件包到系统目录但不配置,如果和-R一起使用,参数可以是一个目录
dpkg --unpack package-name.deb 

#“配置”:配置软件包
dpkg --configure package-name.deb 

#列出 deb 包的内容
dpkg -c package-name.deb 

卸载相关:

# --remove, 移除软件包,但保留其配置文件
dpkg -r package-name 
# --purge, 清除软件包的所有文件(removes everything, including conffiles)
dpkg -P package-name 

查询相关:

# --list, 查看系统中软件包名符合pattern模式的软件包
dpkg -l package-name-pattern 

# --listfiles, 查看package-name对应的软件包安装的文件及目录
dpkg -L package-name 

# --print-avail, 显示包的具体信息
dpkg -p package-name 

# --status, 查看package-name(已安装)对应的软件包信息
dpkg -s package-name 

# --search, 从已经安装的软件包中查找包含filename的软件包名称
dpkg -S filename-search-pattern 

apt

虽然我们在使用dpkg时,已经解决掉了软件安装过程中的大量问题,但是当依赖关系不满足时,仍然需要手动解决,而apt这个工具解决了这样的问题,linux distribution 先将软件放置到对应的服务器中,然后分析软件的依赖关系,并且记录下来,然后当客户端有安装软件需求时,通过清单列表与本地的dpkg以存在的软件数据相比较,就能从网络端获取所有需要的具有依赖属性的软件了。

apt原理:

Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)

然而,由于每位用户所处的网络环境不同,不可能随意地访问各镜像站点。为了能够有选择地访问,在Ubuntu系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址。

使用:

apt-get常用选项:

-h 本帮助文件。

-q 输出到日志 - 无进展指示

-qq 不输出信息,错误除外

-d 仅下载 - 不安装或解压归档文件

-s 不实际安装。模拟执行命令

-y 假定对所有的询问选是,不提示

-f 尝试修正系统依赖损坏处

-m 如果归档无法定位,尝试继续

-u 同时显示更新软件包的列表

-b 获取源码包后编译

-V 显示详细的版本号

-c=? 阅读此配置文件

-o=? 设置自定的配置选项,如 -o dir::cache=/tmp

apt-get常用命令:

#更新源
apt-get update 

#升级系统到相应的发行版(根据 source.list 的配置)
apt-get dist-upgrade 

#更新所有已经安装的软件包
apt-get upgrade

#安装软件包(加上 --reinstall重新安装)
apt-get install package\_name 

#安装指定版本的软件包
apt-get install package\_name=version 

#卸载一个已安装的软件包(保留配置文件)
apt-get remove package\_name 

#移除软件包(删除配置信息)
apt-get purge package\_name 

 或

apt-get --purge remove packagename

#检查是否有损坏的依赖
apt-get check 

#删除你已经删掉的软件(定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,您可以释放大量的磁盘空间。如果您的需求十分迫切,可以使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。大多数情况下您不会再用到这些.debs文件,因此如果您为磁盘空间不足 而感到焦头烂额,这个办法也许值得一试)
apt-get autoclean 

#把安装的软件的备份也删除,不过这样不会影响软件的使用
apt-get clean 

apt-cache常用命令:

apt-cache是一个apt软件包管理工具,它可查询apt的二进制软件包缓存文件。通过它我们可查询软件包的状态信息。

#显示软件的信息,包括版本号,安装状态和包依赖关系等。
apt-cache show package_name

#搜索软件包,可用正则表达式。
apt-cache search package_name

#显示软件包的依赖关系信息。
apt-cache showpkg package_name

#显示软件包的安装状态和版本信息。
apt-cache policy package_name

#显示指定软件包所依赖的软件包。
apt-cache depends package_name

#显示软件包的反向依赖关系,即有什么软件包需依赖你所指定的软件包。
apt-cache rdepends package_name

参考

Debian官方网站

Ubuntu官方网站

阿里云开源镜像站

网易开源镜像站

《鸟哥的Linux私房菜》


本文收藏来自互联网,仅用于学习研究,著作权归原作者所有,如有侵权请联系删除

markdown 9ong@TsingChan

引用格式为收藏注解,比如本句就是注解,非作者原文。