在window系統下,我們只需要點擊軟件的安裝程序,然後傻瓜式的連續點擊下一步下一步即可;想卸載的話,我們只需要去控制面板裏選擇我們要卸載的軟件,然後點擊卸載按鍵,是非常的方便。但是在安全係數上,就沒有Linux系統高了。
那麼,如何在Linux系統上安裝我們想要的軟件呢?又如何對已經安裝的軟件進行升級或者是卸載呢?
一、 軟件包管理技術的簡介
爲了使用戶更方便的在Linux系統上管理應用程序,Red Hat公司和Debian Linux社羣各自開發了一個管理機制,來幫助用戶管理Linux系統上的應用程序,比如安裝,升級或者卸載。讓用戶不再煩惱Linux系統上的程序管理(最開始的程序安裝,要通過原始代碼來安裝,又要編譯,有要檢查環境的,特別麻煩)。
1、RPM與YUM
RPM這個機制最早是又RedHat公司開發出來的,後來由於特別好用,因此許多Linux廠商就使用這個機制來做爲軟件安裝的管理方式,包括Fedora,CentOS,SuSe等等知名的Linux廠商。而RPM在管理軟件的依賴關係上有一些短板,因此RedHat又在RPM機制上推出了YUM線上升級技術,來管理軟件的依賴性。
2、DPKG與APT
這個機制最早是由DebianLinux設社羣開發的。通過這個機制,Debian提供的軟件就可以輕鬆的安裝成功,同時還可以記錄安裝後的軟件資訊。只要是衍生字Debian的其他Linux版本,都是用了dpkg這種機制來管理軟件,如B2D,Ubuntu等。同樣的問題,dpkg機制也是有的,那就是在管理軟件的依賴關係上。不過,Debian後來推出了APT線上升級技術,來彌補dpkg的不足。
distribution 代表 | 軟件管理機制 | 使用指令 | 線上升級機制(指令) |
Red Hat/Fedora | RPM | rpm, rpmbuild | YUM (yum) |
Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
3、軟件包的命名規則
如:mariadb-10.0.15-linux-i686.rpm
第一部分:表示軟件名稱
第二部分:表示版本信息,通常最前面的數字表示版本號,如10,後面的小數字表示此版本的小改動次數
第三部分:表示適用的操作平臺
二、RPM的使用
1、RMP的安裝原理
rpm的使用,其實很簡單,只需要熟知幾個選項和語法,就可以用來安裝軟件了。不過,我們仍然要知道rpm的安裝原理。
我們使用rpm來安裝一個應用程序時,rpm會先讀取該應用程序的文檔內記載的預設參數內容,然後用來與Linux系統的環境做對比,找出是否有依賴的程序尚未安裝。如果有依賴的程序,且尚未安裝,則提示用戶需要什麼程序。
如果Linux系統環境合格,rpm就會將該程序安裝到Linux系統上。安裝過程中,該程序相關的資訊信息就會被寫入/var/lib/rpm目錄下的資料庫中(這個目錄很重要的)。而該程序的核心文件會默認放置在下面的目錄中。
/etc | 一些配置文檔存儲的目錄,例如 /etc/ssh |
/usr/bin | 一些可執行文件的目錄 |
/usr/lib | 一些程式使用的動態函數庫 |
/usr/share/doc | 一些基本的程序使用手冊和說明文檔 |
/usr/share/man | 一些 man page 文檔 |
這裏說明一下資料庫,以後如果對軟件升級,版本的比較信息就來源於這裏,還有,我們可能會經常查詢系統已經安裝的程序,也是從這裏進行查詢的。
2、RPM查詢軟件包
在Linux系統上安裝一個程序之前,我們在習慣上,會先查詢是否安裝過這款程序,如果安裝過,我們就不用再安裝了,如果沒有安裝過,我們再去安裝,這是一個好習慣。
rpm的查詢是我們最常用的一項功能,我們可以查詢很多關於已裝程序或未裝程序的信息,它可以在/var/lib/rpm這個目錄的資料庫進行查詢,也可以查詢未安裝的rpm文檔內的信息。
常用寫法:
[root@study ~]# rpm -qa <==查詢系統內已安裝程序
[root@study ~]# rpm -q【licdR】 【已安裝的程序名】 <==查詢系統內某個已安裝程序的信息
[root@study ~]# rpm -q【f】 【系統內的文檔名】 <==查詢系統內某個已安裝程序
[root@study ~]# rpm -qp【licdR】 【未安裝的程序名稱】 <==查詢系統內某個未安裝RPM文檔
常用的選項參數介紹:
-q :用於查詢指定的程序是否已經安裝
-qa :列出所有已經安裝在Linux系統下的程序名稱
-qi :列出該程序的詳細信息 ,如版本號,發行時間,安裝時間等
-ql :列出該程序所有的文檔與目錄
-qc :列出該程序的所有配置文件 (通常是指在 /etc/ 底下的文件)
-qd :列出該程序的所有說明文檔 (指與 man 有關的文件)
-qR :列出與該程序有關的依賴軟件所含的文件 (Required 的意思)
-qf :找出指定文件屬於哪一個已經安裝的程序
應用案例1:查詢Linux中是否安裝了jdk1.8
[root@master bin]# rpm -q jdk1.8
jdk1.8-1.8.0_172-fcs.x86_64
[root@master bin]# rpm -q jdk
package jdk is not installed <==由此可見,必須指定軟件名稱,可以不用加上版本號
應用案例2:查詢Linux系統下安裝的的所有軟件
[root@master bin]# rpm -qa | more <==可以藉助 more指令來分頁顯示
control-center-2.28.1-39.el6.x86_64
m17n-db-punjabi-1.5.5-1.1.el6.noarch
valgrind-3.8.1-3.2.el6.x86_64
libreport-newt-2.0.9-19.el6.centos.x86_64
iso-codes-3.16-2.el6.noarch
xorg-x11-drv-vmmouse-12.9.0-10.el6.x86_64
......
[root@master bin]# rpm -qa | grep jdk <==可以藉助 grep指令來指定關鍵字,適用於不知道軟件全名的情況下
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
jdk1.8-1.8.0_172-fcs.x86_64
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
應用案例3:查看軟件jdk1.8的所有目錄和文檔
[root@master bin]# rpm -ql jdk1.8 | more
/usr
/usr/java
/usr/java/jdk1.8.0_172-amd64
/usr/java/jdk1.8.0_172-amd64/.java
/usr/java/jdk1.8.0_172-amd64/.java/.systemPrefs
.......:
<==可以看出該程序到底提供了多少文件與目錄,也可以用於追蹤程序的資料
應用案例4:查看軟件jdk1.8的信息詳情。
[hyxy@master 桌面]$ rpm -qi jdk1.8
Name : jdk1.8 Relocations: /usr/java
Version : 1.8.0_172 Vendor: Oracle Corporation
Release : fcs Build Date: 2018年03月29日 星期四 13
.....................
應用案例5:若要成功安裝 jdk1.8 ,它還需要什麼文檔的幫助?
[hyxy@master 桌面]$ rpm -qR jdk1.8
/bin/basename
/bin/cat
/bin/cp
....<== 選項-qR只能查詢已經成功安裝的軟件所需要的文檔,未安裝的請參考應用案例7
應用案例6:查詢 /bin/sh文檔是哪個軟件提供的
[hyxy@master test]$ rpm -qf /bin/sh
bash-4.1.2-15.el6_4.x86_64
應用案例7::查詢剛剛上傳的RPM 軟件需要什麼必須的文檔
[hyxy@master test]$ rpm -qpR jdk-8u172-linux-x64.rpm
/bin/basename
/bin/cat
/bin/cp
3、RPM安裝軟件包
這個得強調一下,使用RPM安裝軟件包時,必須要獲取root身份。
基本語法:rpm [-ivh] 軟件包名
選項解析:
-i : 安裝的含義
-v:安裝過程中顯示詳情
-h:以進度條的形式顯示安裝進度
應用案例1:
[root@master test]# rpm -ivh jdk-8u172-linux-x64.rpm
Preparing... ########################################### [100%]
1:jdk1.8 ########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@master test]#
通常在安裝軟件包的時候,這三個選項就夠了,如果有軟件依賴關係,會進行提醒需要提前安裝什麼,這樣我們在異議解決問題的時候,就會了解很多東西。不過,我們也可以通過一些參數來進行安裝測試、強制安裝、覆蓋安裝、指定安裝路徑等操作。
參數 | 代表意義 |
--nodeps | 安裝或卸載軟件時,有依賴關係時,可以進行強制安裝或卸載。 有一定的危險性,安裝後可以能造成軟件無法正常使用! |
--replacefiles | 安裝時,軟件中的某個文件可能已經安裝過,或者版本衝突時,可以進行強制覆蓋操作。 覆蓋操作無法還原,因此要不要覆蓋,請一定要注意! |
--replacepkgs | 當使用 rpm -ivh *.rpm 安裝一堆軟件時,可能會報某些軟件已經安裝過,此時可以使用此參數進行覆蓋安裝。 |
--force | 相當於--replacefiles和--replacepkgs的綜合體 |
--test | 在安裝前,可以進行安裝測試,查看軟件的依賴關係。rpm -ivh pkgname.i386.rpm --test |
--justdb | 當某軟件的資料庫破損或者產生錯誤時,可以使用這個參數來進行修復 |
--prefix 新路徑 | 用於指定軟件的安裝路徑,不使用默認路徑 |
4、RPM的升級與更新
格式:rpm -Uvh 軟件包名
使用rpm對軟件進行升級很簡單,只要使用-Uvh選項就可以咯。如果後面指定的安裝包沒有安裝過,就會自動安裝此軟件包,如果安裝過舊版,就會進行升級。
5、RPM卸載安裝包
格式:rpm -e 軟件名稱
當你想卸載某一個軟件時,就可以使用選項【-e】。
不過,一般情況下,安裝某個軟件包後,在Linux系統下,該軟件的名稱並不是軟件包名,因此我們可以通過關鍵字進行查詢該軟件的名稱。如:
[root@master test]# rpm -qa | grep jdk
jdk1.8-1.8.0_172-fcs.x86_64
那麼卸載時就要用到上面顯示的軟件名稱
[root@master test]# rpm -e jdk1.8-1.8.0_172-fcs.x86_64
如果在卸載某軟件A時,發現如下字樣
error: Failed dependencies:
................. is needed by .....
則表示,你要卸載的軟件A被某些軟件依賴。那麼就要先卸載其他依賴軟件A的軟件,再回來卸載軟件A。這就好比高樓大廈,8樓依賴7樓,你在銷燬7樓的時候,應該先銷燬八樓一樣。
不過,我們可以通過--nodeps參數來強制卸載軟件A,但是,可能就會影響到其他軟件的使用了。這是你需要考慮的事情。
由於RPM 經常進行安裝、卸載或升級操作等,某些行爲可能會導致 RPM 資料庫 /var/lib/rpm/ 內的文件破損破損。別擔心,我們可以使用 --rebuilddb 這個參數來重建資料庫! 如下:
[root@master test]# rpm --rebuilddb
6、RPM的缺點
由於Linux中的程序大多是小程序。程序與程序之間存在非常複雜的依賴關係。RPM無法解決軟件包的依賴關係。因此我們還是要學習YUM機制,請參考下一篇文章:《Linux系統》之"皮毛系列"(十一)軟件包的線上升級機制YUM