class 11 壓縮軟件(二)、shell編程(三)和軟件包管理(一)

一、壓縮軟件(二)

tar

tar [OPTION]...
(1) 創建歸檔
    tar -c -f / PATH/TO/SOMEFILE .tar FILE...
    tar cf / PATH/TO/SOMEFILE .tar FILE...
(2) 查看歸檔文件中的文件列表
    tar -t -f  /PATH/TO/SOMEFILE .tar(3) 展開歸檔
    tar -x -f  /PATH/TO/SOMEFILE .tar
    tar -x -f  /PATH/TO/SOMEFILE .tar -C  /PATH/
結合壓縮工具實現:歸檔并壓縮
 -j: bzip2, -z: gzip, -J: xz

cpio

復制  從或到文件
cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“.cpio” 或者“.tar” 結尾的文件。
cpio [ 選項] >  文件名或者設備名
cpio [ 選項] <  文件名或者設備名
選項
    -o  將文件拷貝打包成文件或者將文件輸出到設備上    -i 解包,將打包文件解壓或將設備上的備份還原到系統    -t 預覽,查看文件內容或者輸出到設備上的文件內容    -v  顯示打包過程中的文件名稱。    -d  解包生成目錄,在cpio 還原時,自動的建立目錄    -c  一種較新的存儲方式

示例

將etc 目錄備份:   find ./etc -print |cpio -ov >etc.cpio
內容預覽
    cpio –tv < etc.cpio
要解包文件
    cpio –iv <etc.cpio
    cpio –idv < etc.cpio

二、shell編程(三)(循環)

循環

循環執行
    將某代碼段重復運行多次
    重復運行多少次:
        循環次數事先已知
        循環次數事先未知
    有進入條件和退出條件    
 for, while, until

for 循環

for  變量名 in  列表;do
    循環體
done
執行機制 :
   依次將列表中的元素賦值給“變量名”;每次賦值后即執行一次循環體;直到列表中的元素耗盡,循環結束


列表生成方式:
    (1)直接給出列表        1 2 3 4 5 6 7 8 9 10
    (2)整數列表:
        (a){start..end}
            echo {1..10}            1 2 3 4 5 6 7 8 9 10
        (b)$(seq [start [step]] end)
          [root@6 bin]# seq 0 10 100
            0
            10
            20
            30
            40
            50
            60
            70
            80
            90
            100
    (3)返回列表的命令
        $(COMMAND)
    (4)使用glob, , 如:*.sh
    (5)變量引用;
          $@, $*

while 循環

while CONDITION; do
        循環體doneCONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false” 終止循環
因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
進入條件:CONDITION 為true; 
退出條件:CONDITION 為false

until 循環

until CONDITION; do
  循環體done進入條件: CONDITION  為false退出條件: CONDITION  為true

循環控制語句continue

用于循環體中continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層while CONDTIITON1; do
    CMD1
    ...    if CONDITION2; then
    continue
    fi
    CMDn
    ...done

循環控制語句break

用于循環體中break [N] :提前結束第N層循環,最內層為第1層while CONDTIITON1; do
    CMD1
    ...    if CONDITION2; then
         break
    fi
    CMDn
    ...done

創建無限循環

while true; do
   循環體doneuntil false; do
   循環體
Done

三、軟件包管理

軟件運行環境

API :Application Programming InterfacePOSIX :Portable OS程序源代碼 --> 預處理 -->  編譯 --> 匯編 -->  鏈接
    靜態編譯:
    共享編譯:.soABI :Application Binary InterfaceWindows 與Linux 不兼容    ELF(Executable and Linkable Format)
    PE(Portable Executable)
 庫級別的虛擬化:    Linux: WINE
    Windows: Cywin

開發語言

系統級開發
    C
    C++
應用級開發
    java
    delphi
    Python    go
    php    perl
    ruby

包管理器

二進制應用程序的組成部分:
    二進制文件、庫文件、配置文件、幫助文件
程序包管理器:
    debian :deb 文件, dpkg 包管理器
    redhat: rpm 文件, rpm 包管理器
    rpm: Redhat Package Manager
    RPM Package Manager

包命名

