在Linux平台下,软件包的类型可以划分为两类:源码包、二进制包;
一个软件要在Linux上执行,必须是二进制文件;
源码包:即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包);源码包是作者直接将源程序发布在网上,我们直接下载源文件,自己编译成二进制程序使用;
二进制包:如 Red Hat发行版的.rpm包,Debian发行版的.deb包;
二进制包方式安装:
linux主要两大派系:
RedHat 系列:Redhat、Centos、Fedora 等
常见的安装包格式 rpm 包,安装rpm包的命令是“rpm -参数”
包管理工具 yum。
Debian系列:Debian、Ubuntu 等
常见的安装包格式 deb 包,安装 deb 包的命令是“dpkg -参数”
包管理工具 apt-get
两者的区别是dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的软件包用apt可以再安装一遍,系统不知道之前安装过了,将会覆盖之前dpkg的安装。
1、dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件。
2、apt会解决和安装模块的依赖问题,并会咨询软件仓库, 但不会安装本地的deb文件, apt是建立在dpkg之上的软件管理工具。
rmp、yum、deb、apt-get区别:
rmp包
rmp 是 LINUX 下的一种软件的可执行程序,你只要安装它就可以了。这种软件安装包通常是一个RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后缀是.rpm
。
rmp是Red Hat公司随Redhat Linux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。
命令:
rpm -ivh rpm包名 #安装软件,下面是参数说明
##-i :install ,安装
##-v : --verbose ,显示详细信息
##-h:–hash,进度条
##–nodeps :安装前不需要检查依赖
rpm -Uvh rpm包名 #升级软件
rpm -e rpm包名 #卸载软件,其中如果在加上选项–nodeps ,表示卸载软件时,不检查依赖。这样会使那些使用软件包的软件在此之后可能会不能正常工作
rpm -qpi rpm包名 #查询软件包的详细信息:执行
###由于软件包比较多,一般会采取过滤。类如: rpm -qa | grep rpm软件包
rpm -qf rpm包名 #查询某个文件是属于那个rpm包的
rpm -qpl rpm包名 #查该软件包会向系统里面写入哪些文件
deb包
deb 是 Unix 系统(其实主要是 Linux )下的安装包,基于 tar 包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。
deb 包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;安装信息及控制脚本包,包含 deb 的安装说明,标识,脚本等,文件名为 control.tar.gz;最后一个是 deb 文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。
deb 本身可以使用不同的压缩方式。tar 格式并不是一种压缩格式,而是直接把分散的文件和目录集合在一起,并记录其权限等数据信息。之前提到过的 data.tar.XXX,这里 XXX 就是经过压缩后的后缀名。deb 默认使用的压缩格式为 gzip 格式,所以最常见的就是 data.tar.gz。常有的压缩格式还有 bzip2 和 lzma,其中 lzma 压缩率最高,但压缩需要的 CPU 资源和时间都比较长。
data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。
而 control.tar.gz 则包含了一个 deb 安装的时候所需要的控制信息。一般有 5 个文件:control,用了记录软件标识,版本号,平台,依赖信息等数据;preinst,在解包data.tar.gz 前运行的脚本;postinst,在解包数据后运行的脚本;prerm,卸载时,在删除文件之前运行的脚本;postrm,在删除文件之后运行的脚本;在 Cydia 系统中,Cydia 的作者 Saurik 另外添加了一个脚本,extrainst_,作用与 postinst 类似。
命令:
sudo dpkg -i xxx.deb # 安装软件包xxx.deb
sudo dpkg -R xxx # 安装目录xxx下所有的软件包
sudo dpkg -r xxx.deb # 卸载软件包xxx.deb,但是保留软件配置信息。有些软件会有个人设置的一些配置
sudo dpkg -P xxx.deb # 卸载软件包xxx.deb,且删除软件配置信息。
sudo dpkg -I xxx # 搜索软件包
sudo dpkg -l # 列出所有已安装的deb包,同时显示版本号以及简短说明
sudo dkpg -p xxx # 查看包的具体信息
sudo dkpg -L xxx # 查看一个软件包安装到系统里面的文件目录信息。很多人抱怨用了Ubuntu或者Debian以后,不知道自己的软件给安装到什么地方了,其实就可以用这个命令来查找
yum
YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS
中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包
并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次
次下载、安装。
命令
[root@localhost opt]# yum --help
已加载插件:fastestmirror, langpacks
Usage: yum [options] COMMAND
List of Commands:
check 检查 RPM 数据库问题
check-update 检查是否有可用的软件包更新
clean 删除缓存数据
deplist 列出软件包的依赖关系
distribution-synchronization 已同步软件包到最新可用版本
downgrade 降级软件包
erase 从系统中移除一个或多个软件包
fs Acts on the filesystem data of the host, mainly for removing docs/lanuages for minimal hosts.
fssnapshot Creates filesystem snapshots, or lists/deletes current snapshots.
groups 显示或使用、组信息
help 显示用法提示
history 显示或使用事务历史
info 显示关于软件包或组的详细信息
install 向系统中安装一个或多个软件包
langavailable Check available languages
langinfo List languages information
langinstall Install appropriate language packs for a language
langlist List installed languages
langremove Remove installed language packs for a language
list 列出一个或一组软件包
load-transaction 从文件名中加载一个已存事务
makecache 创建元数据缓存
provides 查找提供指定内容的软件包
reinstall 覆盖安装软件包
repo-pkgs 将一个源当作一个软件包组,这样我们就可以一次性安装/移除全部软件包。
repolist 显示已配置的源
search 在软件包详细信息中搜索指定字符串
shell 运行交互式的 yum shell
swap Simple way to swap packages, instead of using shell
update 更新系统中的一个或多个软件包
update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo Acts on repository update information
upgrade 更新软件包同时考虑软件包取代关系
version 显示机器和/或可用的源版本。
Options:
-h, --help 显示此帮助消息并退出
-t, --tolerant 忽略错误
-C, --cacheonly 完全从系统缓存运行,不升级缓存
-c [config file], --config=[config file]
配置文件路径
-R [minutes], --randomwait=[minutes]
命令最长等待时间
-d [debug level], --debuglevel=[debug level]
调试输出级别
--showduplicates 在 list/search 命令下,显示源里重复的条目
-e [error level], --errorlevel=[error level]
错误输出级别
--rpmverbosity=[debug level name]
RPM 调试输出级别
-q, --quiet 静默执行
-v, --verbose 详尽的操作过程
-y, --assumeyes 回答全部问题为是
--assumeno 回答全部问题为否
--version 显示 Yum 版本然后退出
--installroot=[path] 设置安装根目录
--enablerepo=[repo] 启用一个或多个软件源(支持通配符)
--disablerepo=[repo] 禁用一个或多个软件源(支持通配符)
-x [package], --exclude=[package]
采用全名或通配符排除软件包
--disableexcludes=[repo]
禁止从主配置,从源或者从任何位置排除
--disableincludes=[repo]
disable includepkgs for a repo or for everything
--obsoletes 更新时处理软件包取代关系
--noplugins 禁用 Yum 插件
--nogpgcheck 禁用 GPG 签名检查
--disableplugin=[plugin]
禁用指定名称的插件
--enableplugin=[plugin]
启用指定名称的插件
--skip-broken 忽略存在依赖关系问题的软件包
--color=COLOR 配置是否使用颜色
--releasever=RELEASEVER
在 yum 配置和 repo 文件里设置 $releasever 的值
--downloadonly 仅下载而不更新
--downloaddir=DLDIR 指定一个其他文件夹用于保存软件包
--setopt=SETOPTS 设置任意配置和源选项
--bugfix Include bugfix relevant packages, in updates
--security Include security relevant packages, in updates
--advisory=ADVS, --advisories=ADVS
Include packages needed to fix the given advisory, in
updates
--bzs=BZS Include packages needed to fix the given BZ, in
updates
--cves=CVES Include packages needed to fix the given CVE, in
updates
--sec-severity=SEVS, --secseverity=SEVS
Include security relevant packages matching the
severity, in updates
常用命令
install:安装rpm软件包
update:更新rpm软件包
check-update :检查是否有可用的更新rpm软件包
remove :删除指定的rpm软件包
list :显示软件包信息
clean :清理yum过期的缓存
deplist:显示yum软件包的所有依赖关系
修改网络yum源
默认的系统 YUM 源,需要连接国外 apache 网站,网速比较慢,可以修改关联的网络
YUM 源为国内镜像的网站,比如网易 163,aliyun 等。
1、先安装 wget, wget 用来从指定的 URL 下载文件
[root@hadoop101 ~] yum install wget
2、在/etc/yum.repos.d/目录下,备份默认的 repos 文件。
[root@hadoop101 yum.repos.d] pwd
/etc/yum.repos.d
[root@hadoop101 yum.repos.d] cp CentOS-Base.repo CentOS-Base
.repo.backup
3、下载网易 163 或者是 aliyun 的 repos 文件,任选其一
[root@hadoop101 yum.repos.d] wget http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云
[root@hadoop101 yum.repos.d] wget http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易 163
4、使用下载好的 repos 文件替换默认的 repos 文件
例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
[root@hadoop101 yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo
5、清理旧缓存数据,缓存新数据
[root@hadoop101 yum.repos.d]#yum clean all
[root@hadoop101 yum.repos.d]#yum makecache
yum makecache 就是把服务器的包信息下载到本地电脑缓存起来
6、测试验证
[root@hadoop101 yum.repos.d]# yum list | grep firefox
[root@hadoop101 ~]#yum
apt
apt是Linux软件包管理工具。
apt是一个命令行实用程序,用于在Ubuntu、Debian和相关Linux发行版上安装、更新、删除和管理deb软件包。
apt是为交互使用而设计的。最好在shell脚本中使用apt-get和apt-cache,因为它们在不同版本之间向后兼容,并且有更多选项和功能。
大多数apt命令必须以具有sudo权限的用户身份运行。
apt update
#从软件源服务器获取最新的软件信息并缓存到本地。
#因为很多apt的其他命令都是要通过比对版本信息来进行操作的,如果每次都去对比线上的版本信息效率肯定不理想,也没必要,所以做了一个缓存的机制。
apt upgrade
# 从本地仓库中对比系统中所有已安装的软件,如果有新版本的话则进行升级
apt list
#列出本地仓库中所有的软件包名
apt list [package]
#从本地仓库中查找指定的包名,支持通配符,比如"apt list zlib*“就能列出以zlib开头的所有包名
apt list --installed
#列出系统中所有已安装的包名
apt search [key]
#与list类似,通过给出的关键字进行搜索,列出所有的包和其描述
apt show [package]
#列出指定包的详细情况,包名要填写完整。
apt install [package]
#安装指定的包,并同时安装其依赖的其他包。
apt remove [package]
#卸载包,但不删除相关配置文件。包名支持通配符
apt autoremove
#卸载因安装软件自动安装的依赖,而现在又不需要的依赖包
apt purge [package]
#卸载包,同时删除相关配置文件。包名支持通配符
apt clean
#删除所有已下载的软件包
apt autoclean
#类似clean,但删除的是过期的包(即已不能下载或者是无用的包)
注意事项:
- apt与apt-get的区别
apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。
在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。
- /etc/apt/sources.list
-是包管理工具 apt 所用的记录软件包仓库位置的配置文件。
源码包安装
源码安装一般步骤:
1、下载源码包并解压到指定目录; //一般将源码包解压至目录/user/local/src下
2、预编译(配置)./configure; //设置安装目录,安装模块等选项
3、编译 make; //生成可执行二进制文件
4、安装make install; //复制二进制文件到系统,配置应用环境
Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure–help输出详细的选项列表; 配置这一步骤:把系统环境的检测结果和定义好的功能选项写入Makefile文件中,为了后续的编译和安装做铺垫
其中./configure --prefix==安装路径,来指定安装路径,一般情况下默认的安装路径为/usr/local--prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱;
如果配置--prefix,如:./configure --prefix=/usr/local/test
可以把所有资源文件放在/usr/local/test的路径中,不会杂乱;
用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统);
make会调用gcc编译器,读取makefile文件中的信息进行系统软件编译。将源码程序转化为可以被linux系统所识别的可执行文件
如果在./configure或者make编译中报错,那么我们在重新执行前一定要执行make clean命令,系统清空Makefile文件或编译产生的.o开头的文件;
make install是用来安装的,它从Makefile中读取指令,安装到指定的位置。只有在执行install的时候才会向指定的安装目录写入文件。
当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall;