RPM工具
RPM是 "Redhat Package Manager" 的缩写, 根据名字也能猜到这是Redhat公司开发出来的。RPM 是以一种数据库记录的方式来将你所需要的套件安装到你的Linux 主机的一套管理程序。
也就是说, 你的linux系统中存在着一个关于RPM的数据库, 它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件, 安装起来非常快捷。
但是也有一些缺点, 比如安装的环境必须与编译时的环境一致或者相当; 包与包之间存在着相互依赖的情况, 卸载包时需要先把依赖的包卸载掉, 如果依赖的包是系统所必须的, 那就不能卸载这个包, 否则会造成系统崩溃。
如果你的光驱中还有系统安装盘的话,我们可以通过 mount /dev/cdrom /mnt 命令把光驱挂载到/mnt目录下,那么你会在/mnt/Packages目录下看到很多.rpm的文件,这就是RPM包了。
[root@localhost ~]# mount /dev/cdrom /mnt/
[root@localhost ~]# ls /mnt/
每一个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包默认安装路径
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
1 安装一个rpm包
[root@localhost ~]# rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.1-1.el6.i686.rpm
"-i": 安装的意思
"-v": 可视化
"-h": 显示安装进度
另外在安装一个rpm包时常用的附带参数有:
--force: 强制安装, 即使覆盖属于其他包的文件也要安装
--nodeps: 当要安装的rpm包依赖其他包时, 即使其他包没有安装, 也要安装这个包
2 升级一个rpm包
命令 rpm -Uvh filename
"-U": 即升级的意思
3 卸载一个rpm包
命令 rpm -e filename
这里的filename是通过rpm的查询功能所查询到的, 稍后会作介绍。
[root@localhost ~]# rpm -qa |grep libjpeg-turbo-devel
libjpeg-turbo-devel-1.2.1-1.el6.i686
[root@localhost ~]# rpm -e libjpeg-turbo-devel
卸载时后边跟的filename和安装时的是有区别的, 安装时是把一个存在的文件作为参数, 而卸载时只需要包名即可。
rpm -e --nodeps filename(包名) 不检查依赖
4 查询一个包是否安装
命令 rpm -q rpm包名 (这里的包名, 是不带有平台信息以及后缀名的)
[root@localhost ~]# rpm -q libjpeg-turbo-devel
package libjpeg-turbo-devel is not installed
5 查询安装过的包
命令 rpm -qa
我们可以使用 rpm -qa 查询当前系统所有安装过的rpm包, 限于篇幅, 只列出前十个。
[root@localhost ~]# rpm -qa |head
plymouth-core-libs-0.8.3-27.el6.centos.i686
xml-common-0.6.3-32.el6.noarch
sgpio-1.2.0.10-5.el6.i686
iso-codes-3.16-2.el6.noarch
gnome-vfs2-2.24.2-6.el6.i686
libX11-common-1.5.0-4.el6.noarch
curl-7.19.7-35.el6.i686
ca-certificates-2010.63-3.el6_1.5.noarch
cups-libs-1.4.2-48.el6_3.3.i686
kbd-misc-1.15-11.el6.noarch
6 得到一个已安装rpm包的相关信息
命令 rpm -qi 包名 (同样不需要加平台信息与后缀名)
[root@localhost ~]# rpm -qi libjpeg-turbo-devel
7 列出一个rpm包安装的文件位置
命令 rpm -ql 包名
[root@localhost ~]# rpm -ql libjpeg-turbo-devel
/usr/include/jconfig.h
/usr/include/jerror.h
/usr/include/jmorecfg.h
/usr/include/jpeglib.h
/usr/lib/libjpeg.so
/usr/share/doc/libjpeg-turbo-devel-1.2.1
/usr/share/doc/libjpeg-turbo-devel-1.2.1/coderules.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/example.c
/usr/share/doc/libjpeg-turbo-devel-1.2.1/jconfig.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/libjpeg.txt
/usr/share/doc/libjpeg-turbo-devel-1.2.1/structure.txt
通过上面的命令可以看出文件 "/usr/lib/libjpeg.so" 是通过安装 "libjpeg-turbo-devel" 这个rpm包得来的。那么反过来如何通过一个文件去查找是由安装哪个rpm包得来的?
实例: 查询php-fpm软件使用rpm或yum安装方式的位置
查询完整的报名
[root@localhost ~]# rpm -qa | grep php-fpm
php-fpm-5.6.17-1.el6.remi.x86_64
php71-php-fpm-7.1.2-1.el6.remi.x86_64
列出php-fpm安装位置
[root@localhost ~]# rpm -ql php71-php-fpm-7.1.2-1.el6.remi.x86_64
/etc/logrotate.d/php71-php-fpm
/etc/opt/remi/php71/php-fpm.conf
/etc/opt/remi/php71/php-fpm.d
/etc/opt/remi/php71/php-fpm.d/www.conf
/etc/opt/remi/php71/sysconfig/php-fpm
/etc/rc.d/init.d/php71-php-fpm
/opt/remi/php71/root/usr/sbin/php-fpm
/opt/remi/php71/root/usr/share/doc/php71-php-fpm-7.1.2
/opt/remi/php71/root/usr/share/doc/php71-php-fpm-7.1.2/fpm_LICENSE
/opt/remi/php71/root/usr/share/doc/php71-php-fpm-7.1.2/php-fpm.conf.default
/opt/remi/php71/root/usr/share/doc/php71-php-fpm-7.1.2/www.conf.default
/opt/remi/php71/root/usr/share/fpm
/opt/remi/php71/root/usr/share/fpm/status.html
/opt/remi/php71/root/usr/share/man/man8/php-fpm.8.gz
/var/opt/remi/php71/lib/php/opcache
/var/opt/remi/php71/lib/php/session
/var/opt/remi/php71/lib/php/wsdlcache
/var/opt/remi/php71/log/php-fpm
/var/opt/remi/php71/run/php-fpm
8 列出某一个文件属于哪个rpm包
命令 rpm -qf 文件的绝对路径
[root@localhost ~]# rpm -qf /usr/lib/libjpeg.so
libjpeg-turbo-devel-1.2.1-1.el6.i686