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
/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.字符串
咱們有已知的已知,已知的未知,以及未知的未知。get
https://fulmicoton.com/posts/pagecache/
https://hoytech.com/vmtouch/
https://www.zhihu.com/question/28511196/answer/45604224