Linux系統軟件包安裝

1、軟件包分類

1.1 源碼包

  • 什麼是源碼包

示例:html

[root@localhost ~]# vim hello.c
#include <stdio.h>
int main(void)
{
        printf("hello world\n");
}

```

[root@localhost ~]# gcc -c hello.c
#-c 生成".o"頭文件。這裏會生成hello.o頭文件,可是不會生成執行文件
[root@localhost ~]# gcc -o hello hello.c
#-o 生成執行文件,並指定執行文件名。這裏生成的hello就是可執行文件
[root@localhost ~]# ./hello
hello world
#執行hello文件
  • 源碼包特色

    • 優勢:
    • 開源,若是有足夠的能力,能夠修改源代碼
    • 能夠自由選擇所需的功能
    • 軟件是編譯安裝,因此更加適合本身的系統,更加穩定也效率更高
    • 卸載方便node

    • 缺點:
    • 安裝過程步驟較多,尤爲安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤
    • 編譯過程時間較長,安裝比二進制安裝時間長
    • 由於是編譯安裝,安裝過程當中一旦報錯新手很難解決

1.2 二進制包

  • 二進制包分類

    • DPKG包:是由Debian Linux所開發出來的包管理機制,經過DPKG包,Debian Linux就能夠進行軟件包管理。主要應用在Debian和unbuntu中
    • RPM包:是由Red Hat公司所開發的包管理系統;功能強大,安裝、升級、查詢和卸載都很是簡單和方便。目前不少Linux都在使用這種包管理方式,包括Fedora、CentOS、SuSE等。
  • 二進制包特色:

    RPM包的優勢:
    • 包管理系統簡單,只經過幾個命令就能夠實現包的安裝、升級、查詢和卸載
    • 安裝速度比源碼包安裝快的多
    RPM包的缺點:
    • 通過編譯,再也不能夠看到源代碼
    • 功能選擇不如源碼包靈活
    • 依賴性。
  • RPM包依賴

    軟件包a------------->軟件包b-------------->軟件包cweb

  1. 樹形依賴 a--------->b--------->c
  2. 環形依賴 a--------->b--------->c--------->a
  3. 函數庫依賴

2、rpm安裝

2.1 rpm包命名規則

httpd-2.2.15-15.el6.centos.1.i686.rpmshell

httpd 軟件包名
2.2.15 軟件版本
15 軟件發佈的次數
el6 軟件發行商。el6是Redhat公司發佈,適合RHEL6.x(RedHat Enterprise Linux)和CentOS6.x下使用
i686 適合的硬件平臺。RPM包能夠在不一樣的硬件平臺安裝,選擇適合不一樣CPU的軟件版本,能夠最大化的發揮CPU性能,因此出現了所謂的i386(386以上計算機均可以安裝)、i586(586以上的計算機均可以安裝)、i686(奔騰II以上計算機均可以安裝,目前全部的CPU都是奔騰II以上,因此這個軟件版本居多)、x86_64(64位CPU能夠安裝)和noarch(沒有硬件限制)等文件名。
rpm rpm包的擴展名。Linux下文件不是靠擴展名區分文件類型,也就是Linux中擴展名沒有任何含義。若是RPM包不用「.rpm」做爲擴展名,系統能夠正確識別沒有問題,但是管理員很難識別這個是什麼樣的軟件。

包全名:若是操做的是未安裝軟件包,則使用包全名,並且須要注意絕對路徑數據庫

包名:若是操做的是已經安裝的軟件包,則使用包名便可,系統會生產RPM包的數據庫(/var/lib/rpm/),並且能夠在任意路徑下操做apache

2.2 依賴性

2.3 rpm包手工命令安裝

2.3.1 默認安裝位置
RPM包默認安裝路徑 釋義
/etc/ 配置文件安裝目錄
/usr/bin/ 可執行的命令安裝目錄
/usr/lib 程序所使用的的函數庫保存位置
/usr/share/doc 基本的軟件使用手冊保存位置
/usr/share/man 幫助文件保存位置
2.3.2 RPM包安裝
  1. 安裝命令vim

    rpm -ivh 包全名
    #注意必定是包全名。若是跟包全名的命令要注意路徑,由於軟件包在光盤當中
    選項:
    -i  install安裝(install)
    -v  顯示更詳細的信息(verbose)
    -h  打印#顯示安裝進度(hash)
    • --nodeps 不檢測依賴性安裝。軟件安裝時會檢測依賴性,肯定所需的底層軟件是否安裝;若是沒有安裝則會報錯;若是無論依賴性,想強行安裝,可使用這個選項。
    • --replacefiles 替換文件安裝。若是安裝軟件包,但是包中部分文件已經存在,那麼正常安裝時候,會報錯「某個文件已經存在」從而致使軟件沒法安裝,使用這個選項能夠忽視這個報錯,而覆蓋安裝。
    • --replacepkgs 替換軟件包安裝。若是軟件包已經安裝,此選項能夠把軟件包重複安裝一遍。
    • --force 強制安裝。不論是否已經安裝,都從新安裝。就是--replacefiles和--replacepkgs的綜合
    • --test 測試安裝。不會實際安裝,只是檢測一下依賴性。
    • --prefix 指定安裝路徑。爲安裝軟件指定安裝路徑,而不使用默認安裝路徑。注意:若是指定了安裝路徑,軟件沒有安裝到系統默認路徑中的話,系統會找不到這些安裝的軟件,須要進行手工配置才能被系統識別。因此rpm包咱們通常都採用默認路徑安裝。
  2. 服務啓動centos

    [root@localhost ~]#service   服務名 start|stop|restart|status
    #參數:
    #    start:  啓動服務
    #    stop:   中止服務
    #    restart:重啓服務
    #    status: 查看服務狀態
    [root@localhost ~]#systemctl restart httpd
    #這個命令也行
  3. rpm包升級服務器

    [root@localhost ~]#rpm -Uvh 包全名
    #選項:
    #-U(大寫) 升級安裝,若是沒有安裝過,系統直接安裝。若是安裝過的版本較舊,則升級到新版本(upgrade)
    [root@localhost ~]#rpm -Fvh 包全名
    #選項:
    #-F(大寫) 升級安裝,若是沒有安裝過,則不會安裝。必須安裝有較舊版本,纔會升級(freshen)
  4. 卸載網絡

    [root@localhost ~]#rpm -e 包名
    #選項:
    #    --nodeps    不檢測依賴性
    #    -e          卸載
  5. 查詢

    • 查詢軟件包是否安裝,命令格式以下:
    [root@localhost ~]#rpm -q 包名
    #選項:
    #    -q  查詢(query)
    • 查詢系統中的全部安裝軟件包,命令格式以下:
    [root@localhost ~]#rpm -qa
    #選項:
    #    -a  全部(all)
    
    #固然,也能夠用管道符來查看所需的內容,好比:
    [root@localhost ~]#rpm -qa | grep httpd
    #你會發現,使用「rpm -q 包名」只能查看這個包是否安裝,可是使用「rpm -qa | grep 包名」會把包含名稱的全部包都列出來。
    • 查詢軟件包的詳細信息,命令格式以下:
    #1.查詢已安裝軟件包的詳細信息
    [root@localhost  ~]#rpm -qi 包名
    #選項:
    #    -i  查詢軟件信息(information)
    
    #2.查詢尚未安裝的軟件包的詳細
    [root@localhost ~]#rpm -qip  包全名
    選項:
    #    -p  查詢沒有安裝的軟件包(package)
    • 查詢軟件包中的文件列表
    #1.查詢已安裝軟件包中的文件列表和安裝的完整目錄,命令格式以下:
    [root@localhost ~]#rpm -ql   包全名
    #選項:
    #    -l  列出軟件包中全部的文件列表和軟件所安裝的目錄(list)
    
    #2.查詢沒有安裝的軟件包中的文件列表和打算安裝的位置
    [root@localhost ~]#rpm -qlp 包全名
    #選項:
    #    -p  查詢沒有安裝的軟件包信息(package)
    • 查詢系統文件屬於哪一個RPM包

    既然知道每一個RPM包中的文件安裝位置,那麼也能夠查詢系統文件屬於哪一個RPM包;不過須要注意的是,手工創建的文件是不能查詢的,由於這些文件不是經過RPM包安裝的,固然不能反向查詢它屬於哪一個RPM包。命令格式以下:

    [root@localhost ~]#rpm -qf 系統文件名
    #選項:
    #    -f  查詢系統文件屬於哪一個軟件包(file)
    • 查詢軟件包所依賴的軟件包
    #1.查詢系統中和已安裝的軟件包所依賴的軟件包,命令格式以下:
    [root@localhost ~]#rpm -qR 包名
    #選項:
    #    -R  查詢軟件包的依賴性(requires)
    
    #2.查詢沒有安裝的軟件包依賴性,命令格式以下:
    [root@localhost ~]#rpm -qRp  包名
    #選項:
    #    -p  查詢沒有安裝的軟件包信息(package)
  6. 驗證

    • 基本命令
    [root@localhost ~]#rpm -Va
    #選項:
    #    -Va 校驗本機已經安裝的全部軟件包
    
    [root@localhost ~]#rpm -V 已安裝的包名
    #選項:
    #    -V  校驗指定RPM包中的文件(verify)
    
    [root@localhost ~]#rpm -Vf 系統文件名
    #選項:
    #    -Vf 校驗某個系統文件是否被修改
  7. 數字證書

    若是RPM包自己被動過,那麼校驗就不能解決問題了。咱們就必須使用數字證書驗證。

    數字證書有以下特色:

    • 首先必須找到原廠的公鑰文件,而後進行安裝
    • 再安裝RPM包,會去提取RPM包中的證書信息,而後和本機安裝的原廠證書進行驗證
    • 若是驗證經過,則容許安裝;若是驗證沒經過,則不容許安裝並警告

2.4 rpm包在線安裝(yum安裝)

2.4.1 yum源文件解析

​ yum源配置文件保存在/etc/yum.repos.d/目錄中,文件的擴展名必定是「.repo」。也就是說,yum源配置文件只要擴展名是「\.repo」就會生效。

[root@localhost ~]# vim /etc/yum.repos.d/backup/CentOS-Base.repo 

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

在CentOS-Base.repo文件中有5個yum源容器,這裏只列出了base容器,其餘容器和base容器相似。咱們解釋一下base容器

  • [base] 容器名稱,必定要放在[]中
  • name 容器說明,也能夠本身隨便寫
  • mirrorlist 鏡像站點,這個能夠註釋掉
  • baseurl 咱們的yum源服務器的地址。默認是CentOS官方的yum源服務器,是可使用的。若是你以爲慢,則能夠改爲你喜歡的yum源地址
  • enabled 此容器是否生效,若是不寫或寫成enabled=1,則表示此容器生效;寫成enabled=0,則表示此容器不生效。
  • gpgcheck 若是爲1則表示RPM的數字證書生效;若是爲0,則表示RPM的數字證書不生效。
  • gpgkey 數字證書的公鑰文件保存位置;不用修改。
2.4.2 搭建本地光盤yum源
  • 第一步:放入CentOS安裝光盤,並掛載光盤到指定位置;命令以下:
[root@localhost ~]#mkdir /mnt/cdrom
#建立cdrom目錄,做爲光盤的掛載點
[root@localhost ~]#mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected mounting read-only
#掛載光盤到/mnt/cdrom目錄下
  • 第二步:修改其它幾個yum源配置文件的擴展名,讓它們失效,由於只有擴展名是「*.repo」的文件才能做爲yum源配置文件。固然也能夠刪除其它幾個yum源配置文件,可是若是刪除了,當你又想用網絡做爲yum源時,就沒有了參考文件,因此最好仍是修改擴展名。命令以下:
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#mv CentOS-Base.repo /backup/CentOS-Base.repo
[root@localhost yum.repos.d]#mv CentOS-Debuginfo.repo /backup/CentOS-Debuginfo.repo
[root@localhost yum.repos.d]#mv CentOS-Vault.repo /backup/CentOS-Vault.repo
  • 第三步:修改光盤yum源配置文件CentOS-Media.repo,參照如下方法修改:
[root@localhost ~]# vim /etc/yum.repos.d/backup/CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS_6.6_Final/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
2.4.3 yum命令
  • 查詢

    • 查詢yum源服務器上全部可安裝的軟件包列表
    [root@localhost yum.repos.d]#yum list
    #查詢全部可用軟件包列表
    • 查詢yum源服務器中是否包含某個軟件包
    [root@localhost yum.repos.d]#yum list 包名
    #查詢單個軟件包
    
    #例如:
    [root@localhost yum.repos.d]# yum list httpd
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    Installed Packages
    httpd.x86_64     2.2.15-39.el6.centos       @anaconda-CentOS-201410241409.x86_64/6.6
    • 搜索yum源服務器上全部和關鍵字相關的軟件包。
    [root@localhost yum.repos.d]# yum search 關鍵字
    #搜索服務器上全部和關鍵字相關的軟件包
    #例如:
    [root@localhost yum.repos.d]# yum search ifconfig
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    ======================================================================== Matched: ifconfig =========================================================================
    net-tools.x86_64 : Basic networking tools

    yum search搜索能夠用於肯定某個軟件在那個相關包當中。此例子能夠肯定「ifconfig」命令須要安裝「net-tools」包

    • 查詢指定軟件包的信息
    [root@localhost yum.repos.d]#yum info httpd
    #查詢samba軟件包的信息
    Installed Packages
    Name        : httpd
    Arch        : x86_64
    Version     : 2.2.15
    Release     : 39.el6.centos
    Size        : 2.9 M
    Repo        : installed
    From repo   : anaconda-CentOS-201410241409.x86_64
    Summary     : Apache HTTP Server
    URL         : http://httpd.apache.org/
    License     : ASL 2.0
    Description : The Apache HTTP Server is a powerful, efficient, and extensible
              : web server.
  • 安裝
[root@localhost yum.repos.d]#yum -y install 包名
#選項:
#   install 安裝
#   -y  自動回答yes,若是不加-y,那麼每一個安裝的軟件都須要手工回答yes

#例如:
[root@localhost yum.repos.d]# yum -y install gcc
#使用yum自動安裝gcc
  • 升級
[root@localhost yum.repos.d]# yum -y update 包名
#升級指定的軟件包
#選項:
#   update  升級
#   -y      自動回答yes

​ 注意:在進行升級操做時,yum源服務器中軟件包的版本比本地安裝的軟件包的版本高。

[root@localhost yum.repos.d]# yum -y update
#升級本機全部軟件包
#這條命令會升級系統中全部的軟件包,不過咱們的生產服務器是穩定優先的,因此這種全系統升級的狀況並很少見。
  • 卸載

除非您肯定卸載的軟件依賴包不會對系統產生影響,不然不要執行yum的卸載,由於頗有可能在卸載軟件包的同時卸載的依賴包也是重要的系統文件,這就有可能致使系統崩潰。卸載命令以下:

[root@localhost yum.repos.d]# yum remove 包名
#卸載指定的軟件包

#例如:
[root@localhost yum.repos.d]# yum remove samba
#卸載samba軟件包
2.4.4 yum組管理命令
  • 查詢能夠安裝的軟件組
[root@localhost yum.repos.d]# yum grouplist
#列出全部可用的軟件組列表
  • 查詢軟件組內包含的軟件
[root@localhost yum.repos.d]# yum groupinfo 軟件組名
#列出軟件組中包含的軟件

#例如:
[root@localhost yum.repos.d]# yum groupinfo "Web Server"
#查詢軟件組「WebServer」中包含的軟件
  • 安裝軟件組
[root@localhost yum.repos.d]# yum groupinstall 軟件組名
#安裝指定軟件組,組名能夠由grouplist查詢出來

#例如:
[root@localhost ~]#yum groupinstall "Web Server"
#安裝網頁服務軟件組
  • 卸載軟件組
[root@localhost ~]#yum groupremove 軟件組名
#卸載指定軟件組

3、源碼包安裝

1. 注意事項

  • 1.1 應該選擇哪一種軟件包

    • 若是軟件包是給大量客戶提供訪問,建議使用源碼包安裝,如LAMP環境搭建,由於源碼包效率更高。
    • 若是軟件包是給Linux底層使用,或只給少許客戶訪問,建議使用rpm包安裝,由於rpm包簡單
  • 1.2 源碼包從哪兒來

    rpm包是光盤中直接包含的,因此不須要用戶單獨下載。而源碼包是經過官方網站下載的,若是須要使用,是須要單獨下載的。

  • 1.3 是否能夠在系統中即安裝rpm包的Apache,又安裝源碼包的Apache?
    答案是能夠,由於兩種安裝方法安裝的Apache,安裝位置是不同的,例如:

    • RPM包:不建議指定安裝位置的,建議安裝在默認位置(RPM包安裝的服務有標準卸載命令,不怕文件處處安裝)
    配置文件:   /etc/httpd/conf/httpd.conf
    網頁位置:   /var/www/html/
    日誌文件:   /var/log/httpd/
    啓動方法:   1)service httpd restart
                2)/etc/rc.d/init.d/httpd restart
    • 源碼包:必須制定安裝位置(源碼包沒有安裝數據庫,沒有刪除命令)
    配置文件:   /usr/local/apache2/conf/httpd.conf
    網頁位置:   /usr/local/apache2/htdocs/
    日誌文件:   /usr/local/apache2/logs/
    啓動方法:   /usr/local/apache2/bin/apachectl start

2. 安裝過程

  • 1) 下載軟件包

  • 2) 解壓縮

  • 3) 進入解壓目錄

  • 4) ./configure 編譯前準備

    這一步主要有三個做用:

    • 在安裝以前須要檢測系統環境是否符合安裝要求。
    • 定義須要的功能選項;「./configure」支持的功能選項較多,能夠執行「./configure --help」;命令查詢其支持的功能。通常都會經過「./configure --prefix=安裝路徑」指定安裝路徑。
    • 把系統環境的檢測結果和定義好的功能選項寫入Makefile文件,後續的編譯和安裝須要依賴這個文件的內容。

    須要注意的是,configure不是系統命令,而是源碼包軟件自帶的一個腳本程序,因此必須採用"./configure"方式執行(「./」表明在當前目錄下)

  • 5). make 編譯

    make會調用gcc編譯器,並讀取Makefile文件中的信息進行系統軟件編譯。編譯的目的就是把源碼程序轉變爲能被Linux識別的可執行文件,這些可執行文件保存在當前目錄下。編譯過程較爲耗時,須要有足夠的耐心。

  • 6). make clean 清空編譯內容

    若是在「./configure」或「make」編譯中報錯,那麼咱們在從新執行命令前必定要記得執行make clean命令,它會清空Makefile文件或編譯產生的「.o」頭文件。

  • 7). make install 編譯安裝

    這纔是真正的安裝過程,通常會寫清楚程序的安裝位置。若是忘記指定安裝目錄,則能夠把命令的執行過程保存下來,以備未來刪除使用。

3. 刪除

​ 源碼包沒有刪除命令,若是須要刪除,直接刪除安裝目錄便可。

4. 打入補丁

  • 4.1 補丁的生成

[root@localhost ~]#diff 選項 old new
#比較old和new文件的不一樣
#選項:
#   -a  將任何文檔當作文本文檔處理
#   -b  忽略空格形成的不一樣
#   -B  忽略空白行形成的不一樣
#   -I  忽略大小寫形成的不一樣
#   -N  當比較兩個目錄時,若是某個文件只在一個目錄中,則在另外一個目錄中視做空文件
#   -r  當比較目錄時,遞歸比較子目錄
#   -u  使用同一的輸出格式

例如:

[root@localhost ~]#mkdir test
#創建測試目錄
[root@localhost ~]#cd test
#進入測試目錄
[root@localhost test]# vi old.txt
our 
school 
is
atguigu
#文件old.txt,爲了一會輸出便於比較,每行分開
[root@localhost test]# vi new.txt
our
school
is
atguigu
in
Beijing
#文件new.txt

#比較下兩個文件的不一樣,並生成補丁文件「txt.patch」,命令以下:
[root@localhost test]# diff -Naur /root/old.txt /root/test/new.txt > txt.patch
[root@localhost test]# vi txt.patch

--- /root/old.txt       1969-12-31 16:00:00.000000000 +0800
+++ /root/test/new.txt  2019-11-20 13:10:25.539978995 +0800
@@ -2,3 +2,5 @@
our
school
is
atguigu
+in
+Beijing
#後一個文件比前一個文件多兩行(+表示)

4.2 打入補丁

[root@localhost test]# patch -pn < 補丁文件
#按照補丁文件進行更新
#選項:
#   -pn n爲數字。表明按照補丁文件中的路徑,指定更新文件的位置。(在補丁文件目錄中取消n級目錄)

#更新「old.txt」文件,命令以下:
[root@localhost test]# patch -p3 < txt.patch 
patching file old.txt
[root@localhost test]# cat old.txt
our
school
is
atguigu
in
Beijing
#多出來了in Beijing兩行
相關文章
相關標籤/搜索