天天看點

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