Linux軟件安裝管理之1——rpm命令管理

Linux軟件包管理

  1. rpm命令管理 https://blog.csdn.net/jiduochou963/article/details/86619233
  2. yum在線命令 https://blog.csdn.net/jiduochou963/article/details/86653645
  3. 源碼包管理 https://blog.csdn.net/jiduochou963/article/details/86653703
  4. 腳本安裝包 https://blog.csdn.net/jiduochou963/article/details/86655625

軟件包管理簡介

軟件包分類

源碼包

  • 源碼包優勢
    • 開源,只要有能力,能夠修改源代碼
    • 能夠自由選擇所需的功能
    • 軟件是編譯安裝,因此更加適合本身的系統,更加穩定效率也更高
    • 卸載方便
  • 源碼包缺點
    • 安裝過程步驟較多,尤爲安裝較大的軟件集合時(如LAMP環境搭建),容易出現拼寫錯誤
    • 編譯過程時間較長,安裝比二進制安裝時間長
    • 由於是編譯安裝,安裝過程當中一旦報錯新手很難解決
  • 腳本安裝包——所謂的腳本安裝包,就是把複雜的軟件包安裝過程寫成了程序腳本,初學者能夠執行腳本實現一鍵安裝。但實際安裝的仍是源碼包和二進制包(下面將會介紹)
    • 優勢:安裝簡單、快捷;
    • 缺點:徹底喪失了自定義性。

二進制包(RPM包、系統默認包)

  • 二進制包的優勢
    • 包管理系統簡單,只經過幾個命令就能夠實現包的安裝、升級、查詢和卸載
    • 安裝速度比源碼安裝快的多
  • 二進制包缺點
    • 通過編譯,再也不能夠看到源代碼
    • 功能選擇不如源碼包靈活
    • 依賴性(下面將會介紹)
  • RPM包安裝命令分兩種安裝方法:rpm手工命令安裝+yum在線安裝

報告環境
[root@localhost /]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

1、 rpm命令管理

RPM包命名規則

RPM包的來源

  • RPM包在系統鏡像文件ISO中————Linux系統光盤中包含了全部的RPM包
  • 使用
    • 虛擬機設置-> CD/DVD(IDE)->設備狀態:已鏈接打鉤。(至關於給光驅加電源)
    • 鏈接->使用ISO鏡像文件(M)->瀏覽:選擇系統鏡像文件
    • 給光盤建立一個掛載點
      在這裏插入圖片描述
