情景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

相關文章
相關標籤/搜索