包管理工具apt
和yum
文章目录
一、RPM与DPKG简介
发布源码
在 Linux 的发展过程中,出现了很多开源软件,它们都会使用 tarball 来发布源代码。
发布安装包
而 Linux 发行厂商或社区则会将这些源代码在特定的硬件编译后,将安装所需的文件打包成一个特殊的格式并发布。
软件管理机制
被发布的软件就是一个适用于指定 Linux 发行版本的安装包,用户可以通过安装命令进行安装。在安装包中,会包含检测系统与软件依赖的脚本,在安装前进行环境检测,若符合安装条件,就会安装该软件。
软件安装后还会将相关信息写入软件管理机制中,以便将来进行软件的升级或删除等。
1、软件管理器
通过源码编译安装的方式,可以将相同的软件安装在几乎所有的 Linux 发行版。但编译过程比较长,安装过程比较繁琐。如果能像 Windows 那样,由开发者将源码在已知的环境中配置并编译好,而用户直接安装会省很多力气。
这时,软件管理器应运而生。软件管理器是 Linux 发行厂商或社区提供,可以在特定的 Linux 发行版本上,进行软件安装、卸载、升级、验证等功能的软件管理程序。
在 Linux 系统中主要有两种软件管理器,分别是 RedHat 的 RPM
和 Debian 的 DPKG
。
-
RPM - 由 Red Hat 公司开发,Fedora、CentOS 等发行版本都使用该软件管理器。
-
DPKG - 由 Debian 社区开发,Ubuntu 等发现版本都是用该软件管理器。
yum 与 apt
无论是 RPM 还是 DPKG,都会遇到软件依赖问题。如,安装软件 A 时,需要先安装软件 B,而安装软件 B 又要先安装软件 C。因此,需要一种依赖管理机制。
RPM 和 DPKG 都提供了在线升级机制,能够从指定的服务器自动下载安装包,并能自动处理依赖关系,且可以一次性自动安装软件及其依赖。
在 RPM 中,使用 yum 命令进行软件安装、依赖管理、在线升级等。
而在 DPKG 中,则使用 apt,DPKG 提供了软件管理机制,但它并不具备在线安装、依赖管理等功能。而 apt 用于远程软件包的获取、依赖关系处理及安装管理等。。
2、RPM 软件管理器
2.1、RPM
RPM(Red-Hat Package Manager,红帽软件包管理器),遵循 GPL 规则且功能强大方便,让 Linux 软件更加易于安装、升级。
RPM 是一种预编译后的打包文件,其编译打包后的软件格式为 .rpm。通过 RPM 安装软件的方式类似如下:
清除命令:make clean
打包命令:make rpm
安装命令:rpm -ivh your-package.rpm
卸载命令:rpm -e your-package
RPM 具有以下优点:
RPM 包含了已编译的程序及配置文件,省去了用户编译的过程
RPM 在安装前会检查系统软硬件信息,避免软件被错误安装
RPM 文件本身提供了版本、软件依赖、软件用途等信息,方便了解软件信息
RPM 使用数据库记录了 RPM 文件的相关参数,方便升级、删除、查询等后期操作
2.2、SRPM-源码格式的RPM包
RPM 安装的是编译后的二进制软件安装包,这些安装包只能适用特定的 Linux 发行版,甚至相同发行版的不同版本。RPM 安装包要安装成功有一些必要,如:软件安装环境必须与打包环境一致、要满足软件依赖。
如果想使用其它发行版的软件该怎么办呢?这时可以使用 SRPM(Source RPM),SRPM 中包含了软件的源文件,SRPM 安装包通常使用 *.src.rpm 的命名方式。与Tarball不同,除了软件源代码外,SRPM 中还包含了软件配置文件(configure和makefile)。使用 SRPM 安装软件通常分为以下两步:
将软件源码编译为 RPM 文件
将 RPM 文件安装到系统中
相对于 RPM 来说,SRPM 有一定的好处,就是可以通过修改参数配置,生成自定义的 RPM 文件。
3、DPKG软件管理器
DPKG(Debian Pakager),是由 Debian 开发的一套管理套件。
DPKG 使用 .deb 作为预编译安装文件格式,通过 DPKG 安装软件的方式类似如下:
打包:dpkg -b ./your-package/ ./your-package.deb
卸载:dpkg -r your-package
安裝:dpkg -i your-package.deb
强制安装:sudo dpkg -i --force-depends
二、软件包管理工具
1、什么是apt-get
和Yum
?
apt-get
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。
Yum
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
Yum
和apt-get
的区别
[Linux] yum和apt-get用法及区别
一般来说著名的linux系统基本上分两大类:
-
RedHat系列:Redhat、Centos、Fedora等
-
Debian系列:Debian、Ubuntu等
RedHat 系列
1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数”
2 包管理工具 yum
3 支持tar包
Debian系列
1 常见的安装包格式 deb包,安装deb包的命令是“dpkg -参数”
2 包管理工具 apt-get
3 支持tar包
tar 只是一种压缩文件格式,所以,它只是把文件压缩打包而已。
rpm 相当于windows中的安装文件,它会自动处理软件包之间的依赖关系。
优缺点来说,rpm一般都是预先编译好的文件,它可能已经绑定到某种CPU或者发行版上面了。
tar一般包括编译脚本,你可以在你的环境下编译,所以具有通用性。
如果你的包不想开放源代码,你可以制作成rpm,如果开源,用tar更方便了。
tar一般都是源码打包的软件,需要自己解包,然后进行安装三部曲,./configure, make, make install. 来安装软件。
linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案,Redhat 有 yum,Ubuntu 有 apt-get
2、什么是Homebrew
?
Homebrew 简称 brew,是MacOS上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件。
Homebrew 官网有一句话:Homebrew complements macOS( Homebrew 使 macOS 更完整)。Homebrew 是 macOS 的套件管理工具,是高效下载软件的一种方法,相当于 Linux 下的 yum
、apt-get
神器,用于下载存在依赖关系的软件包。通俗地说,Homebrew 是类似于 Mac App Store 的一个软件商店。
三、Linux yum 命令
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum 语法
yum [options] [command] [package ...]
- options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
- command:要进行的操作。
- package:安装的包名。
yum常用命令
- \1. 列出所有可更新的软件清单命令:yum check-update
- \2. 更新所有软件命令:yum update
- \3. 仅安装指定的软件命令:yum install <package_name>
- \4. 仅更新指定的软件命令:yum update <package_name>
- \5. 列出所有可安裝的软件清单命令:yum list
- \6. 删除软件包命令:yum remove <package_name>
- \7. 查找软件包命令:yum search
- \8. 清除缓存命令:
- yum clean packages: 清除缓存目录下的软件包
- yum clean headers: 清除缓存目录下的 headers
- yum clean oldheaders: 清除缓存目录下旧的 headers
- yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
实例 1
安装 pam-devel
[root@www ~]# yum install pam-devel
Setting up Install Process
Parsing package install arguments
Resolving Dependencies <==先检查软件的属性相依问题
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated
filelists.xml.gz 100% |=========================| 1.6 MB 00:05
filelists.xml.gz 100% |=========================| 138 kB 00:00
-> Finished Dependency Resolution
……(省略)
实例 2
移除 pam-devel
[root@www ~]# yum remove pam-devel
Setting up Remove Process
Resolving Dependencies <==同样的,先解决属性相依的问题
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Removing:
pam-devel i386 0.99.6.2-4.el5 installed 495 k
Transaction Summary
=============================================================================
Install 0 Package(s)
Update 0 Package(s)
Remove 1 Package(s) <==还好,并没有属性相依的问题,单纯移除一个软件
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : pam-devel ######################### [1/1]
Removed: pam-devel.i386 0:0.99.6.2-4.el5
Complete!
实例 3
利用 yum 的功能,找出以 pam 为开头的软件名称有哪些?
[root@www ~]# yum list pam*
Installed Packages
pam.i386 0.99.6.2-3.27.el5 installed
pam_ccreds.i386 3-5 installed
pam_krb5.i386 2.2.14-1 installed
pam_passwdqc.i386 1.0.2-1.2.2 installed
pam_pkcs11.i386 0.5.3-23 installed
pam_smb.i386 1.1.7-7.2.1 installed
Available Packages <==底下则是『可升级』的或『未安装』的
pam.i386 0.99.6.2-4.el5 base
pam-devel.i386 0.99.6.2-4.el5 base
pam_krb5.i386 2.2.14-10 base
国内 yum 源
网易(163)yum 源是国内较好的 yum 源之一 ,无论是速度还是软件版本,都非常的不错。
将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。
安装步骤
首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)
- CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
- CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
- CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
mv CentOS6-Base-163.repo CentOS-Base.repo
运行以下命令生成缓存
yum clean all
yum makecache
除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。
中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html
阿里云的源:https://developer.aliyun.com/mirror/centos
四、Linux apt 命令
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
apt 语法
apt [options] [command] [package ...]
- options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
- command:要进行的操作。
- package:安装的包名。
apt 常用命令
-
列出所有可更新的软件清单命令:sudo apt update
-
升级软件包:sudo apt upgrade
列出可更新的软件包及版本信息:apt list --upgradeable
升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade
-
安装指定的软件命令:sudo apt install <package_name>
安装多个软件包:sudo apt install <package_1> <package_2> <package_3>
-
更新指定的软件命令:sudo apt update <package_name>
-
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>
-
删除软件包命令:sudo apt remove <package_name>
-
清理不再使用的依赖和库文件: sudo apt autoremove
-
移除软件包及配置文件: sudo apt purge <package_name>
-
查找软件包命令: sudo apt search
-
列出所有已安装的包:apt list --installed
-
列出所有已安装的包的版本信息:apt list --all-versions
实例
查看一些可更新的包:
sudo apt update
升级安装包:
sudo apt upgrade
可以将以下两个命令组合起来,一键升级:
sudo apt update && sudo apt upgrade -y
安装 mplayer 包:
sudo apt install mplayer
如过不太记得完整的包名,我们可以只输入前半部分的包名,然后按下 Tab 键,会列出相关的包名:
sudo apt install reds
以上实例我们输入来`reds`,然后按下`Tab`键,输出来四个相关的包。
redshift redshift-gtk redskull-br-meta redssocks
如果我们想安装一个软件包,但如果软件包已经存在,则不要升级它,可以使用 –no-upgrade 选项:
sudo apt install <package_name> --no-upgrade
安装 mplayer 如果存在则不要升级:
sudo apt install mplayer --no-upgrade
如果只想升级,不要安装可以使用 –only-upgrade 参数:
sudo apt install <package_name> --only-upgrade
只升级 mplayer,如果不存在就不要安装它:
sudo apt install mplayer --only-upgrade
如果需要设置指定版本,语法格式如下:
sudo apt install <package_name>=<version_number>
package_name 为包名,version_number 为版本号。
移除包可以使用 remove 命令:
sudo apt remove mplayer
查找名为 libimobile 的相关包:
apt search libimobile
查看 pinta 包的相关信息:
apt show pinta
列出可更新的软件包:
apt list --upgradeable
清理不再使用的依赖和库文件:
sudo apt autoremove