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

相关推荐

  • 新的征程即将开始……

    新的征程,新的开始,开博祭旗篇!!!

    Linux干货 2016-12-26
  • 第七周-磁盘管理、RAID及Shell脚本练习

    一、创建一个10G分区,并格式为ext4文件系统; (1)、 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2)、挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@N1 ~]# mkfs.ext4 -b 2048 -m 2 -L MYDATA /…

    Linux干货 2017-08-13
  • 马哥教育网络班22期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。   cp -r /etc/skel /home/tuser1    chmod -R go=— /home/tuser1 2、编辑/etc/group文件,添加组hadoo…

    Linux干货 2016-09-19
  • 实验:httpd

    虚拟主机 httpd-2.4示例步骤: 1. 进行规划虚拟主机 192.168.209.8:80,192.168.209.10:80 www.10linux.com,www.iounix.com /var/www/html/10linux,/var/www/html/iounix 2. ]# mkdir /var/www/html/{10linux,ioun…

    Linux干货 2017-06-04
  • btrfs文件系统介绍

    btrfs文件系统介绍 简介        Btrfs(B-tree,ButterFS ,Better FS通常念成Butter FS),由Oracle于2007年宣布并进行中的COW(copy-on-write式)文件系统。继ext3/4文件系统之后linux又有了比较强大的文件系统(btrfs文件系统),btrfs…

    系统运维 2016-04-27
  • 我的第一篇博客

        大家好,欢迎阅读我的博客!     今天是我生平第一次写博客,恩  为什么现在才开始写呢?     其实是作业要求 哈哈!虽然是写作业,本萌新也是很拼的!     希望在以后学习li…

    2017-07-10

评论列表(1条)

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

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