sed的高級命令和軟件包管理器rpm

一、 sed的高級編輯命令

 1、高級編輯命令

  P:打印模式空間開端至\n內容,並追加到默認輸出之前
  h:把模式空間中的內容覆蓋至保持空間中
  H:把模式空間中的內容覆蓋至保持空間中
  g:從保持空間取出數據覆蓋至模式空間
  G:從保持空間取出內容追加至模式空間
  x:把模式空間中的內容與保持空間中的內容進行互換
  n:讀取匹配到的行的下一行覆蓋至模式空間
  N:讀取匹配到的行的下一行追加至模式空間
  d:刪除模式空間中的行
  D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸入行,而使用合成的模式空間重新啓動循環。如果模式空間不包含換行符,則會想發出d命令那樣啓動正常的新循環

 2、sed示例:

  sed -n ‘n;p’ file 顯示偶數行
  sed ‘1!G;h;$!d’ file 倒序顯示文件每一行內容
  sed ‘N;D’ file 僅顯示最後一行
  sed ‘$!N;$!D’ file 僅顯示文件最後兩行
  sed ‘G’ file 每行後加一個空行
  sed ‘g’ file 將每行內容替換爲空行
  sed ‘/^$/d;G’ file 每行後加一個空行,已有空白行的僅顯示一個空白行
  sed ‘n;d’ file 顯示奇數行
  sed -n ‘1!G;h;$p’ file 倒序顯示文件的每一行內容

二、 軟件包管理

 1、 軟件運行和編譯

  1. 軟件編譯的流程

   程序源代碼預處理編譯彙編鏈接
   動態編譯:.a
   動態編譯:.so
sed的高級命令和軟件包管理器rpm

  2. 靜態和動態鏈接

   鏈接主要作用是把各個模塊之間互相引用的部分處理好,使得各個模塊之間能夠正確的銜接,分爲靜態鏈接和動態鏈接
   靜態鏈接的特點:
    把程序對應的依賴庫複製一份到包
    libxxx.a
    嵌入程序包
    升級難,需要重新編譯
    佔用較多空間,遷移容易
   動態鏈接的特點:
    只把依賴加做一個動態鏈接
    libxxx.so
    “鏈接指向”
    佔用較少空間,升級方便

  3. 開發語言

   系統級開發
    C
    C++
   應用及開發
    Java
    delphi
    python
    go
    Php
    perl
    ruby

 2、 軟件包

  1.二進制應用程序的組成部分:

   二進制文件、庫文件、配置文件、幫助文件

  2.程序包管理器

   debian:deb文件, dpkg包管理器
   redhat: rpm文件, rpm包管理器
   rpm: Redhat Package Manager
   RPM Package Manager

  3.軟件包的命名

   源代碼:
    Name-version.tar.gz|bz2|xz
    名字-版本號.tar.gz|bz2|xz
   rpm包命名方式:
    name-VERSION-release.arch.rpm
    包名-版本號-release.運行平臺.rpm
   常見的arch(運行安裝平臺):
     x86: i386, i486, i586, i686
     x86_64: x64, x86_64, amd64
   跟平臺無關:noarch(平臺是noarch的軟件包代表在大部分平臺上都可以通用的軟件包,兼容性比較好)

  4.包:分類和拆包

   Application-VERSION-ARCH.rpm: 主包
   Application-devel-VERSION-ARCH.rpm 開發子包
   Application-utils-VERSION-ARHC.rpm 其它子包
   Application-libs-VERSION-ARHC.rpm 其它子包
   包之間:可能存在依賴性關係,甚至循環依賴

  5.解決依賴包管理工具

   yum:rpm包管理器的前端工具
   apt-get:deb包管理器前端工具
   zypper: suse上的rpm前端管理工具
   dnf: Fedora 18+ rpm包管理器前端管理工具

  6.庫文件

   查看二進制程序所依賴的庫文件
    ldd 後跟二進制文件路徑 :查看一個二進制程序所依賴的庫文件
   管理及查看本機裝載的庫文件
     ldconfig :加載庫文件
    /sbin/ldconfig -p :顯示本機已經緩存的所有可用庫文件名及文件路徑映射關係
    配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
   緩存文件:/etc/ld.so.cache

  7.包文件的組成(每個包獨有)

   RPM包內的文件
   RPM的元數據,如名稱,版本,依賴性,描述等
   安裝或卸載時運行的腳本

  8.數據庫(公共):/var/lib/rpm

   程序包名稱及版本
   依賴關係
   功能說明
   包安裝後生成的各文件路徑及校驗碼信息

  9.獲取程序包的途徑

   (1) 系統發版的光盤或官方的服務器;

    CentOS鏡像:
     https://www.centos.org/download/
     http://mirrors.aliyun.com
     http://mirrors.sohu.com
     http://mirrors.163.com

   (2) 項目官方站點

   (3) 第三方組織:

    Fedora-EPEL:
    Extra Packages for Enterprise Linux
    Rpmforge:RHEL推薦,包很全
    搜索引擎:
     http://pkgs.org
     http://rpmfind.net
     http://rpm.pbone.net
     https://sourceforge.net/

   (4) 自己製作

    注意:第三方包建議要檢查其合法性
    來源合法性,程序包的完整性

 3、 包管理器

  1.功能:

   將編譯好的應用程序的各組成文件打包一個或幾個 程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操作

  2.管理程序包的方式:

   使用包管理器:rpm
   使用前端工具:yum, dnf

  3.rpm包管理

   CentOS系統上使用rpm命令管理程序包:
    安裝、卸載、升級、查詢、校驗、數據庫維護

   1、 安裝:

    rpm {-i|-stall} [install-options] PACKAGE_FILE…
      -i 安裝
       -v :顯示過程
       -vv:顯示詳細過程
       -h :顯示進度
       -ivh 常用安裝選項
       --nodeps忽略依賴性關係檢測
       --test 測試安裝,但不是真安裝
       --replacepkgs 重複安裝已安裝過的包,文件覆蓋
       --replacefiles 即將安裝的包的部分文件與其他已安裝的包文件衝突,可繼續安裝,文件不覆蓋
       --nosignature: 不檢查來源合法性
       --nodigest:不檢查包完整性
       --noscripts:不執行程序包腳本
       %pre: 安裝前腳本; --nopre
       %post: 安裝後腳本; --nopost
       %preun: 卸載前腳本; --nopreun
       %postun: 卸載後腳本; --nopostun

   2、 升級

    rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
    rpm {-F|--freshen} [install-options] PACKAGE_FILE...
     upgrade:安裝有舊版程序包,則“升級” 如果不存在舊版程序包,則“安裝”
     freshen:安裝有舊版程序包,則“升級”如果不存在舊版程序包,則不執行升級操作
      --oldpackage 指定的包比已安裝過的包舊,降級安裝
      --force 強制安裝
     -U 指定的包比已安裝的包新或者未安裝
     -F 指定的包比已安裝的包新
     例:
      rpm -Uvh PACKAGE_FILE ...
      rpm -Fvh PACKAGE_FILE ...

     注意:
      (1) 不要對內核做升級操作;Linux支持多內核版本並存,因此 ,對直接安裝新版本內核
      (2) 如果原程序包的配置文件安裝後曾被修改,升級時,新版本 的提供的同一個配置文件並不會直接覆蓋老版本的配置文

   3、 包查詢

    -q查看是否安裝
    -qa 查詢已安裝的所有包
    -qf 文件路徑 查詢指定的文件來源於哪一個rpm包
    -ql 包名 查詢該包提供了哪些文件
    -qp# rpm包 對未安裝的包,指定rpm文件再配合其他查詢子選項來進行各項查詢操作
    -q --changelog 包名 查看更新日誌
    -qc 包名 查看該軟件包所提供的配置文件
    -qd 包名 查看該軟件包所提供的文檔文件
    -qi 包名 查看該軟件包的詳細信息
    -q --scripts 查看安裝前及安裝後的腳本
    -q --provides 包名 查看一個軟件包提供了哪些能力
    -qR 包名 查看一個軟件包的運行所依賴的能力
    -q --whatprovides 能力名 查看一個能力由哪個包提供
    -q --whatrequires 能力名 查看一個能力依賴於哪些包
    rpm2cpio 包文件|cpio –itv 預覽包內文件
    rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件
