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 沒了