天天看點

Linux軟體管理(一):rpm軟體包及rpm指令介紹

作者:AndrewNotes

Linux軟體安裝包

簡介

Linux下的軟體包衆多,且幾乎都是經 GPL 授權、免費開源(無償公開源代碼)的。這意味着如果你具備修改軟體源代碼的能力,隻要你願意,可以随意修改。

GPL,全稱 General Public License,中文名稱“通用性公開許可證”,簡單了解 GPL 就是一個保護軟體自由的一個協定,經 GPL 協定授權的軟體必須開源
           

Linux軟體包類型

#源碼包    
一大堆源代碼程式。源碼包的安裝需要把源代碼編譯為二進制代碼,是以安裝時間較長。為解決此問題出現了二進制包


# 二進制包    
源碼包經過成功編譯之後的包。安裝速度快 安裝過程報錯幾率小
二進制包是 Linux 下預設的軟體安裝包,是以二進制包又被稱為預設安裝軟體包。
# 目前主要有以下兩大主流的二進制包管理系統:
1、RPM 包管理系統
RPM全稱RPM Package Manager縮寫,紅帽開發,功能強大,安裝、更新、査詢和解除安裝非常簡單友善。很多 Linux 發行版都預設使用此機制作為軟體安裝的管理方式。

2、DPKG 包管理系統:由 Debian Linux 所開發的包管理機制,通過 DPKG 包,Debian Linux 就可以進行軟體包管理,主要應用在 Debian 和 Ubuntu 中。(.deb結尾)

# 怎麼選?
前者相當于自己動手做家具,闆材、油漆、顔色和樣式都由自己決定。後者相當于去商場買家具

# 注意:1、不管是源碼包,還是二進制包,安裝時都可能會有依賴關系!2、rpm對應自動解決依賴是用yum安裝,rpm指令安裝不解決依賴。
3、yum與rpm的差別總結:yum适用于所有環境,而rpm要搭建本地yum源才可以使用!yum是上層管理工具,自動解決依賴性,而rpm是底層管理工具。rpm隻能安裝已經下載下傳到本地機器上的rpm包,yum可以線上下載下傳并安裝rpm包,能更新系統,且還能自動處理包與包之間的依賴問題,這是rpm所不具備的
           

RPM包命名規則

#RPM 二進制包命名的一般格式如下:


包名-版本号-釋出次數-發行商-Linux平台-适合的硬體平台-包擴充名


# 以tree指令為例 我解除安裝下,重新安裝時便顯示包名


tree-1.6.0-10.el7.x86_64.rpm  


tree 軟體名
1.6.0 版本号
-10 發行次數
el7 el是軟體發行商。7:适用于系統的版本 Cent7 redhat7
x86_64 适合的硬體平台 系統平台
rpm 包擴充名 給人看的           

RPM軟體包的擷取途徑

1.CD光牒(通過挂載的方式通路)
2.網絡下載下傳,比如
RedHat或官方網站 ftp://ftp.redhat.com/
RPM查詢官網網站 http://rpmfind.net/
Nginx軟體官方網站 https://nginx.org/
MySQL軟體官方網站 https://www.mysql.com/


# PS:挂載相關指令:
mount 挂載對象 挂載到哪裡(一般是建立個空目錄)
mount可将指定裝置中指定的檔案系統加載到Linux目錄下(也就是裝載點)
解除安裝 umount           

RPM包的安裝(rpm指令)

# 安裝 RPM 的指令格式一般為:
[root@localhost ~]# rpm -ivh 包全名


# 注意一定是包全名。如果軟體包在CD光牒中,需提前做好裝置的挂載工作。
# 選項
-i   安裝(install)
-v   顯示安裝過程(verbose)
-h   顯示安裝進度條(hash)


--test:     #僅測試,不安裝
--force:    #強制安裝
--nodeps:   #忽略依賴關系直接安裝           

