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
連結
- 3.2 tac: 反向連線和寫入檔案 在 GNU Coreutils 手冊中,gnu.org
more 對輸出進行分頁。使用“cat”的問題是,如果檔案太長,就會超出螢幕頂部。 “more”的任務是在填滿螢幕時停止並等待。大多數使用者發現使用“less”更容易,但在某些系統上,“more”具有“less”的所有功能。
鍵
- 回車 讀取下一行
- 空格鍵 讀取下一屏
- q 退出
示例:如果檔案足夠短,分頁器將像“cat”一樣工作。
$ more hello.txt Hello World
連結
- more, opengroup.org
less 對輸出進行分頁。該程式之所以稱為“less”,是因為有一個笑話:“less is more”,“less”實際上有幾個“more”所沒有的功能。
鍵
- h 讀取幫助。你可能會忘記其他命令,但記住這個!
- j 向下移動一行。向下箭頭鍵也可能有效。
- k 向上移動一行。向上箭頭鍵也可能有效。
- d 向下移動半屏。
- u 向上移動半屏。
- f 向前移動一屏。
- b 向後移動一屏。
- p 返回到檔案頂部。
- q 退出分頁器。
數字引數
- 0 到 9: 輸入一個數字。該數字將用作下一個命令的引數 N。
- j 向下移動 N 行。
- k 向上移動 N 行。
- p 跳轉到 N% 位置,其中 0% 是第一行,100% 是檔案的最後一行。
示例
讀取一些檔案
$ less example.txt
將“dmesg”管道到“less”中,這樣 dmesg 不會滾出螢幕
$ dmesg | less
連結
- less 主頁, greenwoodsoftware.com
- less(1) OS X 手冊頁 在 developer.apple.com 上
- less 手冊頁, freebsd.org
- GNU less 頁面 在 gnu.org 上;沒有使用者手冊
- 維基百科:less (Unix)
透過輸出八進位制表示、十六進位制表示等方式檢視二進位制檔案。另請參見 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 替代方案,輸出前兩行。
連結
- head, opengroup.org
- 5.1 head 在 GNU Coreutils 手冊中,gnu.org
- head, freebsd.org
- head (Unix), wikipedia.org
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
- 使用大寫字母輸出位元組的十六進位制表示,每個位元組之間用空格分隔。第一個 "" 指定空字首,最後一個 " " 指定單個空格字尾。
連結
- hexdump, man7.org - 來自 util-linux
- hexdump 在 freebsd.org
- hexdump, opensource.apple.com
- 十六進位制轉儲, wikipedia.org
輸出檔案或標準輸入的十六進位制內容,或根據十六進位制轉儲建立檔案。不受 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.
連結
- tail, opengroup.org
- tail 手冊頁, man.cat-v.org
- 5.2 tail 在 GNU Coreutils 手冊中,gnu.org
- tail, freebsd.org
- tail (Unix), wikipedia.org