情景linux—不曾了解的cat用法
情景
cat是linux命令中最为基础的命令之一,它是“concatenate”(连接)的简写,作用概述是concatenate and print files,即:连接和查看文件内容。
常见用法有:
- 查看单个文件:
cat file1 - 顺序查看多个文件:
cat file1 file2 ...
一般cat会结合重定向符号(重写>、追加>>)使用,如常见的用法有:
- 将一个文件的内容追加到另一个文件中:
cat file1 >> file2 - 合并多个文件产生新文件:
cat file1 file2 > newfile - 用键盘输入创建一个新文件:
cat << EOF > file3
$ cat << EOF > file3
> a
> b
> c
> EOF
>是命令行的提示符,不是你需要输入的内容。当输入“EOF”按回车后命令自动结束。
$ cat file3
a
b
c
cat命令本身也支持参数,但用法简单,功能单一,感兴趣的话可以自行man cat。
cat还可以通过管道符“|”连接其它命令,但许多时候cat并不是必需的:
想知道文件的行数,可以使用cat file1 | wc -l,但wc -l file1一样可以做到。
想过滤文件中特定的字符串,可以使用cat file2 | grep "some string",但grep "some string" file2一样可以做到。
突破
在搜索引擎项目工作时,看到过研发工程师在调试问题时这样使用了cat——他们启动服务后,使用了命令cat some_data.txt > /dev/null,虽然当时没有直接向他们请教原委,但这个命令给我留下了深刻的印象:
/dev/null是linux的位桶文件,写入它的内容会永远丢失,从它那里什么也读取不到。一般用法是想丢弃命令产生的标准输出和标准错误时,通常使用command > /dev/null 2>&1,因此,cat some_data.txt > /dev/null似乎没有任何效果。- 当时观察到
cat some_data.txt > /dev/null这个命令的执行时间非常长,这说明了some_data.txt这个文件也足够大。但第二次执行这个命令时,执行时间则大大缩减了。
由以上大致可以判断出,该用法是为了将文件内容导入到内存中,以便需要使用文件内容时能够快速获取。一般来说,从硬盘中读取数据需要5ms到10ms的时间,而从内存中读取数据时通常只需要50ns到100ns的时间,这就是page cache(页高速缓冲存储器)的作用。
总结
这个经历给我的体会是,许多时候,我们认为自己掌握了全部或绝大部分,而实际上,只是因为自己知道的太少,并且不认为自己知道的太少——我们压根不觉得是因为自己不知道。就像美国前国防部长拉姆斯菲尔德说过的那样:
because as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns - the ones we don't know we don't know.
我们有已知的已知,已知的未知,以及未知的未知。
相关链接
https://fulmicoton.com/posts/pagecache/
https://hoytech.com/vmtouch/
https://www.zhihu.com/question/28511196/answer/45604224
情景linux—不曾了解的cat用法的更多相关文章
- linux下find查找命令用法
Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- 【转】linux expr命令参数及用法详解
在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...
- linux dmesg命令参数及用法详解(linux显示开机信息命令)
linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...
- linux sed命令参数及用法详解
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
- Linux中yum和apt-get用法及区别
Linux中yum和apt-get用法及区别 一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debi ...
- linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)
linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要 ...
- linux c语言 select函数用法
linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...
- Linux中find命令的用法汇总
Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm
随机推荐
- 【Shell脚本学习指南笔记】重定向文件描述符 2>&1
如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...
- 为什么.Net平台不支持程序集卸载(Assembly.Unload)?
我们知道在.net平台中反射提供了在运行时动态的获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象.我们知道 ...
- 通过重写 class 的 ToString() 来简化获取 enum 的 DescriptionAttribute 值
通过重写 class 的 ToString() 来简化获取 enum 的 DescriptionAttribute 值 目录 一.常见的 enum 类型 二.演变:class 版本的 enum 类型 ...
- 《NET 设计规范》第 2 章 框架设计基础
<NET 设计规范>第 2 章 框架设计基础 要设计功能强大又易于使用的框架. 要理解广大开发人员并有针对性地为他们设计框架. 要理解各种编程语言,并为他们设计框架. 2.1 渐进框架 2 ...
- 一个 div 手写红绿灯- 分别用css3 和 js 实现
[要求] 一个div,配合 css3 或者 js 实现红绿灯切换的效果. [思路] 使用 css3,要实现红绿灯颜色的变换必然要用到 animation 动画,通过 keyframes 控制颜色的渐变 ...
- 深入理解JAVA虚拟机之JVM性能篇---基础知识点(运行时数据区域)
一. 运行数据区域划分 各个数据区域功能如下: 1. 程序计数器: 较小的一块内存空间,可以看做是当前线程所执行的字节码的行号指示器,每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响,独立 ...
- 18_Python列表常用方法总结
''' 1.列表切片索引\截取 2.列表的增删改查 3.列表最大值\列表最小值\排序 4.列表的遍历 5.列表的嵌套 6.列表和字符串的互转 7.判断元素是否在列表中 ''' #列表使用中括号表示 元 ...
- java之拦截器Interceptor
1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...
- FreeMarker template error: The following has evaluated to null or missing: ==> blogger.md [in template "admin/about.ftl" at line 44, column 84]
FreeMarker template error:The following has evaluated to null or missing:==> blogger.md [in templ ...
- Spring MVC + Spring + Mybitis开发Java Web程序基础
Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...