實操舉例

## 例如:
[root@localhost /]# mkdir xxx               建立xxx目錄
[root@localhost /]# mount /dev/cdrom xxx     挂載
[root@localhost /]# df -h                   看一眼:
Filesystem     Size Used Avail Use% Mounted on(挂載點)
/dev/sda3       19G  1.3G   18G   7% /
devtmpfs       476M     0 476M   0% /dev
tmpfs           487M     0 487M   0% /dev/shm
tmpfs           487M  7.6M 479M   2% /run
tmpfs           487M     0 487M   0% /sys/fs/cgroup
/dev/sda1       497M 120M 378M  25% /boot
tmpfs           98M     0   98M   0% /run/user/0
/dev/sr0        4.3G  4.3G     0 100% /xxx            
[root@localhost /]# ll /xxx/Packages         這時可以看到/xxx/Packages下面好多rmp封包婧


.......
-rw-rw-r--. 1 root root    61792 Nov 12  2018 python2-blockdev-2.18-3.el7.x86_64.rpm
-rw-rw-r--. 1 root root   514504 Apr 25  2018 python2-cryptography-1.7.2-2.el7.x86_64.rpm
-rw-rw-r--. 1 root root    30040 Nov 12  2018 python2-futures-3.1.1-5.el7.noarch.rpm
-rw-rw-r--. 1 root root   696780 Nov 12  2018 python2-ipaclient-4.6.4-10.el7.centos.noarch.rpm
-rw-rw-r--. 1 root root   676840 Nov 12  2018 python2-ipalib-4.6.4-10.el7.centos.noarch.rpm
-rw-rw-r--. 1 root root  1535668 Nov 12  2018 python2-ipaserver-4.6.4-10.el7.centos.noarch.rpm
(省略)


# 然後安裝samba-4.8.3-4.el7.x86_64.rpm,顯示需要依賴


[root@localhost /]# rpm -ivh /xxx/Packages/samba-4.8.3-4.el7.x86_64.rpm




