linux程序包管理相關

前言

首先說說一個軟件的誕生過程:

程序員用編程語言寫文本格式的源代碼,但是計算機只能讀懂二進制文件,那么就需要將源代碼轉換成二進制格式,這個過程稱為編譯。編譯用的工具稱為編譯器,編譯器有很多種,在Linux上常用gcc這個編譯器。利用編譯器,得到二進制格式的文件(二進制程序(Windows上.exe.msi,Linux.elf)、庫文件、配置文件、幫助文件)。

手動編譯是一個麻煩的事情,所以軟件發行商將程序照平臺編譯好之后,成為二進制的程序包。Windows的程序包就兩個步驟:安裝和卸載。
Linux的程序包根據發行版的不同,格式也不一樣。主要是RedHat系的RPM包和debian系的deb包。主要介紹RPM包,以后再介紹deb包的使用。

Linux不是,Linux的哲學有一點是:Linux由眾多功能單一的程序構成,只做一件事,并做到最好。那么這些功能單一的程序怎么去實現復雜的工作呢?

分工和協作嘛,我不會的事讓別人去做,我會的事我還可以讓其他比我做得更好的人去做。所以在Linux的程序包之間有著復雜的包間依賴關系,A程序需要B程序,B程序又依賴于C程序...

如果要單個單個的去安裝包的話是一件很折磨人的事情,A包裝上了告訴你沒裝B包,我運行不了,沒滿足依賴關系,那就裝B包,B包裝好了說你沒裝C包,C包又裝好了,又缺D包...這可咋整2333。而且包的格式還不一樣。

Linux的程序包根據發行版的不同,格式也不一樣。主要是RedHat系的RPM包和debian系的deb包。主要介紹RPM包,以后再介紹deb包的使用。

下面進入正題:介紹RPM包、rpm命令、前端工具yum

RPM包

紅帽系Linux用rpm命令管理RPM程序包RPM包:

主要實現的是 :安裝、升級、卸載、查詢、校驗和數據庫維護

語法: rpm [OPTION] [PACKAGE_FILE]
    安裝: -i,--install
    升級: -u,--update,-F,--freshen
    卸載: -e,--erase
    查詢: -q,--query
    檢驗: -V,--verify
    數據庫維護: --builddb,--initdb

    安裝:
        rpm {-i|--install} [install-options] PACKAGE_FILE ...

            rpm -ivh PACKAGE_FILE
                -v:
                -vv
            [install-options]:
                -h:顯示進度,hash marks,每個#表示2%
                --test:測試安裝
                --nodeps:不檢測依賴直接安裝
                --replace:重新安裝(不會修改配置文件,如果是想通過重裝恢復默認配置,將那個配置文件刪除后replace)
                --noscript

            注意:rpm可以自帶腳本:
                preinstall:安裝前進行,%pre,--nopre
                postinstall:安裝后運行,%post,--nopost
                preuninstall:卸載前運行,%preun,--unpreun
                postuninstall:卸載完運行,%postun,--nopsdtun

                --nosignature:不檢查包簽名信息,不檢查來源合法性
                --nodigest:不檢驗包完整性信息
    升級:
        rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
            -U:升級或安裝
        rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
            -F:只升級,如果原來沒有,不安裝

            rpm -Uvh PACKAGE_FILE
            rpm -Fvh PACKAGE_FILE

                --oldpackage:降級為較老版本的;回滾
                --force:強制升級;
        注意:
            1.不要對內核進行升級操作;Linux支持多內核版本共存,因此,直接安裝新版本內核
            2.如果某原程序包的配置文件被修改過,升級后同名的配置文件不會被更新,而是把新配置文件重命名提供;一般叫filename.rpmnew(原文件的新版)

    查詢:
        rpm {-q|--query} [select-options] [query-options]

        [select-options]:
            PACKAGE_NAME:查詢指定程序包是否安裝,
            -f, --file:查詢文件是由哪個程序生成的
            -g, --group:
            -a, --all:查詢所有已經安裝過的包

            -p, --package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作

            --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供

            --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個程序包所依賴

            [query-option]
            --changelog:查看版本更迭
            -l, --list:程序安裝生成的文件列表
            -i, --info:程序包相關的信息,版本號、大小
            -c, --configfiles:List only configuration files (implies -l).
            -d, --docfiles:List only configuration files (implies -l).
            --provides:List capabilities this package provides.
            -R, --requires:List capabilities on which this package depends.
            --scripts:List  the  package  specific  scriptlet(s)  that  are used as part of the installation and uninstallation processes.

            用法:
                -qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
                -qpi PACKAGE_FILE,-qpl PACKAGE_FILE,-qpc PACKAGE_FILE...
        
        包相關信息查詢:-i, --info
            有這些信息:版本、配置文件、文檔文件、安裝生成的文件、包間依賴、包的腳本

    校驗:
        rpm {-V|--verify} [select-options] [verify-options]

        S file Size differs
        M Mode differs (includes permissions and file type)
        5 digest (formerly MD5 sum) differs
        D Device major/minor number mismatch
        L readLink(2) path mismatch
        U User ownership differs
        G Group ownership differs
        T mTime differs
        P caPabilities differ
        文件大小、權限、校驗碼、主次設備號、屬主、屬組、修改時間、功能

        包來源合法性驗證和完整性驗證:
        來源合法性驗證:
            GPG密鑰
            數字簽名:
                包制作者將包的特征碼非對稱加密,
            1.將源包提取特征碼a
            2.用私鑰加密特征碼a,放在包的后面
            3.用戶用公鑰得到特征碼a,再算得到包的特征碼b,匹配ab特征碼
        獲取并導入信任的包制作者的密鑰:
            對于CentOS發行版來說:
                rpm --imprt /etc/pkl/rpm-gpg/RPM-GPG-KEY-CentOS-7
            通過光盤導入數字簽名: 
                rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-7
        完整性驗證:
            驗證: 
            1.安裝此組織簽名的程序時,會自動執行驗證;
            2.手動驗證:rpm -K PACKAGE_FILE

    數據庫(database)(包的數據庫)重建:
        
        rpm管理器數據庫路徑:/var/lib/rpm/
            查詢操作:通過此處的數據庫進行

        rpm {--initdb|--rebuilddb}
            --initdb:初始化數據庫,當前無任何數據庫時新建,有數據庫時不操作
            --rebuilt:根據已安裝的程序包首部信息(headers)重建數據庫

