RPM是 “Redhat Package Manager” 的缩写,根据名字也能猜到这是Redhat公司开发出来的。RPM 是以一种数据库记录的方式来将所需要的套件安装到Linux 主机的一套管理程序。也就是说,linux系统中存在着一个关于RPM的数据库,它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况;卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。
如果光驱中还有系统安装盘的话,我们可以通过 mount /dev/cdrom /mnt
命令把光驱挂载到/mnt目录下,那么在/mnt/Packages目录下看到很多.rpm的文件,这就是RPM包了。
每一个rpm包的名称都由 -
和 .
分成了若干部分。就拿 “abrt-cli-2.0.8-15.el6.centos.i686.rpm” 这个包来解释一下, “abrt-cli” 为包名, “2.0.8” 则为版本信息, “15.el6.centos” 为发布版本号, “i686” 为运行平台。其中运行平台常见的有i386, i586, i686, x86_64 ,需要注意的是cpu目前是分32位和64位的,i386,i586和i686都为32位平台,x86_64则代表为64位的平台。另外有些rpm包并没有写具体的平台而是noarch,这代表这个rpm包没有硬件平台限制。例如 “alacarte-0.10.0-1.fc6.noarch.rpm”.
下面介绍一下rpm常用的命令。
1.安装一个rpm包:
用法:rpm -ivh rpm_name
参数解释:
- -i(install):安装软件包。
- -v(verbose):显示安装的过程信息。可视化。
- -h(hash):软件安装的时候列出哈希标记。即显示安装进度。
另外在安装一个rpm包时常用的附带参数有:
--force
: 强制安装,即使覆盖属于其他包的文件也要安装
--nodeps
: 当要安装的rpm包依赖其他包时,即使其他包没有安装,也要安装这个包。
2.升级一个rpm包:
命令:rpm -Uvh filename
- -U(upgrade):升级软件包。
- -v,-h:同上,显示安装过程。
3.卸载一个rpm包:
命令:rpm -e filename
- -e(erase擦去,抹去,除掉):清除,卸载软件包。
卸载时后边跟的filename和安装时的是有区别的,安装时是把一个存在的文件作为参数,而卸载时只需要包名即可。
4.查询一个包是否安装:
命令:rpm -q rpm包名
(这里的包名,是不带有平台信息以及后缀名的)
- -q(query查询):查询选项。
- -a(all):查询/验证所有软件包。
可以使用
rpm -qa
查询当前系统所有安装过的rpm包。
[hadoop@localhost ~]$ rpm -qa | head
ipa-client-common-4.5.4-10.el7.centos.1.noarch
kbd-legacy-1.15.5-13.el7.noarch
gutenprint-5.2.9-18.el7.x86_64
pycairo-1.8.10-8.el7.x86_64
gnu-free-serif-fonts-20120503-8.el7.noarch
tzdata-2018c-1.el7.noarch
m17n-lib-1.6.4-14.el7.x86_64
iprutils-2.4.15.1-1.el7.x86_64
xdg-desktop-portal-0.5-2.el7.x86_64
pango-1.40.4-1.el7.x86_64
[hadoop@localhost ~]$
5.得到一个已安装rpm包的相关信息:
命令:rpm -qi b包名
(同样不需要加平台信息与后缀名)
6.列出一个rpm包安装的文件:
命令 rpm -ql 包名
-l(list):列出软件包中的文件。
-s(state):显示列出文件的状态。
[hadoop@localhost ~]$ rpm -ql ibus | head
/etc/X11/xinit/xinput.d
/etc/X11/xinit/xinput.d/ibus.conf
/etc/dconf/db/ibus.d
/etc/dconf/db/ibus.d/00-upstream-settings
/etc/dconf/profile/ibus
/usr/bin/ibus
/usr/bin/ibus-daemon
/usr/lib64/python2.7/site-packages/gi/overrides/IBus.py
/usr/lib64/python2.7/site-packages/gi/overrides/IBus.pyc
/usr/lib64/python2.7/site-packages/gi/overrides/IBus.pyo
[hadoop@localhost ~]$
[hadoop@localhost ~]$ rpm -qs ibus
正常/etc/X11/xinit/xinput.d
正常/etc/X11/xinit/xinput.d/ibus.conf
正常/etc/dconf/db/ibus.d
正常/etc/dconf/db/ibus.d/00-upstream-settings
正常/etc/dconf/profile/ibus
正常/usr/bin/ibus
7.列出某一个文件属于哪个rpm包:
命令 rpm -qf 文件的绝对路径
-f(file): 查询/验证文件属于的软件包
[hadoop@localhost ~]$ rpm -qf /usr/lib
filesystem-3.2-25.el7.x86_64
8.其他用法总结:
用法:rpm[选项]
[hadoop@localhost ~]$ rpm --help
用法: rpm [选项...]
#查询/验证软件包选项:
-a, --all 查询/验证所有软件包
-f, --file 查询/验证文件属于的软件包
-g, --group 查询/验证组中的软件包
-p, --package 查询/验证一个软件包
#查询选项(用 -q 或 --query):
-c, --configfiles 列出所有配置文件
-d, --docfiles 列出所有程序文档
-L, --licensefiles list all license files
-l, --list 列出软件包中的文件
-s, --state 显示列出文件的状态
#验证选项(用 -V 或 --verify):
--nofiledigest 不验证文件摘要
--nofiles 不验证软件包中文件
--nodeps 不验证包依赖
--noscript 不执行验证脚本
#安装/升级/擦除选项:
--allfiles 安装全部文件,包含配置文件,否则配置文件会被跳过。
-e, --erase=+ 清除 (卸载) 软件包
--excludedocs 不安装程序文档
--excludepath= 略过以 开头的文件
--force --replacepkgs --replacefiles 的缩写
-F, --freshen=+ 如果软件包已经安装,升级软件包
-h, --hash 软件包安装的时候列出哈希标记
--ignoresize 在安装前不检查磁盘空间
-i, --install 安装软件包
--justdb 更新数据库,但不修改文件系统
--nodeps 不验证软件包依赖
--nofiledigest 不验证文件摘要
--noorder 不对软件包安装重新排序以满足依赖关系
--noscripts 不执行软件包脚本
--notriggers 不执行本软件包触发的任何脚本
--oldpackage 更新到软件包的旧版本(带 --force
自动完成这一功能)
--percent 安装软件包时打印百分比
--replacefiles 忽略软件包之间的冲突的文件
--replacepkgs 如果软件包已经有了,重新安装软件包
--test 不真正安装,只是判断下是否能安装
-U, --upgrade=+ 升级软件包
yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个工程中如果要安装的rpm包有依赖关系,yum会帮您解决掉这些依赖关系依次安装所有rpm包。
1.列出所有可用的rpm包:
命令:yum list
[hadoop@localhost ~]$ yum list | head -n 15
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.sohu.com
* extras: mirrors.sohu.com
* updates: mirrors.sohu.com
已安装的软件包
GConf2.x86_64 3.2.6-8.el7 @base
GeoIP.x86_64 1.5.0 11.el7 @anaconda
ModemManager.x86_64 1.6.10-1.el7 @base
ModemManager-glib.x86_64 1.6.10-1.el7 @base
NetworkManager.x86_64 1:1.10.2-14.el7_5 @updates
NetworkManager-adsl.x86_64 1:1.10.2-14.el7_5 @updates
NetworkManager-bluetooth.x86_64 1:1.10.2-14.el7_5 @updates
NetworkManager-glib.x86_64 1:1.10.2-14.el7_5 @updates
NetworkManager-libnm.x86_64 1:1.10.2-14.el7_5 @updates
从上例中可以看到有 “mirrors.btte.net” 信息出现,这是在告诉用户,它是从mirrors.btte.net这里下载到的rpm包资源。从上面的例子中还可以看到最左侧是rpm包名字,中间是版本信息,最右侧是安装信息,如果安装了就显示类似 “@anaconda-CentOS”, “@base” 或者 “@extras”, 他们前面都会有一个 “@” 符号,这很好区分。未安装则显示base或者extras, 如果是该rpm包已安装但需要升级则显示updates。”yum list” 会先列出已经安装的包(Installed Packages) 然后再列出可以安装的包(Available Packages)。
2.搜索一个rpm包:
命令 yum search [相关关键词]
除了这样搜索外,常用的是利用grep来过滤。
例如:
yum list | grep vim
3.安装一个rpm包:
命令: yum install [-y] [rpm包名]
如果不加 “-y” 选项,则会以与用户交互的方式安装,首先是列出需要安装的rpm包信息,然后会问用户是否需要安装,输入y则安装,输入n则不安装。
直接加上 “-y” 选项,这样就省略掉了问用户是否安装的那一步。
4.卸载一个rpm包:
命令:yum remove [-y] rpm包名
5.升级一个rpm包:
命令 :yum update [-y] [rpm包]
6.yum其他用法:
check 检查 RPM 数据库问题
check-update 检查是否有可用的软件包更新
clean 删除缓存数据
deplist 列出软件包的依赖关系
distribution-synchronization 已同步软件包到最新可用版本
downgrade 降级软件包
erase 从系统中移除一个或多个软件包
groups 显示或使用、组信息
help 显示用法提示
history 显示或使用事务历史
info 显示关于软件包或组的详细信息
install 向系统中安装一个或多个软件包
list 列出一个或一组软件包
load-transaction 从文件名中加载一个已存事务
provides 查找提供指定内容的软件包
reinstall 覆盖安装软件包
repo-pkgs 将一个源当作一个软件包组,这样我们就可以一次性安装/移除全部软件包。
repolist 显示已配置的源
search 在软件包详细信息中搜索指定字符串
update 更新系统中的一个或多个软件包
upgrade 更新软件包同时考虑软件包取代关系
version 显示机器和/或可用的源版本。
有时候您的linux系统不能联网,当然就不能很便捷的使用联网的yum源了,这时候就需要会利用linux系统光盘制作一个yum源。具体步骤如下:
a)挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt
b)删除/etc/yum.repos.d目录所有的repo文件
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
c) 创建新文件dvd.repo
[root@localhost ~]# vim /etc/yum.repos.d/dvd.repo
加入以下内容:
[dvd]
name=install dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
d) 刷新 repos 生成缓存
[root@localhost ~]# yum makecache
然后就可以使用yum命令安装您所需要的软件包了。
用yum工具下一个rpm包,但是不安装。步骤如下:
检测是否已经安装:rpm -qa |grep yum-utils
CentOS7默认安装。如果没有安装则安装,安装命令: yum -y install yum-utils*
创建一个存放安装包的目录:/rpms
下载安装包及依赖存放至/rpms目录下:
yumdownloader --resolve --destdir /rpms package-name
–destdir 安装包存放位置。
–resolve 下载依赖。
在linux下面安装一个源码包是最常用的。安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。如果能读得懂这些源代码,那么就可以去修改这些源代码自定义功能,然后再去编译。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果机器上没有安装gcc就没有办法去编译源码。可以使用 yum install -y gcc
来完成安装。
安装一个源码包,通常需要三个步骤:
1)./configure
在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过 ./configure --help
命令来查看。在这一步会自动检测您的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后才会生成一个Makefile文件。
2) make
使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。
3) make install
安装步骤,生成相关的软件存放目录和配置文件的过程。
上面介绍的3步并不是所有的源码包软件都一样的,也就是说源码包的安装并非具有一定的标准安装步骤。这就需要拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名。所以,一定要去看一下。
安装httpd源码包过程示例:
下载一个源码包:
下载源码包一定要去官方站点去下载,不要在网上随便下载,那样很不安全。因为下载到的源码包很有可能是被人修改过的。
下载后的源码包一般都放在/usr/local/src 目录下。方便维护。
[root@localhost src]# cd /usr/local/src/# cd /usr/local/src/
[root@localhost src]# wget https://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
#wget为一个下载工具
解压源码包
[root@localhost src]# tar -jxvf httpd-2.4.33.tar.bz2
进入解压后的文件,配置相关的选项,并生成Makefile。
可以通过./configure --hlep
命令查看可以使用的选项。一般常用的有 --prefix=PREFIX
这个选项的意思是定义软件包安装到哪里。通常源码包都是安装在/usr/local/目录下的。
验证这一步是否成功的命令是:
[root@localhost httpd-2.2.24]# echo $?
0
返回值如果是 “0” 则执行成功,否则就是没有成功。此时就成功生成 Makefile 了。
进行编译 :
运行命令:make
安装:
运行命令:make install
第四第五步也可以合成一步:命令为:make && make install
安装的过程中会遇到很多问题。一般是缺少库文件所致。只要下载相应的库文件安装即可。
Apt-get的详细用法如下:
hadoop@ubuntu:~$ apt-get --help
apt 1.2.26 (amd64)
用法: apt-get [选项] 命令
apt-get [选项] install|remove 软件包1 [软件包2 ...]
apt-get [选项] source 软件包1 [软件包2 ...]
#apt-get 可以从认证软件源下载软件包及相关信息,以便安装和升级软件包,
#或者用于移除软件包。在这些过程中,软件包依赖会被妥善处理。
#常用命令:
update - 取回更新的软件包列表信息
upgrade - 进行一次升级
install - 安装新的软件包(注:软件包名称是 libc6 而非 libc6.deb)
remove - 卸载软件包
purge - 卸载并清除软件包的配置
autoremove - 卸载所有自动安装且不再使用的软件包
dselect-upgrade - 根据 dselect 的选择来进行升级
build-dep - 为源码包配置所需的编译依赖关系
clean - 删除所有已下载的包文件
autoclean - 删除已下载的旧包文件
check - 核对以确认系统的依赖关系的完整性
source - 下载源码包文件
download - 下载指定的二进制包到当前目录
changelog - 下载指定软件包,并显示其changelog