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.178linux.com/38124

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

相关推荐

  • liunx的哲学思想

     Linux哲学思想 *一切皆文件(硬件、目录、普通文件、二进制文件等。) *小型,单一用途的程序 *链接程序,共同完成复杂的任务 *避免令人困惑的用户界面 *配置数据存储在文本中 解释:一切皆文件:是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型…

    Linux干货 2017-07-15
  • chmod 没有执行权限的解决办法 [转载http://www.fblinux.com/?p=30]

    chmod没有权限,貌似就算是root用户也无法授权,这可咋办?chmod是设置权限的命令,但是自身没有了执行权限,那么就表示没有办法更改其他命令的权限,也没有办法改变自己的权限。 1 2 3 4 [root@localhost ~]# ll /bin/chmod ———-. 1 root root 48712 Oct 15 2014 …

    Linux干货 2017-01-01
  • Linux之函数

      Linux之函数     函数介绍函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分。函数和shell程序比较相似,区别在于:Shell程序在子Shell中运行而Shell函数在…

    Linux干货 2016-08-25
  • 文本处理工具之grep正则表达式

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,…

    Linux干货 2016-08-08
  • 马哥教育网络班22期第四周课程练习1

    1.cp -r /etc/skel/ /home/tuser1 && chmod -R 600  /home/tuser1 2.max=`cat /etc/group |awk -F":" '{print $3}'|sort -nr| head -n1`|sed -i '$a had…

    Linux干货 2016-09-05
  • 马哥教育网络班21期-第三周课程练习

    第三周课程练习 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -f1 -d' ' | uniq  root 2、取出最后登录到当前系统的用…

    Linux干货 2016-07-12

评论列表(1条)

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

    文章整体架构清晰,层次分明,通过实例演示让内容更为充实饱满,再接再厉。