情景
cat是linux命令中最為基礎(chǔ)的命令之一,它是“concatenate”(連接)的簡寫调衰,作用概述是concatenate and print files,即:連接和查看文件內(nèi)容。
常見用法有:
- 查看單個文件:
cat file1
- 順序查看多個文件:
cat file1 file2 ...
一般cat會結(jié)合重定向符號(重寫>奔害、追加>>)使用炉旷,如常見的用法有:
- 將一個文件的內(nèi)容追加到另一個文件中:
cat file1 >> file2
- 合并多個文件產(chǎn)生新文件:
cat file1 file2 > newfile
- 用鍵盤輸入創(chuàng)建一個新文件:
cat << EOF > file3
$ cat << EOF > file3
> a
> b
> c
> EOF
>
是命令行的提示符签孔,不是你需要輸入的內(nèi)容。當輸入“EOF”按回車后命令自動結(jié)束窘行。
$ cat file3
a
b
c
cat命令本身也支持參數(shù)骏啰,但用法簡單,功能單一抽高,感興趣的話可以自行man cat
判耕。
cat還可以通過管道符“|”連接其它命令,但許多時候cat并不是必需的:
想知道文件的行數(shù)翘骂,可以使用cat file1 | wc -l
壁熄,但wc -l file1
一樣可以做到。
想過濾文件中特定的字符串碳竟,可以使用cat file2 | grep "some string"
草丧,但grep "some string" file2
一樣可以做到。
突破
在搜索引擎項目工作時莹桅,看到過研發(fā)工程師在調(diào)試問題時這樣使用了cat——他們啟動服務(wù)后昌执,使用了命令cat some_data.txt > /dev/null
,雖然當時沒有直接向他們請教原委,但這個命令給我留下了深刻的印象:
-
/dev/null
是linux的位桶文件懂拾,寫入它的內(nèi)容會永遠丟失煤禽,從它那里什么也讀取不到。一般用法是想丟棄命令產(chǎn)生的標準輸出和標準錯誤時岖赋,通常使用command > /dev/null 2>&1
檬果,因此,cat some_data.txt > /dev/null
似乎沒有任何效果唐断。 - 當時觀察到
cat some_data.txt > /dev/null
這個命令的執(zhí)行時間非常長选脊,這說明了some_data.txt這個文件也足夠大。但第二次執(zhí)行這個命令時脸甘,執(zhí)行時間則大大縮減了恳啥。
由以上大致可以判斷出,該用法是為了將文件內(nèi)容導(dǎo)入到內(nèi)存中丹诀,以便需要使用文件內(nèi)容時能夠快速獲取角寸。一般來說,從硬盤中讀取數(shù)據(jù)需要5ms到10ms的時間忿墅,而從內(nèi)存中讀取數(shù)據(jù)時通常只需要50ns到100ns的時間扁藕,這就是page cache(頁高速緩沖存儲器)的作用。
總結(jié)
這個經(jīng)歷給我的體會是疚脐,許多時候亿柑,我們認為自己掌握了全部或絕大部分,而實際上棍弄,只是因為自己知道的太少望薄,并且不認為自己知道的太少——我們壓根不覺得是因為自己不知道。就像美國前國防部長拉姆斯菲爾德說過的那樣:
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.
我們有已知的已知呼畸,已知的未知痕支,以及未知的未知。
相關(guān)鏈接
https://fulmicoton.com/posts/pagecache/
https://hoytech.com/vmtouch/
https://www.zhihu.com/question/28511196/answer/45604224