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
 

3.1 cat:合并文件或查看文件内容的更多相关文章

  1. cat 合并文件或查看文件内容

    1.命令功能 cat 合并文件或者查看文件内容. 2.语法格式 cat   option    file 参数说明 参数 参数说明 -n 打印文本,并显示每行行号并且空白行也同样包括 -b 与-n用法 ...

  2. shell 命令 文件查看ls,复制cp,移动mv,查看文件内容cat more less,查看文件信息 file

    1. 查看文件 ls        ls -l  查看文件详细信息 ls -a 查看所有文件(包含隐藏文件) ls -lh  带单位显示文件大小 ls -i  查看文件的节点号(相当身份证唯一)  2 ...

  3. Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)

    ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootl ...

  4. Linux命令: 向文件写内容,编辑文件,保存文件,查看文件,不保存文件

    1.找到要编辑的文件 2.敲  vi t1.txt ,显示文件内容(vim命令) 3.敲 i,最下面变成INSERT 4.编辑自己想要的内容 5a.敲ESC:wq回车 5b.如果不想保存文件在时敲ES ...

  5. Linux学习---新建文件,查看文件,修改权限,删除

    过程:在一个文件夹下面新建一个文件,然后查看文件,再修改权限,运行,最后删除 1.新建文件: touch  Test.sh 补充:新建文件有好多种方式,一般用mkdir(创建目录,即文件夹).touc ...

  6. linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  7. linux lsof 查看进程打开那些文件 或者 查看文件给那个进程使用

    lsof命令是什么? 可以列出被进程所打开的文件的信息.被打开的文件可以是 1.普通的文件,2.目录  3.网络文件系统的文件,4.字符设备文件  5.(函数)共享库  6.管道,命名管道 7.符号链 ...

  8. c# 根据文件流查看文件真实格式

    今天在做图片注册的功能的时候,测试提出一个问题:将随便一个非图片文件将后缀名改为jpg或其他,上传时应检验图片合法性.然后同事给提供了根据文件流前两个字节判断文件真实格式的思路,代码如下: publi ...

  9. 通过javascript在网页端解压zip文件并查看压缩包内容

    WEB前端解压ZIP压缩包 web前端解压zip文件有什么用: 只考虑标准浏览器的话, 服务器只要传输压缩包到客户端, 节约了带宽, 而且节约了传输时间, 听起来好像很厉害的说:     如果前端的代 ...

随机推荐

  1. 测试报告模板:HTMLTestRunner.py(新版)

    报告样式效果: 报告源码:HTMLTestRunner.py 1 """ 2 A TestRunner for use with the Python unit test ...

  2. commons-pool2 池化技术探究

    一.前言 我们经常会接触各种池化的技术或者概念,包括对象池.连接池.线程池等,池化技术最大的好处就是实现对象的重复利用,尤其是创建和使用大对象或者宝贵资源(HTTP连接对象,MySQL连接对象)等方面 ...

  3. k8s configmap 挂载配置文件

    转自https://blog.csdn.net/weixin_34102807/article/details/85965725 1.新建ConfigMap apiVersion: v1 kind: ...

  4. 08. linux下 mv find grep命令

    mv命令: find命令: grep命令: 作用:查找文件中相应的内容,及文本信息. 格式:grep "内容" [选项]  文件名或路径 常用选项:

  5. php7 连接 mysql 的两种方式

    PHP 5 的使用者可以使用 MySQL extension,mysqli 和 PDO_MYSQL .php 7移除了mysql extension,只剩下后面两种选择.这份文档解释了每个API 的术 ...

  6. LA4636积木艺术

    题意:       有一些1*1*1的单位正方体积木,现在要摆积木,每一块积木有两种方法,要么放在地面上,要么放在别的积木的正上方,现在给你摆好积木的正面图和侧面图,问你最少用了多少块积木. 思路: ...

  7. hdu4930 模拟斗地主

    题意:        模拟斗地主,出牌有一下规则,1张,1对,3张,3带1,3带2,炸弹(包括两个猫),4带2,这写规则,没有其他的,然后给你两幅牌,只要第一个人出了一次牌对方管不上,那么或者第一个人 ...

  8. Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

    目录 正则表达式 基本正则表达式 扩展正则表达式 grep tr diff du wc find 正则表达式 正则表达式,又称正规表示法.常规表示法( Regular Expression,在代码中常 ...

  9. C#-播放器相关

    axWindowsMediaPlayer1.URL= 设置路径 axWindowsMediaPlayer1.Ctlcontrols.play();开始 axWindowsMediaPlayer1.Ct ...

  10. (ML邹博)回归

    目录 线性回归 高斯分布 最大似然估计 最小二乘法的本质 Logistic回归 工具 梯度下降算法 最大似然估计 线性回归 对于单个变量: y=ax+b 对于多个变量: 使用极大似然估计解释最小二乘法 ...