Linux提供了許多命令來顯示文件的內(nèi)容,包括cat,more,head和tail。 這僅僅是開始。
舉例說,連最明顯的命令也有大量選項,比許多Linux用戶平常用的多得多。還有一些不太明顯的命令提供了一些獨特的功能。本文介紹了查看文件內(nèi)容的命令和定制那些視圖以更好地滿足實際需要的選項。
cat
cat命令將文本文件的全部內(nèi)容發(fā)送到終端窗口以供查看。實際上,如果您鍵入“cat”,后面跟以有數(shù)千行的文件的名稱,那些行會在窗口一閃而過,您只能看到最后一屏幕的文本。不過,盡管cat命令對Linux用戶來說很熟悉,連這個基本命令也提供了許多有用的選項,比如對輸出的行進行編號,我們許多人可能從未使用過該選項。補充一下,您不僅可以對行進行編號,進行編號時還有一些選擇。
對每行編號如下所示:
$ cat -n msg1 Hello --23 I hope you are having a wonderful day!456 That's it for ... now78 bye!910 s.
還可以只對有內(nèi)容的行進行編號。注意:內(nèi)容為空的行對該命令而言并不被認為是“空行”,也會加以編號。
$ cat -b msg1 Hello --2 I hope you are having a wonderful day!3 That's it for ... now4 bye!5 s.
cat命令讓您可以用-s選項忽略重復的空行,但您得添加另一個命令才能完全排除空行。
$ cat -s msgHello --I hope you are having a wonderful day!That's it for ... nowbye!s.
想忽略所有空行,只要將輸出從cat命令pipe到grep命令,如下所示。點(.)匹配包括空字符的文本,所以它會顯示內(nèi)容空白的行。
$ cat msg | grep .Hello --I hope you are having a wonderful day!That's it for ... nowbye!s.
-E選項提供了視覺線索,顯示行末尾有沒有多余的空白,只需在每行末尾添加$。
$ cat -E msgHello --$$I hope you are having a wonderful day! $$$That's it for ... now$$bye!$$s.$
若使用-A,您既得到每行末尾處的$字符,還得到顯示為^I而不是空白區(qū)的標簽。
$ cat -A msgHello --$$I hope you are having a wonderful day!$$$That’s it for …^Inow$$bye!$$s.$
用head和tail顯示文件的部分內(nèi)容
head和tail命令顯示文件的頂部或底部,默認顯示10行。您可以指定不同的行數(shù)來查看,只要使用-3(顯示3行)或-11(顯示11行)之類的字符串。tail命令的工作原理與head一樣,但顯示文件的底部,而不是頂部。
$ head -3 msgHello --I hope you are having a wonderful day!$ tail -3 msgbye!s.
您還可以結(jié)合head和tail命令來查看文件頂部和底部之間的文本。您只要選擇起點以及想查看的行數(shù)。在該例子中,該命令將顯示文件中的第200行;借助cat命令,可對那些行進行編號。
$ cat -b mybigfile | head -200 | tail -100101 Invoice #2020-06-07a sent to vendor...
用more或less每次瀏覽一屏幕的文本
more命令顯然用于每次瀏覽一屏幕的文件內(nèi)容,而less增添了使用向上和向下鍵盤箭頭在文件中上下移動的功能,以便您可以開始掃描、然后返回到文件前面的內(nèi)容。
用od一次雙向查看文本文件
od(八進制輸出)命令讓您可以將文件輸出為普通文本和一系列ASCII值(即該文本在文件中如何實際編碼)。您可以從下面示例中看到,編號的行顯示了數(shù)字ASCII值,隔行顯示了文本和非輸出字符。
$ od -bc msg0000000 110 145 154 154 157 040 055 055 012 012 111 040 150 157 160 145H e l l o - - \n \n I h o p e0000020 040 171 157 165 040 141 162 145 040 150 141 166 151 156 147 040y o u a r e h a v i n g0000040 141 040 167 157 156 144 145 162 146 165 154 040 144 141 171 041a 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 r0000100 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 \n0000120 163 056 012s . \n
注意:換行字符顯示成\n(八進制012),標簽顯示成\t(八進制011)。
od命令特別有幫助的用途之一是查看非文本文件,以獲取識別文件類型的信息。在這里,我們看到JFIF(JPEG文件交互格式)標簽向報告文件類型的命令(比如file)表明這是jpg文件。還有其他許多有用的信息,如果你很想知道這些文件的格式更是如此。
在這下一個命令中,我們查看jpg文件的起始部分。
$ od -bc arrow.jpg | head -120000000 377 330 377 340 000 020 112 106 111 106 000 001 001 000 000 001377 330 377 340 \0 020 J F I F \0 001 001 \0 \0 0010000020 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 0030000040 002 002 002 003 003 003 003 004 006 004 004 004 004 004 010 006002 002 002 003 003 003 003 004 006 004 004 004 004 004 \b 0060000060 006 005 006 011 010 012 012 011 010 011 011 012 014 017 014 012006 005 006 \t \b \n \n \t \b \t \t \n \f 017 \f \n0000100 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 \f0000120 022 023 022 020 023 017 020 020 020 377 333 000 103 001 003 003022 023 022 020 023 017 020 020 020 377 333 \0 C 001 003 003
如果我們向file命令索取該圖像文件方面的信息,可以看到這樣的內(nèi)容。file命令從文件開始處的數(shù)據(jù)獲取所有這些描述性信息。
$ file arrow.jpgarrow.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)之類的工具來提供字符版本。該格式中圖像多易于識別將取決于文件。別抱太大的希望,因為你會看到的圖像版本“分辨率很低”!該圖像是分辨率很低的帝企鵝。