但是rpm只是解決了包的安裝卸載的問題,有個困擾用戶的巨大問題沒有被解決:包間依賴!在紅帽系列的上采用了yum這個前段工具。

所以我們通常使用yum管理軟件,很好用哦。

yum

yum能干什么呢?yum能根據所要安裝的軟件,分析軟件的依賴關系,并且在軟件倉庫中下載軟件到本地安裝,也就是說,只需要輸入一條yum指令就可以直接裝好軟件并使用了特別方便。下面介紹yum的用法:

yum命令用法:
yum [OPTIONS] [COMMAND] [PACKAGE]

   看看有哪些command可以用:
    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * update-minimal [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * autoremove [package1] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache [fast]
    * groups [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
       (maintained for legacy reasons only - use repoquery or yum provides)
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * repoinfo [all|enabled|disabled]
    * repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * load-transaction [txfile]
    * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
    * fssnapshot [summary | list | have-space | create | delete]
    * fs [filters | refilter | refilter-cleanup | du]
    * check
    * help [command]
    
    有點多了,常用的選項有這些:
    
    顯示倉庫列表:repolist [all|enable|disable]
    顯示程序包:list
        # yum list [all| glob_exp1] [glob_exp2] [...]
        # yum list {available|installed|updates} [glob_exp1] [...]
    安裝程序包:install
        install package [package2] [...]
        reinstall package1 [package2] [...] (重裝)
    升級程序包:
        update [package1] [package2] [...]
        downgrade package1 [package2] [...] (降級)
    檢查升級:check-update
    卸載程序包:
        remove| erase package1 
    查詢包信息:info
        info [...]
    查看指定特性或文件是由哪個程序包所提供的:
        provides | whatprovides feature1 [feature2] [...]
    清除本地緩存(包):
        clean [ package | metadate | expire-cache | rpmdb | plugins | all ]:我愛用all選項
    構建緩存:
        makecache 
    搜索關鍵字:
        search string1 [string2] [...]
        以指定的關鍵字搜索程序包及summary信息
    依賴關系分析:
        deplist package1 [package2] [...]
    yum歷史事務:
        history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    安裝及升級本地的包:
        localinstall rpmfile1 [rpmfile2] [...]
        localupdate rpmfile1 [rpmfile2] [...]
    包組管理相關的命令:groups
        groupinstall group1 [group2] [...]
        groupupdate group1 [group2] [...]
        grouplist [hidden] [groupwildcard] [...]
        groupremove [groupr1] [groupr2] [...]
        grouprinfo group1 [group2] [...]

yum倉庫

再來說說倉庫,repository,倉庫又被稱為源,有本地源和網絡源,可以用光盤作為本地源獲取軟件并安裝,這樣不用擔心軟件來源和安全問題。網絡源國內有阿里源(吐槽一下阿里源太慢了),搜狐源,還有清華大學的源。

將光盤作為本地源

首先掛載光盤:

mount -r /dev/cdrom /media/cdrom
# -r只讀掛載,將光盤掛載到/media目錄下的cdrom目錄

修改本地的yum倉庫文件,/etc目錄下的/etc/yum.repos.d/目錄下的以.repo文件。

vi /etc/yum.repos.d/locationcdrom.repo
# 格式如下

[repositoryID]
#自定義一個軟件倉庫的ID
name=
#
baseurl=
enabele=
gpgcheck=

然后用yum repolist查看是否已經建立好的倉庫

#yum repolist還會更新一下本地軟件倉庫列表的緩存

如果想將定義一個網絡源,.repo文件需要將baseurl選項修改為網絡源的URL即可。

那么我平常只會用到幾款軟件并不想讓本地緩存變得特別大,怎么辦?
可以自建yum倉庫。用createrepo一鍵輕松搞定!

eg:我有100個RPM包放在~/software目錄下
    createrepo ~/software
    于是就建立了一個repodate目錄,就可以提供給本地使用了
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容