源代碼:name-VERSION.tar.gz|bz2|xz    VERSION: major.minor.release
rpm 包命名方式:
    name-VERSION-release.arch.rpm
    例: :bash-4.2.46-19.el7.x86_64.rpm    VERSION: major.minor.release
    release :release.OS
    常見的arch: :
    x86: i386, i486, i586, i686
    x86_64: x64, x86_64, amd64
    powerpc: ppc
    跟平臺無關:noarch

包命名和工具

包:分類 和 拆包
    Application-VERSION-ARCH.rpm:  主包
    Application-devel-VERSION-ARCH.rpm  開發子包
    Application-utils-VERSION-ARHC.rpm  其它子包
    Application-libs-VERSION-ARHC.rpm  其它子包
包之間:可能存在依賴關系,甚至循環依賴
    
解決依賴包管理工具:
    yum :rpm 包管理器的前端工具
    apt-get :deb 包管理器前端工具
    zypper: suse 上的rpm 前端管理工具
    dnf: Fedora 18+ rpm 包管理器前端管理工具

庫文件

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

包管理器

程序包管理器:
    功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作1、包文件組成 ( 每個包獨有)
    RPM 包內的文件
    RPM 的元數據,如名稱,版本,依賴性,描述等
    安裝 或卸載時運行的腳本2 、數據庫( 公共)
    程序包名稱及版本
    依賴關系
    功能說明
    包安裝后生成的各文件路徑及校驗碼信息

程序包的來源

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum, dnf
獲取程序包的途徑:
  (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)  自己制作
    注意:檢查其合法性: 來源合法性, 程序包的完整性

rpm包管理

CentOS 系統上使用rpm 命令管理程序包:
 安裝、卸載、升級、查詢、校驗、數據庫維護
 安裝:
 rpm {-i|--install} [install-options] PACKAGE_FILE…
    -v: verbose    -vv:    -h:  以# 顯示程序包管理執行進度    rpm -ivh PACKAGE_FILE ...

rpm 包安裝

[install-options]
    --test:  測試安裝,但不真正執行安裝;dry run 模式    --nodeps :忽略依賴關系    --replacepkgs (重新安裝相同的程序)| replacefiles(有重合的部分安裝文件,強制安裝) 
    --nosignature:  不檢查來源合法性    --nodigest :不檢查包完整性    --noscr ipts :不執行程序包腳本片斷        %pre: ; 安裝前腳本; --nopre        %post: ; 安裝后腳本; --nopost        %preun: ; 卸載前腳本;--nopreun        %postun:  卸載后腳本; --nopostun

rpm 包升級

升級:rpm {-U|--upgrade} [install-options]  PACKAGE_FILE ...rpm {-F|--freshen} [install-options]  PACKAGE_FILE ...    upgrade :安裝有舊版程序包,則“升級”
              如果不存在舊版程序包,則“安裝”    freshen :安裝有舊版程序包,則“升級”
              如果不存在舊版程序包,則不執行升級操作    rpm -Uvh PACKAGE_FILE ...    rpm -Fvh PACKAGE_FILE ...
    --oldpackage :降級
    --force:  強行升級

升級注意項

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

積累應用

1、for、until、while實現倒三角形

#! /bin/bash
#author:lvasu
#description:
#version:0.1
#date:
read -p "請輸入三角形行數:" line
# 每行左側空格數=n-i
# 每行的*的數量=2*i-1
for ((i=1;i<=line;i++)) do
    for  ((j=1;j<=(line-i);j++))   do
            echo  -n " "
     done
     for  ((k=(2*i-1);k>=1;k--))   do
            echo  -n "*"
     done
     echo
done
echo '========================'
# 每行左側空格數=n-i
# 每行*的數量=2*i-1
 i=1;
while  [ $i -le $line ];do
      space=$[$line-$i];             #每行左側的空格數
      xing=$[$i*2-1];                 #每行*的數量
        j=1;
   while [ $j -le $space ];do
            echo -n " "
           let j++
   done
    k=$[space+xing]
    while [ $k -gt $space ];do
            echo -n "*"
            let k--
   done
    echo
  let i++
