在 Linux 上查看文件內(nèi)容的 5 種方法
如何使用 cat、more、head 和 tail 命令查看 Linux 文件的內(nèi)容,而不僅僅是文本文件。
Linux 提供了許多命令來查看文件的內(nèi)容,包 括 cat、more、head 和 tail,但這只是一個開始。
一方面,即使是很顯而易見的命令也有很多許多用戶不會去使用的選項。還有一些普普通通的命令提供了一些獨特的功能。在本文中,我們將介紹查看文件內(nèi)容的命令,以及如何定制這些視圖以更好地滿足你的需求的選項。
cat
cat 命令將文本文件的全部內(nèi)容發(fā)送到終端窗口以供查看。實際上,如果你輸入 cat,然后輸入包含數(shù)千行內(nèi)容的文件名,那么這些行將以極快的速度在你的窗口中滾動,你將無法看到除了最后一屏外的其他文本。對于 Linux 用戶來說 cat 命令很熟悉,但即使是這個基本命令也提供了許多有用的選項,例如對輸出中的行進行編號,這是我們許多人可能從未使用過的。更進一步,你不僅可以對行進行編號,還可以選擇如何編號。
對每行進行編號就像這樣:
- $ cat -n msg
- 1 Hello --
- 2
- 3 I hope you are having a wonderful day!
- 4
- 5
- 6 That's it for ... now
- 7
- 8 bye!
- 9
- 10 s.
你也可以只對有內(nèi)容的行編號。請注意,對于此命令,僅包含空格的行不被視為“空”,而是會被編號。
- $ cat -b msg
- 1 Hello --
- 2 I hope you are having a wonderful day!
- 3 That's it for ... now
- 4 bye!
- 5 s.
cat 命令允許你使用 -s 選項忽略重復的空白行,但是要完全忽略空白行你必須添加另一個命令。
- $ cat -s msg
- Hello --
- I hope you are having a wonderful day!
- That's it for ... now
- bye!
- s.
要忽略所有空白行,只需如下將 cat 的輸出通過管道傳遞給 grep 命令。 點(.)匹配包含任意字符的文本,因此它將顯示任意非空的行,用于結(jié)束一行的回車換行做匹配(LCTT 譯注:此處原文有誤,徑改)。
- $ cat msg | grep .
- Hello --
- I hope you are having a wonderful day!
- That's it for ... now
- bye!
- s.
-E 選項通過在每行末尾加 $ 符提供視覺提示,來顯示行尾是否還有多余的空格。
- $ cat -E msg
- Hello --$
- $
- I hope you are having a wonderful day! $
- $
- $
- That's it for ... now$
- $
- bye!$
- $
- s.$
使用 -A 時,既可以在每行的末尾顯示 $ 字符,并且制表符會顯示為 ^I 而不是空白。
- $ cat -A msg
- Hello --$
- $
- I hope you are having a wonderful day!$
- $
- $
- That’s it for ...^Inow$
- $
- bye!$
- $
- s.$
使用 head 和 tail 顯示文件部分內(nèi)容
head 和 tail 顯示文件的頭部或尾部,默認為十行。 你可以使用 -3(顯示 3 行)或 -11(顯示 11 行)之類的字符串來指定要查看的其它行數(shù)。tail 命令與 head 的工作方式相同,但是顯示文件的尾部而不是頭部。
- $ head -3 msg
- Hello --
- I hope you are having a wonderful day!
- $ tail -3 msg
- bye!
- s.
你還可以結(jié)合使用 head 和 tail 命令來查看文件中間的文本。你只需要選擇起點和想要查看行數(shù)即可。在此例中,命令將在文件中顯示第二個一百行,并在 cat 的幫助下為這些行編號。
- $ cat -b mybigfile | head -200 | tail -100
- 101 Invoice #2020-06-07a sent to vendor
- ...
使用 more 或者 less 瀏覽一屏文本
more 命令是一次瀏覽一屏內(nèi)容的自然之選,而 less 通過使用上下鍵盤箭頭增加了在文件中上下移動的能力,這樣你就可以遍歷內(nèi)容,然后在文件中回退。
使用 od 查看文本的兩種方法
od(八進制轉(zhuǎn)儲)命令能夠以常規(guī)文本和一系列 ASCII 值(即該文本在文件中的實際編碼方式)的形式查看文件。在下面的例子中可以看到,帶編號的行顯示了 ASCII 數(shù)字值,而其他行則顯示了文本和不可打印的字符。
- $ od -bc msg
- 0000000 110 145 154 154 157 040 055 055 012 012 111 040 150 157 160 145
- H e l l o - - \n \n I h o p e
- 0000020 040 171 157 165 040 141 162 145 040 150 141 166 151 156 147 040
- y o u a r e h a v i n g
- 0000040 141 040 167 157 156 144 145 162 146 165 154 040 144 141 171 041
- a w o n d e r f u l d a y !
- 0000060 012 012 012 124 150 141 164 047 163 040 151 164 040 146 157 162
- \n \n \n T h a t ' s i t f o r
- 0000100 040 056 056 056 011 156 157 167 012 012 142 171 145 041 012 012
- . . . \t n o w \n \n b y e ! \n \n
- 0000120 163 056 012
- s . \n
請注意,換行符顯示為 \n(八進制 012),而制表符顯示為 \t(八進制 011)。
od 命令特別有用的用途之一是查看非文本文件以獲取可以標識文件類型的信息。在這里,我們看到 JFIF(JPEG 文件交換格式)標簽,該標簽讓 file 之類報告文件類型的命令將它標示為 jpg 文件。這里還有很多其他有用的信息,特別是如果你對這些文件的格式感到好奇的話。
在接下來的命令中,我們查看 jpg 文件的開始部分。
- $ od -bc arrow.jpg | head -12
- 0000000 377 330 377 340 000 020 112 106 111 106 000 001 001 000 000 001
- 377 330 377 340 \0 020 J F I F \0 001 001 \0 \0 001
- 0000020 000 001 000 000 377 333 000 103 000 003 002 002 002 002 002 003
- \0 001 \0 \0 377 333 \0 C \0 003 002 002 002 002 002 003
- 0000040 002 002 002 003 003 003 003 004 006 004 004 004 004 004 010 006
- 002 002 002 003 003 003 003 004 006 004 004 004 004 004 \b 006
- 0000060 006 005 006 011 010 012 012 011 010 011 011 012 014 017 014 012
- 006 005 006 \t \b \n \n \t \b \t \t \n \f 017 \f \n
- 0000100 013 016 013 011 011 015 021 015 016 017 020 020 021 020 012 014
- \v 016 \v \t \t \r 021 \r 016 017 020 020 021 020 \n \f
- 0000120 022 023 022 020 023 017 020 020 020 377 333 000 103 001 003 003
- 022 023 022 020 023 017 020 020 020 377 333 \0 C 001 003 003
如果我們要 file 命令提供有關(guān)此圖像的信息,我們可能會看到類似下面這樣的信息。file 命令從文件開頭的數(shù)據(jù)中提取了所有這些描述性信息:
- $ file arrow.jpg
- arrow.png: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 500x375, components 3
使用 jp2a 將文件視為基于文本的圖像
如果你只能在命令行工作,并且想了解特定圖像包含的內(nèi)容,那么可以使用 jp2a(jpeg to ascii)之類的工具提供字符渲染。圖像在這種格式下的識別程度取決于文件。不要有太多期待,因為你將看到的圖像版本是“低分辨率”下的測試!這是一只分辨率很低的帝王企鵝。(請離遠點看)
- $ jp2a Emperor_Penguin.jpg
- MMMMMMMMWOdkNMMMMMMMMMMMMMMMMMMM
- MMMXK0kc.... ,OKMMMMMMMMMMMMMMMM
- MMNK0Ol... :Xx'dNMMMMMMMMMMMMM
- MMMMMMMd;lx00Oo. ..xMMMMMMMMMMMM
- MMMMMMK.OXMMMMMN,...lMMMMMMMMMMM
- MMMMMMx'KXNNMMMMK....0MMMMMMMMMM
- MMMMMMx:kkKNWWMMMl.. 'NMMMMMMMMM
- MMMMMMddx0NNNWMMMK'...;NMMMMMMMM
- MMMMMMck0NNWWWWWMMd ..lMMMMMMMM
- MMMMMM.d0KXNWWWWMMo ...WMMMMMMM
- MMMMMM.xOXNNWNMMMW. ....KMMMMMMM
- MMMMMM'kKNKWXWMMMK ..'.0MMMMMMM
- MMMMMMxckXNNNNMMMX .:..XMMMMMMM
- MMMMMMW;xKNWWWMMMM. .;. NMMMMMMM
- MMMMMMMok0NNWNWMMMx .l..MMMMMMMM
- MMMMMMMkxOKXWXNMMMMl.:'dMMMMMMMM
- MMMMMMM0dKOdKXXNMMMMNx,WMMMMMMMM
- MMMMMMMWoKxldXKNNMMMMM;MMMMMMMMM
- MMMMMMMMxxxxdNWNXNMMMM;MMMMMMMMM
- MMMMMMMMxOcoo0XOOOOWMW,kMMMMMMMM
- MMMMMMM0xK;.cO0dNX:0XXd;NMMMMMMM
- MMMNkdd:,'ldXXO0xl;x0kx:;lKMMMMM
- MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
總結(jié)
Linux 上有很多命令可以通過各種方式查看文件的內(nèi)容。其中一些選項在你需要處理文件內(nèi)容時可能會非常有用。其它的只是……有趣。