天天看点

Linux rpm 命令汇总

作者:寒笛过霜天

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