done
echo '========================'
# 每行左側空格數=n-i
# 每行的最后一個*位置=space+xing=n-i+2*i-1=n+i-1
i=1;
until  [ $i -gt $line ];do
      j=1;
      space=$[$line-$i];             #每行左側的空格數
      xing=$[$i*2-1];                 #每行*的數量
   until [ $j -gt $space ];do
            echo -n " "
           let j++
   done
    k=$[space+xing]
    until [ $k -le $space ];do
            echo -n "*"
            let k--
   done
    echo
   let i++
done

2016-8-20 2.JPG

2、for、until、while實現國際象棋棋盤

qipan3.sh
#! /bin/bash
#author lvasu
#description:
#version:0.1
#date:
i=1;
while  [ $i -le 8 ];do
    j=1;
  while  [ $j -le 8 ];do
         num=$[($i+$j)%2]
   if [ $num -eq 1 ];then
         if [ $j -ne 8 ];then
             echo  -ne '\E[41m  \E[0m'
         else echo  -e '\E[41m  \E[0m'
         fi
   else
          if [ $j -ne 8 ];then
             echo  -ne '\E[42m  \E[0m'
         else echo  -e '\E[42m  \E[0m'
         fi
   fi
    let j++
    done
    let i++
done
#! /bin/bash
#author lvasu
#description:
#version:0.1
#date:
i=1;
while  [ $i -le 8 ];do
    j=1;
  while  [ $j -le 8 ];do
         num=$[($i+$j)%2]
   if [ $num -eq 1 ];then
             echo  -ne '\E[41m  \E[0m'
   else
             echo  -ne '\E[42m  \E[0m'
   fi
    let j++
    done
    echo
    let i++
done

2016-8-20 1.JPG

原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/38124

(0)
lvasulvasu
上一篇 2016-08-21 20:46
下一篇 2016-08-21 20:46

相關推薦

  • N21天天第十五周課程練習

    1、總結sed和awk的詳細用法; sed Sed本質上是一個編輯器,但是它是非交互式的;同時它又是面向字符流的,輸入的字符流經過sed的處理后輸出。 Sed本身是一個管道命令,可以分析standard input的,主要是用來分析關鍵字的使用、統計等,此外還可以將數據進行替換、刪除、   選取特定行等功能 格式:sed&nbs…

    Linux干貨 2016-12-05
  • 初學Linux文件目錄結構

    /:根目錄 /bin(binary):放置的是二進制文件??蓤绦械拿睿环枪芾眍惖拿?,通常是系統啟動就需要的文件,供所有用戶使用的基本命令;不能關聯至獨立分區, OS啟動即會用到的程序。 /sbin:管理類的命令,通常只有管理員可以使用。 /lib:存放的是系統級別的庫文件 /lib64:專用于x86_64系統上的輔助共享庫文件存放位置  /ro…

    Linux干貨 2017-07-13
  • 第五周學習總結–任務計劃

    寫在前面 隨著學習的不斷深入,漸漸的已經意識到不再是開始一天只知道幾個簡單的命令而已了,但是呢,命令還必須要繼續學習的,修房子哪有不用磚的,所以,要想有一棟堅實穩固的房子,還必須靜下心來繼續認識命令。 命令注解 今天要講的幾個命令是跟工作息息相關的,他們都是在以后的生活中使用率比較高的命令之一,比如馬上要講的這個,如果你的老板讓你在每天凌晨三點執行一次數據備…

    2017-12-29
  • Linux文本處理三劍客之grep

    一、grep命令 grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來 作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。 模式:由正則表達式字符及文本字符所編寫的過濾條件 二、grep命令格式 grep [OPT…

    Linux干貨 2016-08-15
  • 初窺門徑shell腳本

    1.什么是shell腳本    首先它是一個腳本,并不能作為正式的編程語言。因為是跑在linux的shell中,所以叫shell腳本。確切的說shell腳本就是一些命令的集合。 2.寫腳本前的一些細節及建議   Shell腳本通常都是以.sh 為后綴名的,這個并不是說不帶.sh這個腳本就不能執行,只是大家的一個習慣而已…

    Linux干貨 2016-08-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 10:32

    文章整體架構清晰,層次分明,通過實例演示讓內容更為充實飽滿,再接再厲。

欧美性久久久久