跳轉到內容

Unix/命令/檔案檢視指南

來自華夏公益教科書,開放的書籍,開放的世界

cat 將檔案內容顯示到螢幕上。它還可以顯示多個檔案cat連線在一起,使用shell,它的標準輸出可以從螢幕重定向到檔案。

一些有用的選項是

-n  line numbering
-s  squeeze sequences of blank lines into one
-v  show non-printing characters

示例

$ cat example.txt
The contents of the file
example.txt are now 
displayed.
$ cat -n example.txt
     1  The contents of the file
     2  example.txt are now
     3  displayed.

連線多個檔案(在本例中,同一個檔案兩次)

$ cat example.txt example.txt
The contents of the file
example.txt are now
displayed.
The contents of the file
example.txt are now
displayed.

連線檔案,但使用shell將結果重定向到一個新檔案。

$ cat example.txt example.txt > double.txt

我們也可以連線二進位制檔案。一些程式將下載限制為 2 GB;這對於較大的檔案(如某些 DVD 映像)來說很糟糕。假設一個網站有幫助地將檔案“sodalinux.dvd”分成三個部分,每個部分不超過 2 GB,以便下載和稍後連線。我們合併檔案,並使用> shell 重定向輸出將 DVD 映像放入檔案

$ cat sodalinux.dvd1 sodalinux.dvd2 sodalinux.dvd3 > sodalinux.dvd

如果我們想少打字,那麼大多數shell也允許這樣做

$ cat sodalinux.dvd{1,2,3} > sodalinux.dvd

-v 選項對於檢視主要嵌入在文字中的控制字元很有用。在本例中,檔案“/usr/share/man/cat1/pax.0”主要是文字,但包含“less”和“more”分頁器用來使文字變粗體的控制字元。使用 cat -v 我們可以看到控制字元。以下是前四行

$ cat -v /usr/share/man/cat1/pax.0 | head -4
PAX(1)                     OpenBSD Reference Manual                     PAX(1)

N^HNA^HAM^HME^HE
     p^Hpa^Hax^Hx - read and write file archives and copy directory hierarchies

使用沒有引數的“cat”使其將標準輸入複製到標準輸出。結合shell重定向,這使得編寫一個非常短的文字檔案變得很容易。只需要知道按 Control-D (^D) 表示輸入結束,完成檔案並返回到shell即可。以下是如何編寫“example.txt”

$ cat > example.txt
The contents of the file
example.txt are now
displayed.
^D $

如果將沒有引數的“cat”放在管道中,它只將標準輸入複製到標準輸出。這似乎毫無用處。例如,以下兩個管道具有相同的功能

$ dmesg | less
$ dmesg | cat | less

但是,“cat”可以用作絕緣體,讓程式認為它們沒有在終端上執行。在下一個示例中,GNU bc 在啟動時不會列印其版權資訊。我們輸入一個計算(“3 + 9”),然後退出 (^D)

$ bc | cat
3 + 9
12
^D

連結

tac (cat拼寫反過來) 像cat一樣工作,但顛倒行順序(最後一行先寫出來)。它似乎不是傳統 Unix 的一部分。當給出多個檔案時,它們按出現的順序打印出來。

$ tac foo
Third Line
Second Line
First Line

連結

more 對輸出進行分頁。使用“cat”的問題是,如果檔案太長,就會超出螢幕頂部。 “more”的任務是在填滿螢幕時停止並等待。大多數使用者發現使用“less”更容易,但在某些系統上,“more”具有“less”的所有功能。

  • 回車 讀取下一行
  • 空格鍵 讀取下一屏
  • q 退出

示例:如果檔案足夠短,分頁器將像“cat”一樣工作。

 $ more hello.txt
 Hello World

連結

less 對輸出進行分頁。該程式之所以稱為“less”,是因為有一個笑話:“less is more”,“less”實際上有幾個“more”所沒有的功能。

  • h 讀取幫助。你可能會忘記其他命令,但記住這個!
  • j 向下移動一行。向下箭頭鍵也可能有效。
  • k 向上移動一行。向上箭頭鍵也可能有效。
  • d 向下移動半屏。
  • u 向上移動半屏。
  • f 向前移動一屏。
  • b 向後移動一屏。
  • p 返回到檔案頂部。
  • q 退出分頁器。

數字引數

  • 09: 輸入一個數字。該數字將用作下一個命令的引數 N。
  • j 向下移動 N 行。
  • k 向上移動 N 行。
  • p 跳轉到 N% 位置,其中 0% 是第一行,100% 是檔案的最後一行。

示例

讀取一些檔案

$ less example.txt

將“dmesg”管道到“less”中,這樣 dmesg 不會滾出螢幕

