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