zoukankan      html  css  js  c++  java
  • 3.1 cat:合并文件或查看文件内容

    cat 命令

      可以理解为英文单词concatenate的缩写,其功能是连接多个文件并且打印到屏幕输出,或者重定向到指定的文件中。此命令常用来显示单个文件内容,或者将几个文件内容连接起来一起显示,还可以从标准输入中读取内容并显示,生产环境中它常与重定向或追加符号配合使用。
        cat命令的记忆方法:cat的中文意思是猫,可理解为“瞄”一下文件内容,即显示文件内容。cat具备5大常用功能,特整理为如表3-1所示。
     
    1.查看文件内容             例如:cat file.txt,这是cat最基本的功能之一
    2.把多个文件合并成一个      例如:cat filel.txt file2.txt > newfile.txt        
    3.创建编辑新文件           例如:输入cat>filel.txt,后面接要编辑的内容,使用快捷键Ctrl+d或Ctrl+c可结束编辑,此功能应用不多,了解即可
    4.非交互式的编辑或追加内容到文件尾部
                             这是生产工作中最重要的一个应用了,所以必须要熟练掌握,这里先给一个命令格式:
                             cat>>file.txt<<EOF
                             I love linux
                             EOF
     
    5.清空文件内容           例如:使用cat /dev/null>file.txt命令就可以把文件内容清空,但是文件还是存在的,
                            这个功能生产工作中也会用到 

    cat命令的参数选项及说明

     
    -n    从1开始对所有输出的内容按行编号
    -b    和-n选项功能类似,但会忽略显示空白行行号
    -s    当遇到有连续两行以上的空白行时,就替换为一行空白行
    -A    等价于-vET三个选项的功能之和
    -e    等价于-vE
    -E    在每一行的行尾显示$符号
    -t    与-vT等价
    -T    将Tab字符显示为1
    -v    除了LFD和TAB之外,使用^和M-引用
     
    执行如下的完整命令生成cat.txt文件内容
     
    cat >cat.txt<<EOF
    welcome to learn linux
    love linux forever
    EOF    #<==这里要按回车才能结束,另外,EOF必须成对出现,但也可以用别的成对标签来替换。例如:lewen字符标签,默认情况下,结尾的EOE必须要顶格写。
     
    cat >cat.txt<<-EOF   #<==如果cat后面使用了-符号,则结尾的EOF可以不用顶格,但要用tab缩进。
     
     
    welcome to learn linux
     
    love linux forever,my blog's site is http://www.wenyule.top
     
     
        EOF
     
    执行过程
    [root@cs6-mini ~]# cat >cat.txt<<EOF  
    >
    >
    > welcome to learn linux
    >
    > love linux forever,my blog's site is http://www.wenyule.top
    >
    >
    >bye
    > EOF
    直接执行cat命令,不带任何选项。
    [root@cs6-mini ~]# cat cat.txt
     
     
    welcome to learn linux
     
    love linux forever,my blog's site is http://www.wenyule.top
     
     
    bye
    执行cat命令,分别带-n及-b选项,并对比区别
    [root@cs6-mini ~]# cat -n cat.txt
         1    
         2    
         3    welcome to learn linux
         4    
         5    love linux forever,my blog's site is http://www.wenyule.top
         6    
         7    
         8    bye
    [root@cs6-mini ~]# cat -b cat.txt
     
     
         1    welcome to learn linux
     
         2    love linux forever,my blog's site is http://www.wenyule.top
     
     
         3    bye
     
    -b选项和-n选项类似,但是,-b选项并不对空行编号。  

    执行cat命令,带-E选项

    [root@cs6-mini ~]# cat -E cat.txt
    $
    $
    welcome to learn linux$
    $
    love linux forever,my blog's site is http://www.wenyule.top$
    $
    $
    bye$
     
    #<=说明:从上面的例子可以看出,-E选项就是把文件结尾的隐藏结束标识符$符号显示出来。即使是空行,结尾也是有结束标识符的,这一点大家要注意 
      这个小例子更好地说明了即使是空行结尾也是有标识符S的。因此,在计算文件占用空间时,要注意这点。
      -A(-vET),-e(-vE)这两个选项都包含-E选项,因此,其和-E的功能类似,但-v、-T这两个选项在工作中使用得不多,了解一下就好了。
    [root@cs6-mini ~]# cat -A cat.txt
    $
    $
    welcome to learn linux$
    $
    love linux forever,my blog's site is http://www.wenyule.top$
    $
    $
    bye$
    [root@cs6-mini ~]# cat -e cat.txt
    $
    $
    welcome to learn linux$
    $
    love linux forever,my blog's site is http://www.wenyule.top$
    $
    $
    bye$ 

    执行cat 命令,带-s选项

    [root@cs6-mini ~]# cat -s cat.txt
     
    welcome to learn linux
     
    love linux forever,my blog's site is http://www.wenyule.top
            #由于-s选项的原因,变成一个空行了。
    bye
        从上面的例子可以看出,-s选项就是把两个以上的空行变成一个空行,如果文件中连续的空行有很多,那么这个选项可以让文件显示得更加精炼易读。
    但是在实际生产工作中,我们还是习惯于使用grep -v "^S" cat.txt 过滤掉所有的空行(一个空行都不留),从而使得显示更加紧凑一些.
    [root@cs6-mini ~]# grep -v "^$" cat.txt
    welcome to learn linux
    love linux forever,my blog's site is http://www.wenyule.top
    bye

    执行cat命令编辑新文件

    [root@cs6-mini ~]# cat > cat.txt
    hi,here is linux os
     
    [root@cs6-mini ~]# cat cat.txt
    hi,here is linux os
    这里是利用cat和“>”重定向将标准输出定向到文件的,这是一个特殊的编辑文件的方法。这里有几个问题需要注意,具体如下。
    结束编辑可以用快捷键Ctrl+d或Ctrl+c退出,但是必须要先执行回车,将光标定位到新的未输入的行才行。
    使用此种方式输入时,会发现如果输入错了,只按退格键(Backspace)将会无法删除,需要按住“Ctrl+退格键”才能删除。
    此操作为特殊编辑方法,作为扩展知识点提及,实际生产环境中使用得很少。

    执行cat命令连接并显示多个文件

    [root@cs6-mini ~]# cat test1.txt test2.txt
    test1 file
    test2 file
    这样两个文件会一起显示,但还是有先后顺序的,前面的test.txt的内容会优先显示。

    利用cat实现一键优化Linux系统脚本

        这是使用cat命令实现非交互式地在文件结尾增加内容的功能。下面的优化脚本是批量修改配置文件的方法,是生产环境中经常会用到的用法,要熟练掌握才好。
        下面以一键优化脚本中的一部分Linux服务器内核选项为例来说明cat的功能。
         所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核选项优化,优化并无特殊的标准,下面就以常见的生产环境Linux的内核优化为例进行讲解,仅供大家参考。
     
    #!/bin/bash
    /bin/cp /etc/sysctl.conf /etc/sysctl.conf.'date +%F_%T'         #<==备份 sysctl.conf
    cat>>/etc/sysctl.conf<<EOF    #<修改sysctl.conf
    #added by lewen at 2019 start
    net.ipv4.tcp_fin_timeout = 2
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000  65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    #end
    EOF
    sysctl -p &>/dev/null         #<==加载sysctl.conf
    [root@cs6-mini ~]# vim opt_sysctl.sh
    [root@cs6-mini ~]# sh opt_sysctl.sh
    [root@cs6-mini ~]# tail -16 opt_sysctl.sh
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_keepalive_time = 600
    net.ipv4.ip_local_port_range = 4000  65000
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_max_tw_buckets = 36000
    net.ipv4.route.gc_timeout = 100
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_synack_retries = 1
    net.core.somaxconn = 16384
    net.core.netdev_max_backlog = 16384
    net.ipv4.tcp_max_orphans = 16384
    #end
    EOF
    sysctl -p &>/dev/null         #<==加载sysctl.conf

    利用cat在脚本中显示帮助菜单

    [root@cs6-mini scripts]# cat exportfs_usage.sh
    #!/bin/bash
     
    exportfs_usage()
    {
        cat <<END
        USAGE:$0 {start|stop|monitor|status|validate-all}
    END
    }
    exportfs_usage
     
    [root@cs6-mini scripts]# sh exportfs_usage.sh
        USAGE:exportfs_usage.sh {start|stop|monitor|status|validate-all}
        这里的cat命令可以用echo命令来代替,对于单行的内容显示和追加内容,使用echo命令是非常合适的,cat的优势是针对多行文本内容进行编辑,或者在已有内容的结尾追加新内容。

    利用cat在脚本中显示内容选择菜单

    [root@cs6-mini scripts]# cat menu.sh
     
    #!/bin/bash
     
    menu(){
        cat <<END
        1.[apple]
        2.[pear]
        3.[banana]
        4.[cherry]
        5.[orange]
        please select one that you like:
    END
    }
    menu
    [root@cs6-mini scripts]# sh menu.sh
        1.[apple]
        2.[pear]
        3.[banana]
        4.[cherry]
        5.[orange]
        please select one that you like:
        为了实现自动化运维,有时高级运维人员不得不通过脚本把操作写好,然后让组内的初级运维或非运维的同事,通过傻瓜式的菜单选择,来完成相应的工作,进而提升工作效率。
    上面的脚本,从美感的角度来看,还是有些缺陷的。比如:
     
    改进后的脚本
    [root@cs6-mini scripts]# cat menu.sh
     
    #!/bin/bash
     
    menu(){
        cat <<-END
        1.[apple]
        2.[pear]
        3.[banana]
        4.[cherry]
        5.[orange]
        please select one that you like:
        END
    }
    menu
    [root@cs6-mini scripts]# sh menu.sh
    1.[apple]
    2.[pear]
    3.[banana]
    4.[cherry]
    5.[orange]
    please select one that you like:

    利用cat连接多文件合并Web集群日志

        在工作中,前端通常会有多个集群服务器节点,这时服务器记录日志都是在本地记录的,因此,完整的日志是所有服务器的日志总和。在Web节点把日志推到日志平台后,首先要做的就是对所有节点当天或者当小时的日志进行合并,这时就可以用cat的多文件功能,当然这不是必须的,还有别的方法,这里暂略,仅讲解cat的生产应用。
        合并Web集群节点日志的命令如下:
    cat web01_access20130522.log log_web02access_20130522.log > web_access20130522.log
    cat web_access20130522.log
      上面用cat合并后的总日志文件的日志行并没有按照用户访问的时间进行排序,若要按访问时间进行排序,就要用到sort命令(请看后文详解)了,它可以让日志按第4列访问时间列进行排序,整个处理方法如下:
     sort -k 4 web_access2010128.log #<==-k指定排序列,这里表示按第4列排序。 

    利用cat 命令实现一键MySQL主从同步

        在进行MySQL主从同步时,最关键的步骤就是CHANGE MASTER..命令的使用了,如果希望非交互式地执行CHANGE MASTER..命令的完整选项配置,那么下面的命令就是最合适的了。
    以下是特殊生产场景下的应用,MySQL将自动批量制作主从同步所需要的语句。
    cat |mysql -uroot -p'oldboy'<<EOF
        CHANGE MASTER TO
        MASTER_HOST='10.0.0.16'
        MASTER_PORT=3306,
        MASTER_USER='lewenrep',
        MASTER_PASSWORD='lewenrep',
        MASTER_LOG_file='mysql-bin.000025',
        MASTER_LOG_POS=4269;
    EOF
     
  • 相关阅读:
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
    MSCRM Plugin Debug
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)
    [转].net 使用NPOI或MyXls把DataTable导出到Excel
    HTML5的十大新特性
    语义化的HTML及其目的
    XHTML和HTML有什么区别
    浏览器根对象document之方法概述
    浏览器根对象document之数值和布尔属性
  • 原文地址:https://www.cnblogs.com/fadewalk/p/10888146.html
Copyright © 2011-2022 走看看