[root@localhost cdrom]# mkdir /mnt/cdrom
[root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
mount: 在 /dev/sr0 上找不到媒體
[root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@localhost cdrom]# ls -al /mnt/cdrom/
總用量 1643
drwxr-xr-x. 8 root root    2048 5月   4 2018 .
drwxr-xr-x. 3 root root      19 1月  23 20:50 ..
-rw-rw-r--. 1 root root      14 5月   2 2018 CentOS_BuildTag
-rw-r--r--. 1 root root      29 5月   4 2018 .discinfo
drwxr-xr-x. 3 root root    2048 5月   4 2018 EFI
-rw-rw-r--. 1 root root     227 8月  30 2017 EULA
-rw-rw-r--. 1 root root   18009 12月 10 2015 GPL
drwxr-xr-x. 3 root root    2048 5月   4 2018 images
drwxr-xr-x. 2 root root    2048 5月   4 2018 isolinux
drwxr-xr-x. 2 root root    2048 5月   4 2018 LiveOS
drwxrwxr-x. 2 root root 1640448 5月   3 2018 Packages
drwxrwxr-x. 2 root root    4096 5月   7 2018 repodata
-rw-rw-r--. 1 root root    1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root    1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root    2883 5月   7 2018 TRANS.TBL
-rw-r--r--. 1 root root     354 5月   4 2018 .treeinfo
[root@localhost cdrom]# cd /mnt/cdrom/Packages/
[root@localhost Packages]# ls # 這將會列出全部的PRM包,這裏省略
...

若是出現/dev/sr0 上找不到媒體,解決辦法是在虛擬機底部的狀態欄內,找到CD/DVD圖標(一個光盤圖標),此時通常顯示爲灰色,鼠標點一下,便可啓動CD/DVD,此時CD/DVD便可加載到虛擬機系統內.
在這裏插入圖片描述node

因此RPM包在哪呢? RPM包在/mnt/cdrom/Packages目錄下:mysql

[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# 
[root@localhost Packages]# cd /
[root@localhost /]# umount /mnt/cdrom/

RPM包命名原則

如:httpd-2.2.15-15.el6.centos.1.i686.rpmlinux

  • httpd 軟件包名
  • 2.2.15 軟件版本
  • 15 軟件發佈的次數
  • el6.centos 適合的Linux平臺(el6是Redhat的企業版)
  • i686 適合的硬件平臺
  • rpm rpm包的擴展名
    包名稱-版本-發佈次數.適合的Linux平臺.適合的硬件平臺.包的擴展名

RPM包依賴性:

  • 樹形依賴:a->b->c 解決方法:從後往前安裝
  • 環形依賴:a->b->c->a 解決方法:全部包放在一條命令中安裝便可
  • 模塊依賴:庫文件依賴,庫也叫模塊,就是linux當中的函數,它有一個典型的特徵,就是以.so.數字結尾,它依賴的實際上是一個文件,而不是軟件包。該文件藏身在某一個軟件包當中,咱們只要將該文件所在的軟件包安裝上,該文件也就安裝了。
    • 如:
    [root@localhost Packages]# rpm -ivh mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
    警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
    錯誤:依賴檢測失敗:
            libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 須要
            libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 須要
    [root@localhost Packages]# 
    # 提示說要安裝libodbc.so.2()(64bit),凡是以`.so.數字`結尾的依賴稱庫文件依賴(庫也稱模塊,庫就是linux中的函數,這裏的函數就是一個文件,使用稱庫文件)。
    # 安裝時找不到如libodbc.so.2()這種依賴,爲啥呢?由於mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 依賴的是一個文件而不是Packages目錄下的這些PRM軟件包,
    # 即被依賴的庫文件是藏身在衆多PRM軟件包中的一個文件,只要把這個文件所在PRM軟件包裝上,天然就有了被依賴的這個文件。
    那我怎麼知道這個文件在哪一個包裏面呢?
    三個方法:
    1. 根據文件猜在哪一個包中,額 可行性不大
    2. 查詢http://www.rpmfind.net,輸入庫文件名稱查詢到對應的rpm包,而後安裝便可。(詳下)
    3. yum在線安裝(下面將會介紹):Redhat或CentOS等Linux系統在遠程搭建一個服務器放置全部用到的軟件,只要Linux能正常訪問這臺遠程服務器,那麼執行一條yum命令,在服務器上會自動匹配依賴性(不論是樹形依賴、環形依賴、庫依賴etc),自動下載全部依賴的包,一條命令裝好包括依賴包在內的須要安裝的全部軟件包。在不聯網狀況下,鏡像光盤能夠做爲本地yum(下面將會介紹)。CentOS的yum是免費的。yum安裝的包是二進制包。

在這裏插入圖片描述
在這裏插入圖片描述

安裝命令

包全名與包名

mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm就是包全名(完整的包名),而mysql-connector-odbc是包名。web

  • 包全名:操做的包是尚未安裝的軟件包時,必須使用包全名,並且要注意路徑。(主要是安裝和升級的時候)
  • 包名:操做已經安裝的軟件包時,使用包名,緣由是會搜索/var/lib/rpm/中的數據庫。(主要是卸載和查詢的時候)

RPM安裝

  • rpm -ivh 包全名
  • 選項
    • -i(install) 安裝
    • -v(verbose) 顯示詳細信息
    • -h(hash) 顯示進度
    • --nodeps 不檢測依賴性(實際生產環境——服務器上是不容許使用,必須解決依賴性)
實踐——安裝Apache

先裝主包,再安裝附加包(附加包依賴主包)正則表達式

[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        /etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 須要
        httpd-tools = 2.4.6-80.el7.centos 被 httpd-2.4.6-80.el7.centos.x86_64 須要
        libapr-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 須要
        libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 須要
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 須要
        libaprutil-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 須要
[root@localhost Packages]# rpm -ivh ^C
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm 
警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:apr-1.4.8-3.el7_4.1              ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
警告:apr-util-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:apr-util-1.5.2-6.el7             ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:httpd-tools-2.4.6-80.el7.centos  ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm 
警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 apr-1.4.8-3.el7_4.1.x86_64 已經安裝
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
警告:apr-util-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 apr-util-1.5.2-6.el7.x86_64 已經安裝
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        /etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 須要
[root@localhost Packages]# rpm -ivh /etc/mime.types
錯誤:打開 /etc/mime.types 失敗: 沒有那個文件或目錄
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm 
警告:mailcap-2.1.41-2.el7.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:mailcap-2.1.41-2.el7             ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:httpd-2.4.6-80.el7.centos        ################################# [100%]
[root@localhost Packages]# 
[root@localhost Packages]# 
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:httpd-manual-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        apr-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 須要
        apr-util-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 須要
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
錯誤:打開 apr-devel-1.4.8-3.el7_4.1. 失敗: 沒有那個文件或目錄
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
apr-devel-1.4.8-3.el7_4.1.i686.rpm    apr-devel-1.4.8-3.el7_4.1.x86_64.rpm  
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.x86_64.rpm 
警告:apr-devel-1.4.8-3.el7_4.1.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:apr-devel-1.4.8-3.el7_4.1        ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.
apr-util-devel-1.5.2-6.el7.i686.rpm    apr-util-devel-1.5.2-6.el7.x86_64.rpm  
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm 
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        expat-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
        libdb-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
        openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh expat-devel-2.1.0-10.el7_3.x86_64.rpm 
警告:expat-devel-2.1.0-10.el7_3.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:expat-devel-2.1.0-10.el7_3       ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh lib
Display all 2016 possibilities? (y or n)
[root@localhost Packages]# rpm -ivh libdb-devel-5.3.21-24.el7.x86_64.rpm 
警告:libdb-devel-5.3.21-24.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:libdb-devel-5.3.21-24.el7        ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm 
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 須要
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-20.el7.x86_64.rpm
錯誤:打開 openldap-devel-2.4.44-20.el7.x86_64.rpm 失敗: 沒有那個文件或目錄
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm 
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 須要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm 
警告:cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:cyrus-sasl-devel-2.1.26-23.el7   ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
錯誤:依賴檢測失敗:
        openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 須要
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:openldap-devel-2.4.44-13.el7     ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:apr-util-devel-1.5.2-6.el7       ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 apr-util-devel-1.5.2-6.el7.x86_64 已經安裝
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-manual-2.4.6-80.el7.centos.noarch 已經安裝
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:httpd-devel-2.4.6-80.el7.centos  ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]#
檢查:
[root@localhost Packages]# rmp -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
bash: rmp: 未找到命令...
類似命令是: 'rpm'
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
bash: rmp: 未找到命令...
類似命令是: 'rpm'
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
bash: rmp: 未找到命令...
類似命令是: 'rpm'
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-manual-2.4.6-80.el7.centos.noarch 已經安裝
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-devel-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]# 

累趴…sql

升級與卸載

RPM包升級

-rpm -Uvh 包全名shell

  • 選項
    • -U(upgrade)升級
    • 若果沒安裝,則升級即安裝
    [root@localhost ~]# cd /mnt/cdrom/Packages/
    [root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
    準備中...                          ################################# [100%]
          軟件包 httpd-2.4.6-80.el7.centos.x86_64 已經安裝
    [root@localhost Packages]# 

卸載

  • rpm -e 包名
  • 選項:
    • -e(erase) 卸載
    • --nodeps 不檢查依賴性(一樣,實際生產環境————服務器上是不容許使用,必須解決依賴性)
  • 由於會查找數據庫(位置/var/lib/rpm/),使用不用使用包全名,並且在任何位置均可以執行卸載命令(不用注意路徑, 而安裝命令必定要進入/mnt/cdrom/Packages/)

例子:數據庫

Last login: Wed Jan 23 17:59:27 2019 from 192.168.249.1

[root@localhost ~]# cd /mnt/cdrom/Packages/
[root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
        軟件包 httpd-2.4.6-80.el7.centos.x86_64 已經安裝
[root@localhost Packages]# ls /var/lib/rpm/
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -e httpd
錯誤:依賴檢測失敗:
        httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-manual-2.4.6-80.el7.centos.noarch 須要
        httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-devel-2.4.6-80.el7.centos.x86_64 須要
[root@localhost Packages]# 

使用--nodeps————這裏只是演示apache

[root@localhost Packages]# rpm -e httpd --nodeps 
[root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中...                          ################################# [100%]
正在升級/安裝...
   1:httpd-2.4.6-80.el7.centos        ################################# [100%]
[root@localhost Packages]# 

RPM包查詢

查詢是否安裝

  • rpm -q 包名 # 查詢包是否安裝
    • -q(query) 查詢
  • rpm -qa # 查詢全部已經安裝的RPM包
    • -a(all) 全部
[root@localhost Packages]# rpm -q httpd
httpd-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]# rpm -q onefine
未安裝軟件包 onefine 
[root@localhost Packages]# rpm -qa # 列出全部安裝的包,省略
...

利用管道符————一旦使用grep,後面的就是正則表達式————推薦使用centos

[root@localhost Packages]# rpm -qa | grep httpd
httpd-manual-2.4.6-80.el7.centos.noarch
httpd-2.4.6-80.el7.centos.x86_64
httpd-tools-2.4.6-80.el7.centos.x86_64
httpd-devel-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]# 

查詢軟件包詳細信息

  • rpm -qi 包名
  • 選項:
    • -i(information) 查詢軟件信息
    • -p(package) 查詢未安裝包信息

查詢已安裝包的信息:

[root@localhost Packages]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 80.el7.centos
Architecture: x86_64
Install Date: 2019年01月24日 星期四 00時13分06秒
Group       : System Environment/Daemons
Size        : 9817285
License     : ASL 2.0
Signature   : RSA/SHA256, 2018年04月25日 星期三 19時04分41秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-80.el7.centos.src.rpm
Build Date  : 2018年04月21日 星期六 02時12分22秒
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost Packages]# 

查詢未安裝包的信息(存在但沒安裝的包,此時跟包全名而且要注意位置————切換目錄)

[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qip mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
Name        : mysql-connector-odbc
Version     : 5.2.5
Release     : 7.el7
Architecture: x86_64
Install Date: (not installed)
Group       : System Environment/Libraries
Size        : 428611
License     : GPLv2 with exceptions
Signature   : RSA/SHA256, 2018年04月25日 星期三 19時28分41秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : mysql-connector-odbc-5.2.5-7.el7.src.rpm
Build Date  : 2018年04月11日 星期三 09時41分42秒
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://dev.mysql.com/downloads/connector/odbc/
Summary     : ODBC driver for MySQL
Description :
An ODBC (rev 3) driver for MySQL, for use with unixODBC.
[root@localhost Packages]# 

查詢包中文件的安裝位置

  • rpm -ql 包名
  • 選項
    • -l(list) 列表
    • -p(package) 查詢未安裝包信息
[root@localhost Packages]# rpm -ql httpd 
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
...省略好多

RPM包默認安裝位置

RPM包默認(習慣、推薦、常規)安裝路徑
/etc/ 配置文件安裝目錄
/usr/bin/ 可執行的命令安裝目錄
/usr/lib/ 程序所使用的函數庫保存位置
/usr/share/doc/ 基本的軟件使用手冊保存位置
/usr/share/man/ 幫助文件保存位置

這是包安裝的推薦位置,可是實際上不必定,這取決與寫包的做者的安排。正是由於這樣,因此纔有RPM包的卸載命令。下面的實踐就更好理解了。

查詢未安裝包的默認安裝(還沒裝,但安裝以後會在的位置)位置(存在但沒安裝的包,此時跟包全名而且要注意位置————切換目錄)

[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qlp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
/usr/lib64/libmyodbc5.so
/usr/lib64/libmyodbc5w.so
/usr/share/doc/mysql-connector-odbc-5.2.5
/usr/share/doc/mysql-connector-odbc-5.2.5/COPYING
/usr/share/doc/mysql-connector-odbc-5.2.5/ChangeLog
/usr/share/doc/mysql-connector-odbc-5.2.5/README
/usr/share/doc/mysql-connector-odbc-5.2.5/README.debug
[root@localhost Packages]# 

查詢系統文件屬於哪一個RPM包

  • rpm -qf 系統文件名
  • 選項:
    • -f(file) 查詢系統文件屬於哪一個安裝包
[root@localhost Packages]# rpm -qf /etc/httpd/conf.d
httpd-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]# 

來搗亂:

[root@localhost Packages]# rpm -qf onefine
錯誤:文件 /mnt/cdrom/Packages/onefine:沒有那個文件或目錄
[root@localhost Packages]# touch abc
touch: 沒法建立"abc": 只讀文件系統
[root@localhost Packages]# touch /home/onefine/hahaha
[root@localhost Packages]# ls -al /home/onefine/
總用量 12
drwx------. 3 onefine onefine  92 1月  24 01:24 .
drwxr-xr-x. 3 root    root     21 1月  23 17:45 ..
-rw-r--r--. 1 onefine onefine  18 4月  11 2018 .bash_logout
-rw-r--r--. 1 onefine onefine 193 4月  11 2018 .bash_profile
-rw-r--r--. 1 onefine onefine 231 4月  11 2018 .bashrc
-rw-r--r--. 1 root    root      0 1月  24 01:24 hahaha
drwxr-xr-x. 4 onefine onefine  39 1月  23 17:33 .mozilla
[root@localhost Packages]# rpm -qf /home/onefine/hahaha 
文件 /home/onefine/hahaha 不屬於任何軟件包
[root@localhost Packages]# rm /home/onefine/hahaha 
rm:是否刪除普通空文件 "/home/onefine/hahaha"?y
[root@localhost Packages]# ls -al /home/onefine/
總用量 12
drwx------. 3 onefine onefine  78 1月  24 01:26 .
drwxr-xr-x. 3 root    root     21 1月  23 17:45 ..
-rw-r--r--. 1 onefine onefine  18 4月  11 2018 .bash_logout
-rw-r--r--. 1 onefine onefine 193 4月  11 2018 .bash_profile
-rw-r--r--. 1 onefine onefine 231 4月  11 2018 .bashrc
drwxr-xr-x. 4 onefine onefine  39 1月  23 17:33 .mozilla
[root@localhost Packages]# 

因此,這個文件必須是由RPM包安裝的,才能方向追蹤所屬的包————'系統文件名’的意思。

再來:已知未安裝包未來的位置。。查這個不存在的文件會怎麼樣?以上面的MySQL爲例

[root@localhost Packages]# rpm -qf /usr/lib64/libmyodbc5w.so
錯誤:文件 /usr/lib64/libmyodbc5w.so:沒有那個文件或目錄
[root@localhost Packages]# 
[root@localhost Packages]# rpm -qf #/usr/lib64/libmyodbc5w.so
錯誤:文件 /usr/lib64/libmyodbc5w.so:沒有那個文件或目錄
[root@localhost Packages]# rpm -qfp /usr/lib64/libmyodbc5w.so # 固然了,這是錯誤的
rpm:每次僅能執行一種類型的查詢/檢驗
[root@localhost Packages]# 

查詢軟件包的依賴性

  • rpm -qR 包名
  • 選項:
    • -R(requires) 查詢軟件包的依賴性
    • -p(package) 查詢未安裝包的信息
[root@localhost Packages]# rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-80.el7.centos
/usr/sbin/useradd
/usr/sbin/groupadd
systemd-units
systemd-units
systemd-units
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(FileCaps) <= 4.6.1-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
/bin/sh
libapr-1.so.0()(64bit)
libaprutil-1.so.0()(64bit)
libcrypt.so.1()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdb-5.3.so()(64bit)
libdl.so.2()(64bit)
libexpat.so.1()(64bit)
liblua-5.1.so()(64bit)
libm.so.6()(64bit)
libpcre.so.1()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libselinux.so.1()(64bit)
libsystemd-daemon.so.0()(64bit)
libsystemd-daemon.so.0(LIBSYSTEMD_DAEMON_31)(64bit)
libz.so.1()(64bit)
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
[root@localhost Packages]# 

列出全部全部全部……若是要查看包的依賴去安裝包,這個意義不大,還不如直接安裝,安裝提示安裝缺失的依賴。

[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qR mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
未安裝軟件包 mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
[root@localhost Packages]# rpm -qRp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
/sbin/ldconfig
/sbin/ldconfig
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libm.so.6()(64bit)
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)
libodbc.so.2()(64bit)
libodbcinst.so.2()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
[root@localhost Packages]# 

RPM包校驗

RPM包校驗

  • rpm -V 已安裝的包名
  • 選項:
    • -V(verify) 校驗指定RPM包中的文件
[root@localhost ~]# rpm -V httpd
[root@localhost ~]# pwd
/root
[root@localhost ~]# rpm -ql httpd | more
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/run/httpd
/run/httpd/htcacheclean
/usr/lib/systemd/system/htcacheclean.service
/usr/lib/systemd/system/httpd.service
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd
/usr/lib64/httpd/modules
/usr/lib64/httpd/modules/mod_access_compat.so
/usr/lib64/httpd/modules/mod_actions.so
/usr/lib64/httpd/modules/mod_alias.so
/usr/lib64/httpd/modules/mod_allowmethods.so
/usr/lib64/httpd/modules/mod_asis.so
/usr/lib64/httpd/modules/mod_auth_basic.so
/usr/lib64/httpd/modules/mod_auth_digest.so
/usr/lib64/httpd/modules/mod_authn_anon.so
/usr/lib64/httpd/modules/mod_authn_core.so
/usr/lib64/httpd/modules/mod_authn_dbd.so
/usr/lib64/httpd/modules/mod_authn_dbm.so
/usr/lib64/httpd/modules/mod_authn_file.so
/usr/lib64/httpd/modules/mod_authn_socache.so
/usr/lib64/httpd/modules/mod_authz_core.so
/usr/lib64/httpd/modules/mod_authz_dbd.so
/usr/lib64/httpd/modules/mod_authz_dbm.so
/usr/lib64/httpd/modules/mod_authz_groupfile.so
--More--  # 後面的省略
...
# ...修改/etc/httpd/conf/httpd.conf文件
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
# ...添加下面一句話
# 你被改了你知道不
# ...省略其餘
# ...保存退出後
[root@localhost ~]# rpm -V httpd
S.5....T.  c /etc/httpd/conf/httpd.conf
# ...修改回來
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
# ...修改回來以後
[root@localhost ~]# rpm -V httpd
.......T.  c /etc/httpd/conf/httpd.conf
[root@localhost ~]#
驗證內容中的8個信息的具體內容(依次)以下:
  • S 文件大小是否改變
  • M 文件的類型或文件的權限(rwx)是否被改變
  • 5 文件的MD5校驗和是否改變(能夠當作文件內容是否改變)
  • D 設備的主從代碼是否改變
  • L 文件的路徑是否改變
  • U 文件的屬主(全部者)是否改變
  • G 文件的屬組是否改變
  • T 文件的修改時間是否改變
文件類型
  • c(config file) 配置文件
  • d(documentation) 普通文件
  • g(ghost file) "鬼"文件,不多見,就是該文件不該該被這個RPM所包含
  • L(license file) 受權文件
  • r(read me) 描述文件

RPM包中文件提取

  • rpm2cpio 包全名 | cpio -idv .文件絕對路徑
    • rpm2cpio 將rpm包轉換爲cpio格式的命令
      • 2諧音to,就是將rpm格式的包轉換成cpio格式的包
    • cpio 是一個標準工具,它用於建立軟件歸檔文件和從檔案文件中提取文件
      • cpio並不知道咱們所要提取的文件的位置在哪,
    • cpio命令的完整格式:cpio 選項 <[文件|設備]
      • 選項:
        • -i copy-in模式,還原
        • -d 還原時自動新建目錄
        • -v 顯示還原過程
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# ls -al /tmp/
總用量 936
drwxrwxrwt. 16 root root   4096 1月  24 10:32 .
dr-xr-xr-x. 17 root root    224 1月  23 17:45 ..
-rw-r--r--.  1 root root   1149 1月  23 17:49 anaconda.log
drwx------.  2 root root     20 1月  23 17:55 .esd-0
drwx------.  2 root root     25 1月  23 17:57 firefox_root
drwxrwxrwt.  2 root root      6 1月  23 17:35 .font-unix
drwxr-xr-x.  2 root root     18 1月  23 17:35 hsperfdata_root
drwxrwxrwt.  2 root root     42 1月  23 17:55 .ICE-unix
-rw-r--r--.  1 root root    415 1月  23 17:49 ifcfg.log
-rwx------.  1 root root    836 1月  23 17:46 ks-script-L9LDqY
-rw-r--r--.  1 root root      0 1月  23 17:49 packaging.log
-rw-r--r--.  1 root root      0 1月  23 17:49 program.log
-rw-r--r--.  1 root root      0 1月  23 17:49 sensitive-info.log
drwx------.  2 root root     24 1月  23 17:55 ssh-2uFxXSQ6gkGr
-rw-r--r--.  1 root root      0 1月  23 17:49 storage.log
drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-colord.service-aG1lXN
drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-cups.service-3UD9lx
drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-rtkit-daemon.service-nv9Cuu
drwxrwxrwt.  2 root root      6 1月  23 17:35 .Test-unix
drwx------.  2 root root      6 1月  23 17:55 tracker-extract-files.0
drwx------.  2 root root      6 1月  23 17:49 vmware-root
-r--r--r--.  1 root root     11 1月  23 17:54 .X0-lock
drwxrwxrwt.  2 root root     16 1月  23 17:54 .X11-unix
drwxrwxrwt.  2 root root      6 1月  23 17:35 .XIM-unix
-rw-------.  1 root root      0 1月  23 17:32 yum.log
-rw-------.  1 root root 466361 1月  23 17:57 yum_save_tx.2019-01-23.17-57.TSYLg6.yumtx
-rw-------.  1 root root 469566 1月  24 09:45 yum_save_tx.2019-01-24.09-45.UL5IOq.yumtx
[root@localhost ~]# mv /bin/ls /tmp/
[root@localhost ~]# ls -al /tmp/
-bash: /usr/bin/ls: 沒有那個文件或目錄
[root@localhost ~]# ls
-bash: /usr/bin/ls: 沒有那個文件或目錄
[root@localhost ~]# 

這時,假如是誤操做致使ls找不到,能夠找到另外一臺Linux,把缺失的命令文件找出來複製,但要保證版本號和缺失的一致。額,要是mv也丟了呢?這時能夠經過RPM包中提取文件的方法:
咱們知道全部的文件RPM包安裝獲得的,全部的系統文件,重要文件等都在RPM包當中。此時能夠把丟失文件所在的RPM包打開,從裏面提取出所須要的RPM命令,這就是所謂RPM包文件提取。固然了,重新安裝缺失文件所在RPM包也能夠解決問題。

[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64
[root@localhost ~]# ls
-bash: /usr/bin/ls: 沒有那個文件或目錄
# 還原ls
[root@localhost ~]# mv /tmp/ls /bin/
[root@localhost ~]# ls -al /bin/ls 
-rwxr-xr-x. 1 root root 117672 4月  11 2018 /bin/ls

# 實驗從這裏開始
# 查詢ls命令屬於哪一個軟件包
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64
# 移走ls,形成ls命令誤刪除假象
[root@localhost ~]# mv /bin/ls /tmp/
# 提取RPM包中ls命令到當前目錄的/bin/ls下
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./bin/ls
28594 塊
[root@localhost ~]# pwd
/root
[root@localhost ~]# cp /root/bin/ls /bin/
cp: 沒法獲取"/root/bin/ls" 的文件狀態(stat): 沒有那個文件或目錄
[root@localhost ~]# ls
-bash: /usr/bin/ls: 沒有那個文件或目錄
[root@localhost ~]# cp /root/
anaconda-ks.cfg       .bashrc               .dbus/                .local/               模板/                 下載/                 
.bash_history         .cache/               .esd_auth             .mozilla/             視頻/                 音樂/                 
.bash_logout          .config/              .ICEauthority         .tcshrc               圖片/                 桌面/                 
.bash_profile         .cshrc                initial-setup-ks.cfg  公共/                 文檔/                 
[root@localhost ~]# dir
anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[root@localhost ~]# find / -name 'ls'
/tmp/ls
[root@localhost ~]#

好鬱悶吶,找了半天最終仍是找出來了:

# 提取RPM包中ls命令到當前目錄的/usr/bin/ls下
# rpm2cpio是說把RPM包/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm的數據轉換爲cpio格式的。
# cpio -idv ./usr/bin/ls 是說cpio知道了要從/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm中提取數據——/usr/bin/ls,`.`表示從把/usr/bin/ls這個文件提取到當前所在目錄下
# 參數`-d`表示自動新建目錄,因此提取的文件ls會保存在當前目錄下的/usr/bin/目錄下
# 管道符的做用是將第一個命令的結果做爲第二個命令的操做對象
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
./usr/bin/ls
28594 塊
[root@localhost ~]# dir
anaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[root@localhost ~]# dir ./usr/bin/
ls
# 把ls命令複製回/bin/目錄,修復文件丟失
[root@localhost ~]# cp ./usr/bin/ls /bin/
[root@localhost ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[root@localhost ~]# rm -rf ./usr
[root@localhost ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  視頻  圖片  文檔  下載  音樂  桌面
[root@localhost ~]#

注:./usr是當前目錄下的usr文件夾,是相對路徑。/usr是根目錄下的usr文件夾,是絕對路徑。.千萬不能省略,表明缺失文件要保存在命令執行時所在的當前目錄的位置。

但這是什麼緣由呢?查看一下ls命令所在RPM包的默認安裝位置:

[root@localhost /]# pwd
/
[root@localhost /]# rpm -ql coreutils 
/etc/DIR_COLORS
/etc/DIR_COLORS.256color
/etc/DIR_COLORS.lightbgcolor
/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
/usr/bin/[
...
/usr/bin/ls  # 先後被省略
...
[root@localhost /]# 

恍然大悟。。。


  1. yum在線命令 https://blog.csdn.net/jiduochou963/article/details/86653645
相關文章
相關標籤/搜索