小注意:rpm2cpio 可以將rpm 包轉換爲cpio歸檔文件

   4、 卸載

    -e 包名(包名要打全,除了.rpm其他都要打上)
    rpm -e rpm -q vsftpd 或rpm -e vsftpd --allmatches 安裝了多個版本的某個rpm可以一次性全部刪除
     --nodeps 刪除時不檢查依賴性關係

   5、 校驗

    包來源合法性驗證及完整性驗證
    完整性驗正:SHA256
    來源合法性驗正:RSA
    公鑰加密
     對稱加密:加密、解密使用同一密鑰
     非對稱加密:密鑰是成對兒的
      public key: 公鑰,公開所有人
      secret key: 私鑰, 不能公開
    -V 校驗已安裝的包的文件哪些發生生了更改或丟失,更改變化的類型如下:
     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
    -pV: 顯示比-V還詳細的更改信息,未安裝的包也可以看,-V則不可以
    -V 後跟包名就可以了,-pV: 後必須跟全稱,.rpm只需要跟軟件名就可以了
    下面我們就測試一下
     例圖:
sed的高級命令和軟件包管理器rpm
     當vsftpd的所有配置文件都沒有被改變時-V是沒有反應的,當我們修改某一個文件時在用-V來查詢,下面就就指出了被修改的文件的路徑,S.5….T. 提示了是被更改了哪些信息,
sed的高級命令和軟件包管理器rpm
     這個圖呢是爲了驗證使用-Pv時必須打上軟件包的全稱,否則會出錯呦
sed的高級命令和軟件包管理器rpm
    -K|checksig rpmfile 驗證包的合法性,完整性和簽名
    --import 公鑰: 導入公鑰(公鑰RPM-GPG-KEY-CentOS-6)
    rpm -qa "gpg-pubkey*" 查詢公鑰
    rpm -e rpm -qa "gpg-pubkey*" 刪除公鑰
    導入公鑰例圖:
     第一步,在掛載的光盤下查找公鑰路徑
sed的高級命令和軟件包管理器rpm
     第二部導入公鑰
sed的高級命令和軟件包管理器rpm

  4. rpm數據庫

   rpm數據庫是記錄安裝的哪些軟件包,哪些軟件包沒有被安裝的一個數據庫,rpm -q 就是查詢軟件包是否安裝的一個命令,而這個命令訪問的就是這個數據庫裏面的文件來得知該軟件包是否被安裝然後再告訴用戶的,如果這個數據庫被刪除了,則使用rpm -q就會出錯,不管有沒有安裝哪個包都會提示沒有安裝,因爲數據庫中沒有這個軟件包的記錄了。rpm數據庫的路徑是/var/lib/rpm
   數據庫重建:
    rpm {--initdb|--rebuilddb}
     Initdb :初始化
      如果事先不存在數據庫,則建之
      否則不執行任何操作
     rebuilddb :重建已安裝的包頭的數據庫索引目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章