0527 第九节课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0527 第九节课相关的知识,希望对你有一定的参考价值。

一.文件的打包和压缩

 

  1.compress/uncompress

       

       compress [options] file     *.Z


       -d:解压缩,等同于uncompress

       -c:输出到屏幕

       -r:压缩目录

     

     zcat file.Z > file


   2.gzip/gunzip


       gzip [options]  file  *.gz


       -c:输出到屏幕

       -d:解压缩

       -k:保留源文件

       -#:确定压缩比,1-9,1是最差9是最好,默认是6

      

      gzcat:不解压预览压缩文件内容

        

        gzip可以解压Z压缩文件


    3.bzip2


       bzip2 [options] file     *.bz2


       -c:输出到屏幕

       -d:解压缩

       -k:保留源文件

       -#:压缩比,同gz


      bzcat:同gzcat


    4.xzip


       xzip [options]  file       *.xz


       -c

       -d

       -k

       -#:同上


       xzcat:同上


       应为是最新的压缩解压缩程序,所有压缩后的大小是最小的

    

    5.zip

      

      zip[options]   file压缩后name   file

      

      -r:压缩目录

      支持重定向,支持管道


      cat /PATH/TO/FILE | zip name - | cat /PATH/TO/FILE


      -的意思是指代前边的内容

      

      unzip file 解压缩


  以上集中压缩程序,最多的是gz,用的最多的是bzip2,最新的是xzip,compress基本上已经不适用,即便有,也可以用其他几个解压缩



二.打包压缩文件

    

    1.tar:打包压缩程序,重点程序


       tar [options] file/dir


       有种多选项和众多共用,但基本上适用来打包压缩解压缩的,因为以上的压缩程序默认都不支持目录

       所以需要用tar程序将众多文件打包成一个大文件在进行压缩


       主要记住以下用法


       tar -cvf files/dir :文件打包


       tar -gcvf :打包压缩成gz格式


       tar -jcvf :打包压缩成bz2格式


       tar -Jcvf :打包压缩成xz格式


       tar -tvf  :预览压缩文件内容


       tar -xvf :解压缩    后面加-C指定解压地点


       tar -zpvf :备份


       有的时候一个压缩文件,我们只需要其中的一部分,tar也可以完成


       首先,查看文件内容,搜索自己需要的文件,支持管道


        tar -tvf file  | grep ”xxx”


       找出文件名后


        tar -xvf file  目标file



    2.cpio程序:同样是打包压缩程序,cpio支持重定向,并且同样支持只解压部分文件


       cpio xxxx > 设备或文件

       

       cpio xxxx < 设备或文件



       基本上用法如下


       cpio -iov file > 设备或文件 备份文件


            -iv/idv               解压文件

            

            -tv                   预览文件



        主要就是支持重定向

        







二.状态回执


    echo $?   每执行一个命令都会有一个状态回执,来表示上一个命令是否执行成功

              回执的数值有2中情况


                0      :上一条命令执行成功


                1-255  :上条命令执行不成功


                很多时候,我们并不关心命令本身的执行结果,只是想知道命令是不是成功的

                执行了,这个时候就可以使用重定向将结果输出到/dev/null然后查看变量$?

                的回执的数值来看是不是成功执行,并以此来做出判断,脚本中常用


    自定义回执数值

    

    exit #    在脚本中的时候,经常用到这些来决定下一步的走向,而且这个数值也是可以自定义的,

              在exit后边加上一个数字,那么那个数字将会成为成功回执的数值



三.条件判断(单项)


 ture:0

 false:1



    判断格式


      test 表达式

      [ 表达式 ] 两头空格

      [[ 表达式 ]] 两头空格          


    1.数值判断 判断两边的数值的大小关系


       -eq:两边的数值相等

       -ne:两边的数值不等

       -lt:左边小于右边

       -le:左边小于等于右边

       -gt:左边大与右边

       -ge:左边大与等于右边


    2.字符串判断 判断字符串的关系


       [ n “变量” ] :判断变量是不是空的,是空的为真

       [ z “变量” ] :判断变量是不是非空的,是非空的为真


       ==:判断两边的字符串是不是想等

       !=:判断两边的字符串是不是不相等


       <:判断左边的字符串的ascii码的是不是小于右边,小于为真

       >:判断左边的字符串的ascii码的是不是大于右边,大于为真


       ~=:判断左边的字符串是不是能被右边的pattern匹配到



    3.文件类型,存在判断


       -a/-e:判断文件是不是存在,存在为真

       -[fdbclpS] :判断文件是不是什么类型,是为真


    4.权限判断


       -r:判断文件是不是有读权限,有为真

       -w:                写

       -x:                执行


    5.特殊权限判断


       -u:判断文件是不是有suid的特殊权限,有为真

       -g:判断文件或目录是不是有sgid的特殊权限

       -k:判断目录是不是有sickty的特殊权限



    6.属主属组判断


       -N:判断文件在上一次读取过后有没有做过修改,有为真

       -O:判断当前用户是不是文件的属主,是为真

       -G:判断当前用户的用户组是不是文件的属组


    7.文件时间判断

       -ef:判断左右两个文件是否是同一个文件,即相同分区的相同节点的文件

       -ot:判断左边文件的时间是不是右边文件早,修改时间mtime

       -nt:判断左边文件的时间是不是比右边的晚,修改时间mtime



