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. 『Spring Boot 2.4新特性』减少95%内存占用

    节省 95%的内存占用,减少 80%的启动耗时. GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus 默认支持 G ...

  2. HUAWEI AppGallery Connect翻译服务升级,方便应用出海本地化

    HUAWEI AppGallery Connect翻译服务全新升级,携手新宇智慧.语言桥等多家服务商为全球开发者提供优质的翻译服务,解决应用在全球分发时面临的多语言本地化问题,通过平台化与全环节的翻译 ...

  3. Day10_53_Collections.synchronizedList() 将Arraylist集合转换为线程安全的集合

    将Arraylist集合转换为线程安全的集合 import java.util.ArrayList; import java.util.Collections; import java.util.Li ...

  4. hdu 5063 不错的小想法题(逆向处理操作)

    题意:       刚开始的时候给你一个序列,长度为n,分别为a[1]=1,a[2]=2,a[3]=3,a[4]=4...a[n]=n,然后有4种操作如下: Type1: O 1 call fun1( ...

  5. (2) arm 指令条件码

    条件码助记符 标志 含义 EQ Z=1 相等 NE Z=0 不相等 CS/HS C=1 无符号数大于或等于 CC/LO C=0 无符号数小于 MI N=1 负数 PL N=0 正数或0 VS V=1 ...

  6. MySQL模糊查询,查询语句是对的。但是就是没有查询结果

    问题 解决 当我用其他非中文的值去查询,发现可以查询到结果 所以问题就出现在数据库的配置中 spring.datasource.url=jdbc:mysql://localhost:3306/data ...

  7. Linux下为Calibre书库打中文目录名与文件名补丁

    本文由来 临近下班突然看到知乎上有篇文章是给Calibre打中文目录与文件名补丁的,想起我之前为啥放弃Calibre的--存进书库里书的名称都变成了拼音!手动找起来或者搜索工具找起来太麻烦了(有时想不 ...

  8. Python JWT 介绍

    Python JWT 介绍 目录 Python JWT 介绍 1. JWT 介绍 2. JWT 创建 token 2.1 JWT 生成原理 2.2 JWT 校验 token 原理 3. 代码实现 4. ...

  9. 微言Netty:百万并发基石上的epoll之剑

    说道本章标题,相信很多人知道我在暗喻石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王.说 ...

  10. Git 系列教程(9)- 打标签

    打标签 一般会给提交历史打个标签,方便后续进行筛选.查看 列出标签 可带上可选的 -l 选项 --list $ git tag v1.0 v2.0 这个命令以字母顺序列出标签 可以按照特定的模式查找标 ...