$ dmesg | less

連結

透過輸出八進位制表示、十六進位制表示等方式檢視二進位制檔案。另請參見 Od

示例

以八進位制格式檢視檔案

$ od wordlist.dat
0000000 064506 071562 006564 051412 061545 067157 006544 040412
0000020 070160 062554 005015 072522 061155 062554 005015 061501

以十六進位制格式檢視檔案

$ od -x wordlist.dat
0000000 6946 7372 0d74 530a 6365 6e6f 0d64 410a
0000020 7070 656c 0a0d 7552 626d 656c 0a0d 6341

以字元格式檢視檔案

$ od -c wordlist.dat
0000000   F   i   r   s   t  \r  \n   S   e   c   o   n   d  \r  \n   A
0000020   p   p   l   e  \r  \n   R   u   m   b   l   e  \r  \n

連結

輸出檔案、檔案或標準輸入頭部(頂部)的 10 行或其他行數。另請參見 tail,輸出最後幾行。

示例

  • head wordlist.dat
    • 輸出檔案的前 10 行。
  • head -n 2 wordlist.dat
    • 輸出檔案的前 2 行。
  • head -2 wordlist.dat
    • 輸出檔案的前 2 行。一個不再受 POSIX 支援的遺留選項,仍然受 GNU head 支援。
  • seq 10 | head -n -2
    • 在 GNU head 中,輸出除最後 2 行之外的所有輸入流,在本例中為 1 ... 10。GNU 擴充套件,不受 POSIX 支援。
  • seq 10 | sed 2q
    • 一個避免使用 head 的 sed 替代方案,輸出前兩行。

連結

Hexdump 是一個命令列工具,用於以各種方式(包括十六進位制)顯示檔案的原始位元組,可在 Linux、FreeBDS、OS X 和其他平臺上使用。Hexdump 不是傳統 Unix 系統或 GNU 命令的一部分,似乎也不在 POSIX 範圍內。類似的工具是 #od(POSIX 涵蓋)和 #xxd

hexdump 使用示例

  • hexdump myfile
    • 輸出檔案內容的十六進位制表示,沒有 ASCII。似乎預設輸出 16 位塊,塊之間用空格分隔,每行 16 個位元組。
  • hexdump -C myfile
    • 輸出位元組的十六進位制表示,每個位元組之間用空格分隔,並在右側列出 ASCII 程式碼。
  • hexdump -v -e '"" 1/1 "%02X" " "' myfile
    • 使用大寫字母輸出位元組的十六進位制表示,每個位元組之間用空格分隔。第一個 "" 指定空字首,最後一個 " " 指定單個空格字尾。

連結

輸出檔案或標準輸入的十六進位制內容,或根據十六進位制轉儲建立檔案。不受 POSIX 涵蓋,也不屬於 GNU 工具;似乎是 Vim 專案的一部分,與 Vim 一起分發。

示例

  • xxd myfile
    • 輸出十六進位制內容,並在右側列出 ASCII 程式碼;預設似乎是輸出 16 位用空格分隔的塊。這些 16 位塊似乎不遵循平臺的位元組序。
  • xxd -g 1 myfile
    • 同上,但每個位元組之間用空格分隔。
  • xxd -b myfile.
    • 輸出二進位制內容。

連結

輸出檔案、檔案或標準輸入的最後 10 行或其他指定的行數或位元組數。它的對應工具是 #head。POSIX 是否允許多個輸入檔案尚不清楚。

示例

  • tail wordlist.dat
    • 輸出最後 10 行。
  • tail -n 2 wordlist.dat
    • 輸出最後 2 行。
  • tail -2 wordlist.dat
    • 輸出最後 2 行。這是一個傳統選項,不再受 POSIX 支援,但仍受 GNU tail 支援。
  • printf hello | tail -c 2
    • 輸出輸入的最後兩個位元組/字元,即 "lo"。
  • tail file1.txt file2.txt
    • 在 GNU tail 中,處理多個檔案,在每個檔案的輸出前加上標題。

-f 選項顯示尾部,然後等待並顯示檔案中的任何新選項。這通常用於監視日誌檔案。(下一個示例只有三行來自 tail,但 80 列終端太窄,因此這些行被分成五行。)

$ tail -f /var/log/messages
Apr 14 00:05:33 redserver sshd[1575]: Accepted password for rumbear from 24.52.1
45.23 port 33372 ssh2
Apr 14 00:05:34 redserver sshd[1594]: subsystem request for sftp
Apr 14 00:06:35 redserver sshd[1594]: Received disconnect from 242.122.35.47: 11
: Disconnect requested by Windows SSH Client.

連結

華夏公益教科書