四.条件判断(复数向)

    

    1.&&与 ||或 !非


      格式    command1 && command2

              command1 || command2

              !command



      关于&& || !加上异或^的关系前边提到过

      

          &&:

          

             1&&1  真

             1&&0  假

             0&&1  假

             0&&0  假      可以看出,当前边的命令是假的时候,后边的命令并不需要运行,因为结果一定是假的,所以后边的命令

                           的运行条件是,保证前边的命令是真的

          ||:

             1||1  真

             1||0  真

             0||1  真

             0||0  假      可以看出,当前边的命令是假的时候,想要得知最后的结果是不是真的,需要需要运行后边的命令,但前

                           边的命令如果是真的,则不需要运行后边的命令,所以后边命令想要运行,必须的保证前边的而命令是假


          以上两个关系经常用在命令或者脚本真来判断执行那个后续命令,例如下边的脚本


          #!/bin/bash

          #author

          #version

          #description

          [ -e /etc/nologin ] && rm -f /etc/nologin || touch /etc/nologin


          上述脚本的内容意思是

          [ -e /etc/nologin ]查看/etc/nologin这个文件是不是存在

          && rm -f /etc/nologin 如果,存在,即前边的[ -e /etc/nologin ] 为真,那么必须运行&&后边的命令删去nologin

                                如果,不存在,就是前边的[ -e /etc/nologin ]为假,那么后边的rm命令就不会运行


          || touch /etc/nologin 如果nologin存在,那就是说[ -e /etc/nologin ]为真,就会运行rm,那么||前边的命令为真,

                                touch命令不管真假,最后都会是真,所以touch命令没必要也不会运行

                                如果nologin不存在,[ -e /etc/nologin ]为假,那么rm就不会运行,那么,||前边的所有都为假

                                那么久需要运行touch命令来创建一个nologin


          !:就是非的意思



          异或:异或的符号是^,意思是^两边的内容命令都是真的的时候,那么最终的结果会是假的,当两边的内容有一个为假,那么最后

                的结果就是真的,就说要要求两边不相同就行

              



      例如    [ -w file2 ] && [ -r file2 ]  file2具有读且写权限,都有为真,有一个没有为假           

              [ -w file2 ] || [ -r file2 ]  file2具有读或写权限,都没有为假,其余为真

              [ !-r file2 ]                file2不具有读权限,有为假,没有为真



    2. -a -o !


       这几个字符在find命令中提到过,用法也基本等同,-a是且的意思,-o是或的意思,!是非的意思(!表达非的意思的地方到现在为止学了很多,但是

       只有在sed命令中,!才写在地址的后边来表示非的意思,其余的都写在了前边)


       格式 [ 表达式 -a 表达式 ]

                 

            [ 表达式 -o 表达式 ]

             

            ! [ 表达式 -a/-o 表达式 ]   注意几乎所有的地方都有一个空格                    

          


        意思大致上没有什么变化,只是将两个[]部分写成了一个,!也放在了[]外边,值得注意的是!对于[]内的-a和-o的影响

        要考虑摩根定律







五.尚未讲完rpm

    

    rpm简单理解成安装程序的安装包的程序就行,类似window上少了下载功能的一种软件管家


    基本上记住以下用法就成


    rpm -ivh


      i:是互动模式

      v:是verbose,显示具体过程

      h:是用#号来制作显示一个进度条

         这样的###########################################>100%


    剩下的和yum写在一起





六.read命令

   

   read命令是用来批量给变量赋值的


   当输入read xx1 xx2 xx3后会进入交互模式

       ----------屏幕上显示这玩意让你输入内容,输入的内容会对应的成XX的变量内容,回车结束,多个变量空格隔开



   但是有一个问题就是,read在批量给变量赋值时多个变量内容使用空格隔开的,因此很容易读取错误,例如


   read xx1 xx2 xx3 xx4

   a b c d f 

   echo $xx1

   a

   echo $xx2

   b

   echo $xx3

   c

   echo $xx4

   d f

   会默认的将剩下的内容赋值到最后一个变量中,所以,必须要对应一个变量一个内容,不能多


     -p “内容” :显示制定要出现的提示

     -t:给一个截止时间,多长时间不输入就取消赋值,默认是秒为单位。。似乎也不能改单位。。

     


本文出自 “博客作业初版” 博客,谢绝转载!

以上是关于0527 第九节课的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习第九节课-shell脚本编程

第九节课:这些难缠的符号

Linux学习第九节课(2019.9.22)

学习笔记第九节课

2021算法竞赛入门班第九节课线段树练习题

信管师培训之第九节课作业(变更管理+信息系统安全管理)