情景linux—未曾了解的cat用法

情景

cat是linux命令中最为基础的命令之一,它是“concatenate”(链接)的简写,做用概述是concatenate and print files,即:链接和查看文件内容。linux

常见用法有:post

  • 查看单个文件: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,虽然当时没有直接向他们请教原委,但这个命令给我留下了深入的印象:code

  1. /dev/null是linux的位桶文件,写入它的内容会永远丢失,从它那里什么也读取不到。通常用法是想丢弃命令产生的标准输出和标准错误时,一般使用command > /dev/null 2>&1,所以,cat some_data.txt > /dev/null彷佛没有任何效果。
  2. 当时观察到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.字符串

咱们有已知的已知,已知的未知,以及未知的未知。get

相关连接

https://fulmicoton.com/posts/pagecache/
https://hoytech.com/vmtouch/
https://www.zhihu.com/question/28511196/answer/45604224

相关文章
相关标签/搜索