## 再如:先删除tree,再安裝(已挂載在mnt下)
[root@localhost ~]# mount /dev/cdrom /mnt
[root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 需要指定軟體包絕對路徑
Preparing...                          ################################# [100%]
Updating / installing...
  1:tree-1.6.0-10.el7                ################################# [100%]


注意,直到出現兩個 100% 才是真正的安裝成功,第一個 100% 僅表示完成了安裝準備工作。


#在軟體包所在目錄下可以不指定絕對路徑
[root@zls ~]# cd /mnt/Packages/
[root@zls Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm



           
--test:     #測試安裝。不會實際安裝,隻是檢測一下依賴性。
--force:    #強制安裝


--nodeps:   #忽略依賴關系
軟體安裝時會檢測依賴性,确定所需的底層軟體是否安裝,如果沒有安裝則會報錯。如果不管依賴性,想強制安裝,則可以使用這個選項。注意,這樣不檢測依賴性安裝的軟體基本上是不能使用的,是以不建議這樣做。


例:
#測試一個軟體包是否能在該系統上安裝
[root@zls ~]# rpm -ivh --test /mnt/Packages/samba-4.8.3-4.el7.x86_64.rpm


#如果軟體包存在, 強制再次安裝
[root@zls ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm


#安裝samba服務需要依賴其他元件, 使用--nodeps可重新強制安裝
[root@zls ~]# rpm -ivh --nodeps /mnt/Packages/samba-4.8.3-4.el7.x86_64.rpm

           

RPM包查詢

使用 rpm 做查詢指令的格式如下:
[root@localhost ~]# rpm 選項 已安裝包名 (包名即可識别,不需全名)
# 選項
rpm -q         # 檢視指定的rpm包是否安裝
rpm -qa        # 檢視系統中已安裝的所有RPM軟體包清單
rpm -qi         檢視指定軟體的詳細資訊
rpm -ql         列出rpm包相關的配置檔案和目錄
rpm -qc        # 隻查詢指定軟體包的配置檔案
rpm -qd         查詢指定軟體包的幫助文檔
rpm -qf         反向查,查詢檔案或目錄屬于哪個RPM軟體


rpm -qp         查詢未安裝的包相關資訊
rpm -q --scripts   查詢rpm包安裝前和安裝後執行的腳本


#查詢包是否安裝
[root@localhost ~]# rpm -q httpd
package httpd is not installed


#查詢系統是否已安裝tree、vim、lrzsz(安裝過會顯示出來,沒有則不顯示)
[root@sky /]# rpm -qa |grep -E 'tree|vim|lrzsz'
lrzsz-0.12.20-36.el7.x86_64
vim-common-7.4.629-8.el7_9.x86_64
vim-minimal-7.4.160-5.el7.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
vim-enhanced-7.4.629-8.el7_9.x86_64
[root@sky /]# tree
-bash: tree: command not found


查詢vsftpd軟體包的相關資訊
[root@zls ~]# rpm -qi vsftpd


查詢rpm包所安裝的檔案
[root@zls ~]# rpm -ql vsftpd


查詢rpm包相關的配置檔案
[root@zls ~]# rpm -qc vsftpd


查詢配置檔案或指令來自于哪個rpm包
[root@zls ~]# rpm -qf /etc/vsftpd/vsftpd.conf
[root@zls ~]# rpm -qf /usr/sbin/vsftpd




//查詢未安裝的軟體包會産生哪些檔案
[root@zls ~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm


//查詢未安裝的軟體包會産生哪些檔案
[root@zls ~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm


#以上查詢隻能查詢已存在 已安裝的包,如果沒有安裝,需要聯網查詢           

RPM包更新

U:如果老版本存在就更新,老版本不存在就安裝


例子 -ivh 安裝時提示已經有了舊版本 無法安裝
這時就-Uvh




wget 兩個包
[root@localhost ~]# wget https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.12.0-1.el7.ngx.x86_64.rpm


-rw-r--r--.  1 root root 655648 Apr 26  2016 nginx-1.10.0-1.el7.ngx.x86_64.rpm
-rw-r--r--.  1 root root 732968 Apr 13  2017 nginx-1.12.0-1.el7.ngx.x86_64.rpm




# 先把10裝上
[root@localhost ~]# rpm -ivh nginx-1.10.0-1.el7.ngx.x86_64.rpm  nginx-1.12.0-1.el7.ngx.x86_64.rpm
檢視下
[root@localhost ~]# rpm -qa | grep nginx
nginx-1.10.0-1.el7.ngx.x86_64                  10已經安上了
 


# 如果用-ivh再裝12 就會報錯 安裝不上 再看還是10
[root@localhost ~]# rpm -ivh nginx-1.12.0-1.el7.ngx.x86_64.rpm
......


[root@localhost ~]# rpm -qa | grep nginx
nginx-1.10.0-1.el7.ngx.x86_64


# 用rpm -Uvh即可更新安裝
[root@localhost ~]# rpm -Uvh nginx-1.12.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.12.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:nginx-1:1.12.0-1.el7.ngx         ################################# [ 50%]
Cleaning up / removing...
   2:nginx-1:1.10.0-1.el7.ngx         ################################# [100%]
[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64           

RPM包解除安裝

解除安裝包時需要先把依賴的包解除安裝掉,如果依賴的包是系統所必須的,那就不能解除安裝這個包,否則會造成系統崩潰。
rpm -e 要解除安裝的包名


[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -e $(rpm -qa | grep nginx)   $調用
[root@localhost ~]# rpm -qa | grep nginx  沒了




[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -e nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -q nginx-1.12.0-1.el7.ngx.x86_64
package nginx-1.12.0-1.el7.ngx.x86_64 is not installed     沒了           

繼續閱讀