【Linux】文件內容查看命令——cat,tac,more,less,head,tail,od

????????如果我們要查看一個文件的內容時,該如何是好?

這里有相當多有趣的命令可以來分享一下:最常使用的顯示文件內容的命令可以說是cat與more及less了。

此外,如果我們要查看一個很大的文件(好幾百MB時),但是我們只需要后面的幾行字而已,那么該如何是好?

呵呵,用tail呀。此外,tac這個命令也可以達到這個目的。好了,說說各個命令的用途。

  1. cat :由第一行開始顯示文件內容。
  2. tac:從最后一行開始顯示,可以看出tac是cat的倒著寫、
  3. nl:顯示的時候,同時輸出行號。
  4. more:一頁一頁地顯示文件內容。
  5. less:與more類似,但是比more更好的是,它可以往前翻頁。
  6. head:只看前面幾行。
  7. tail :只看后面幾行。
  8. od :以二進制的方式讀取文件內容。

1.直接查看文件內容

直接查看一個文件的內容可以使用cat/tac/nl這幾個命令。

1.1.cat ( concatenate)

選項與參數:

  • -A:相當于-vET的整合選項,可列出一些特殊字符而不是空白而已;
  • -b:列出行號,僅針對非空白行做行號顯示,空白行不標行號;
  • -E:將結尾的換行符S顯示出來;
  • -n:打印出行號,連同空白行也會有行號,與-b的選項不同;
  • -T:將[tab]按鍵以^I(大寫的i)顯示出來;
  • -v :列出一些看不出來的特殊字符;

范例一:查看/etc/issue 這個文件的內容

范例二:承上題,如果還要打印行號?

所以這個文件有三行,看到了吧!可以列出行號。這對于大文件要找某個特定的行時,有點用處.

#如果不想要顯示空白行的行號,可以使用【cat -b /etc/issue 】,自己測試看看。


范例三:將/etc/man db.conf的內容完整的顯示出來(包含特殊字符)。



……(下面省略)…….

上面的結果限于篇幅,我刪除掉了很多數據。另外,輸出的結果并不會有特殊字體,

上面的特殊字體是要讓您發現差異點在哪里,

基本上,在一般的環境中,使用[tab]與空格鍵的效果差不多,都是一堆空白。我們無法知道兩者的差別。?此時使用cat -A就能夠發現那些空白的地方是啥鬼東西了。

[tab]會以^I表示,換行符則是以表示$表示

所以你可以發現每一行后面都是$,不過換行符在Windows/Linux則不太相同,Windows的換行符是^M$.

????????嘿嘿,Linux里面有“貓”命令?不是的,cat是Concatenate(串聯)的簡寫,主要的功能是將一個文件的內容連續打印在屏幕上面。例如上面的例子中,我們將/etc/issue打印出來,如果加上-n或-b的話,則每一行前面還會加上行號。

????????個人比較少用cat。畢竟當你的文件內容的行數超過40行以上,根本來不及在屏幕上看到結果。所以,配合等一下要介紹的more或是 less來執行比較好。

????????此外,如果是一般的DOS文件時,就需要特別留意一些奇怪的符號了,例如換行與[Tab]等要顯示出來,就得加入-A之類的選項。

1.2.tac(反向列示)

與剛剛上面的范例一比較,是由最后一行先顯示。

????????tac 這個好玩了。怎么說?詳細看一下,cat與tac,有沒有發現?

對,tac 剛好是將cat反寫動來,所以它的功能就跟cat相反,cat 是由第一行到最后一行連續顯示在屏幕上,而tac則是由最盡一行到第一行反向在屏幕上顯示出來,很好玩吧!

1.3.nl(添加行號打印)

選項與參數

-b:指定行號指定的方式,主要有兩種

  • -b a:表示不論是否為空行,也同樣列出行號(類似cat -n);
  • -b? t:如果有空行,空的那一行不要列出行號(默認值);

-n:列出行號表示的方法,主要有三種:

  • -n 1n:行號在屏幕的最左方顯示;
  • -n rn:行號在自己欄位的最右方顯示,且不加0;
  • -n rz:行號在自己欄位的最右方顯示,且加0;行號欄位的占用的字符數。

-w:行號欄位占用的字符數

范例一:用nl列出/etc/issue的內容.

注意看,這個文件其實有三行,第三行為空白(沒有任何字符),
因為它是空白行,所以nl不會加上行號,如果確定要加上行號,可以這樣做。

#呵呵,行號加上來,那么如果要讓行號前面自動補上0?可以這樣。

嘿嘿,自動在自己欄位的地方補上0了,默認欄位是六位數,如果想要改成3位數?

nl 可以將輸出的文件內容自動地加上行號,其默認的結果與cat-n有點不太一樣,nl可以將行號做比較多的顯示設計,包括位數與是否自動補齊0等的功能。

有的復雜啊!!!不過別擔心,這個基本不用的

2.可翻頁查看

nl與cat、tac等,都是一次性地將數據一口氣顯示到屏幕上面,那有沒有可以進行一頁一頁翻動的命令?

讓我們可以一頁一頁的觀察,才不會前面的數據看不到。有,那就是more與less。

2.1.more(一頁一頁翻動)

這樣子 文件里的內容就一頁一頁的展示給我們了

重點在最后一行,你的光標也會在這里等待你的命令

????????仔細地給它看到上面的范例,如果more后面接的文件內容行數大于屏幕輸出的行數時,就會出現類似上面的圖例。重點在最后一行,最后一行會顯示出目前顯示的百分比,而且還可以在最后一行輸入一些有用的命令。

在more 這個程序的運行過程中,你有幾個按鍵可以使用:

  1. 空格鍵(space):代表向下翻一頁;
  2. Enter:代表向下翻一行;
  3. /字符串:代表在這個顯示的內容當中,向下查找字符串這個關鍵詞;
  4. :f:立刻顯示出文件名以及目前顯示的行數;
  5. q:代表立刻離開more,不再顯示該文件內容;
  6. b或[ctrl]-b:代表往回翻頁,不過這操作只對文件有用,對管道無用。

要離開more 這個命令的顯示工作,可以按下q就能夠離開。而要向下翻頁,使用空格鍵即可。

比較有用的是查找字符串的功能,

舉例來說,我們使用more /etc/man_db.conf來觀察該文件,若想要在該文件內查找MANPATH這個字符串時,可以在底行處輸入/MANPATH

輸入了/之后,光標就會自動跑到最下面一行等待輸入

如同上面的說明,輸入了/之后,光標就會跑到最下面一行,并且等待你的輸入,你輸入了字符串并按下[enter]之后,more就會開始向下查找該字符串,而重復查找同一個字符串,可以直接按下n即可。最后,不想要看了,就按下q即可離開more。

more的缺點就是只能往后翻!!!!!

2.2.less(一頁一頁翻動)

我們先看例子

和more好像差不多?

????????less的用法比起more又更加有彈性,在more的時候,我們并沒有辦法向前面翻,只能往后面看,但若使用了less 時,就可以使用【pageup]、[pagedown]等按鍵的功能來往前往后翻看文件,你看是不是更容易觀看一個文件的內容了。

除此之外,在less 里面可以擁有更多的查找功能。不止可以向下查找,也可以向上查找,實在是很不錯,基本上,可以輸入的命令有:

  1. 空格鍵:向下翻動一頁;
  2. [pagedown]:向下翻動一頁;
  3. [pageup]:向上翻動一頁;
  4. /字符串:向下查找字符串的功能;
  5. ?字符串:向上查找字符串的功能;
  6. n:重復前一個查找(與/或?有關);
  7. N:反向的重復前一個查找(與/或?有關);
  8. g:前進到這個數據的第一行;
  9. G:前進到這個數據的最后一行去(注意大小寫);
  10. q:離開less這個程序。

查看文件內容還可以進行查找的操作,看,less是否很不錯?其實less還有很多的功能,詳細的你是否會覺得 less 使用的畫面與環境與man page非常類似?

????????沒錯,因為man這個命令就是詢用less來顯示說明文件的內容,現在你是否覺得less很重要?
使用方式請使用man less查詢一下。

3.數據截取

我們可以將輸出的數據作一個最簡單的截取,那就是取出文件前面幾行(head)或取出后面幾行(tail)文字的功能。

不過,要注意的是head與tail都是以“行”為單位來進行數據截取的。

3.1.head(取出前面幾行)

  • head [-n number]文件

選項與參數:

  • -n:后面接數字,代表顯示幾行的意思。


?默認的情況中,顯示前面十行,若要顯示前 20行,就得要這樣。

范例:如果后面 100行的數據都不打印,只打印/etc/man_db.conf的前面幾行,該如何是好?

????????head的英文意思就是“頭”,那么這個東西的用法自然就是顯示出一個文件的前幾行,沒錯,就是這樣。

若沒有加上-n這個選項時,默認只顯示十行,若只要一行?那就加入“head-n 1 filename”即可。

????????另外那個-n選項后面的參數較有趣,如果接的是負數,例如上面范例的-n -100時,代表列出前面所有行數,但不包括后面 100行。舉例來說CentOS 7.1的 /etc/man_db.conf 共有131行,則上述的命令“head-n-100 /etc/man_db.conf”就會列出前面31行,后面100行不會打印出來了。這樣說,比較容易懂了吧?

3.1.tail(取出后面幾行)

選項與參數:

  • -n:后面接數字,代表顯示幾行的意思。
  • -f:表示持續刷新顯示后面所接文件中的內容,要等到按下[ctrl]-c才會結束

默認的情況中,顯示最后的十行。若要顯示最后的20行,就得要這樣:

范例一:如果不知道/etc/man db,conf有幾行,卻只想列出100行以后的數據時?

范例二:持續檢測/var/log/messages的內容

要等到輸入[crtl]-c之后才會結束執行tail這個命令.

????????有head自然就有tail(尾巴),沒錯,這個tail的用法跟head的用法類似,只是顯示的是后面
幾行。默認也是顯示十行,若要顯示非十行,就加-n number的選項即可。

????????范例一的內容就有趣啦,其實與head-n-xx有異曲同工之妙。當執行 tail -n +100 /etc/man db.conf 代表該文件從100行以后都會被列出來,同樣,在man_db.conf共有131行,因此第100-131行就會被列出來,前面的99行都不會被顯示出來。

????????至于范例二中,由于/var/log/messages隨時會有數據寫入,你想要讓該文件有數據寫入時就立刻顯示到屏幕上,就利用-f這個選項,它可以一直刷新顯示/var/log/messages這個文件,新加入的數據都會被顯示到屏幕上,直到你按下[crtl]-c才會結束 tail 這個命令的執行,由于messages必須要 root權限才能看,所以該范例得要使用root來查詢。

例題

假如我想要顯示/etc/man_db.conf的第11到第20行?

????????答:這個應該不算難,想一想,在第11到第20行,那么我取前20行,再取后十行,所以結果就是:【head -n 20 /etc/man_db.conf | tail -n 10】,這樣就可以得到第11到第20行之間的內容了。

????????這兩個命令中間有個管道(|)的符號存在,這個管道的意思是:前面的命令所輸出的信息,通過管道交由后續的命令繼續使用。所以,head-n20/etc/man_db.conf會將文件內的20行取出來,但不輸出到屏幕上,而是轉交給后續的tai 命令繼續處理。因此 tal不需要接文件名,因為tai 所需要的數據是來自于head處理后的結果

例題
????????承上一題,那如果我想要列出正確的行號?就是屏幕上僅列出letc/man_db.conf的第11到第20行,且有行號存在?

????????答:我們可以通過 cat-n來顯示出行號,然后再通過head/tail 來截取數據即可,所以就變成了如下的模樣:【cat -n /etc/man db.conf | head -n 20 | tail -n 10】

有沒有頭暈呢?

4.非純文本文件:od

我們上面提到的都是在查看純文本文件的內容。那么萬一我們想要查看非文本文件呢??

舉例來說,例如/usr/bin/passwd這個執行文件的內容時,又該如何去讀出信息呢?

????????事實上,由于執行文件通常是二進制文件(binary file),使用上面提到的命令來讀取它的內容時,確實會產生類似亂碼的數據。那怎么辦?

沒關系,我們可以利用od 這個命令來讀取。

  • od[-t TYPE]文件

選項或參數:

-t:后面可以接各種【類型(TYPE)】的輸出,例如:

  • a :利用默認的字符來輸出;
  • c? :使用ASCII字符來輸出;
  • d[size]:利用十進制(decimal)來輸出數據,每個整數占用size Bytes;
  • f[sizel:利用浮點數值(floating)來輸出數據,每個數占用size Bytes;
  • o[size]:利用八進制(octa1)來輸出數據,每個整數占用 size Bytes;
  • x[size]:利用十六進制(hexadecimal)來輸出數據,每個整數占用size Bytes;


范例一:請將/usr/bin/passwd的內容使用ASCII方式來顯示。

?……(后面省略)……

最左邊第一列是以八進制來表示Bytes數.

以上面范例來說,第二欄0000020代表開頭是第16個byte(2x8)的內容之意。

范例二:請將/etc/issue這個文件的內容以八進制列出存儲值與ASCII的對照表。


如上所示,可以發現每個字符可以對應到的數值是什么。

要注意的是,該數值是八進制.例如S對應的記錄數值為123,轉成十進制:1x8^2+2x8+3=83.

????????利用這個命令,可以將數據文件(data file)或是二進制文件(binary file)的內容數據讀出來雖然讀出來的數值默認是使用非文本文件,亦即是十六進制的數值來顯示,不過,我們還是可以通過-t c的選項與參數來將數據內的字符以ASCII類型的字符來顯示,雖然對于一般用戶來說,這個命令的用處可能不大,但是對于工程師來說,這個命令可以將二進制文件(binary file)的內容作一個大致的輸出,他們可以看得出其中的意義。
????????如果對純文本文件使用這個命令,你甚至可以發現ASCII與字符的對照表,非常有趣,例如上述的范例二,你可以發現到每個英文字S對照到的數字都是123,轉成十進制你就能夠發現那是83。

????????如果你有任何程序語言的書,拿出來對照一下ASCII的對照表,就能夠發現真是正確。

我不想查Google,想要立刻找到password 這幾個字的ASCI對照,該如何通過od來判斷?
????????答:其實可以通過剛剛上一個小節談到的管道命令來處理。如下所示:
【echo password | od -t oCc】
echo可以在屏幕上面顯示任何信息,而這個信息不由屏幕輸出,而是傳給od去繼續處理,就可以得到ASCIl code對照。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43251.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中Comparator函數的用法實例?

在Java中,Comparator接口用于比較兩個對象的順序,常用于集合的排序。自Java 8開始,Comparator接口得到了增強,提供了許多默認方法,使得排序邏輯更加靈活和強大。下面將通過幾個實例來展示Comparator的用法。 示例1&am…

使用PyTorch設計卷積神經網絡(CNN)來處理遙感圖像Indian Pines數據集

目錄 使用PyTorch設計卷積神經網絡(CNN)來處理遙感圖像Indian Pines數據集,以下是設計和實現這些網絡的步驟: 1.數據準備: 1.1 首先,需要加載Indian Pines數據集。 1.2 將數據集轉換為PyTorch張量&#x…

LLM推理引擎怎么選?TensorRT vs vLLM vs LMDeploy vs MLC-LLM

LLM擅長文本生成應用程序,如聊天和代碼完成模型,能夠高度理解和流暢。但是它們的大尺寸也給推理帶來了挑戰。有很多個框架和包可以優化LLM推理和服務,所以在本文中我將整理一些常用的推理引擎并進行比較。 TensorRT-LLM TensorRT-LLM是NV發布…

imazing電腦怎么下載 imazing怎么下載軟件 使用iMazing下載和卸載Apple設備上的應用程序

iMazing官方版是一款管理蘋果設備的軟件,是一款幫助用戶管理 iOS手機的PC端應用程序,能力遠超 iTunes 提供的終極 iOS 設備管理器。在iMazing官方版上與蘋果設備連接后,可以輕松傳輸文件,瀏覽保存信息等,功能比iTunes更…

泛微開發修煉之旅--35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

文章鏈接:35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

vue3中使用 tilwindcss報錯 Unknown at rule @tailwindcss

解決方法: vscode中安裝插件 Tailwind CSS IntelliSense 在項目中的 .vscode中 settings.json添加 "files.associations": {"*.css": "tailwindcss"}

基于YOLOv9的腦腫瘤區域檢測

數據集 腦腫瘤區域檢測,我們直接采用kaggle公開數據集,Br35H 數據中已對醫學圖像中腦腫瘤位置進行標注 數據集我已經按照YOLO格式配置好,數據內容如下 數據集中共包含700張圖像,其中訓練集500張,驗證集200張 模型訓…

Perl語言入門到高級學習

Perl語言介紹 Perl,全稱為Practical Extraction and Report Language,即“實用報表提取語言”,是一種高級、通用、直譯式、動態的編程語言。Perl最初由Larry Wall設計,并于1987年12月18日首次發布。經過多年的不斷發展和更新,Perl已經成為一種功能豐富且應用廣泛的計算機程…

AI繪畫:藝術與科技的交融,創新浪潮與無限可能

在科技日新月異的當下,AI 繪畫作為人工智能領域的一顆璀璨新星,正以驚人的速度在國內嶄露頭角,引發了藝術與技術交融的全新變革。隨著人工智能技術的飛速發展,AI繪畫已成為藝術與科技交融的新寵。2024年,AI繪畫行業在國…

昇思MindSpore學習筆記2-03 LLM原理和實踐--基于MindSpore通過GPT實現情感分類

摘要: 昇思MindSpore AI框架中使用openai-gpt的方法、步驟。 沒調通,存疑。 一、環境配置 %%capture captured_output # 實驗環境已經預裝了mindspore2.2.14,如需更換mindspore版本,可更改下面mindspore的版本號 !pip uninsta…

Autogen智能體實戰-Autogen框架介紹

文章目錄 一,Autogen簡介二,Autogen原理1,Autogen原理圖解2,拆解Autogen是如何完成繪制特斯拉股票趨勢圖的 這篇文章介紹一個開源的Agent框架-微軟的Autogen。 一,Autogen簡介 官網:https://microsoft.github.io/aut…

前端頁面操作防抖函數封裝及應用

1、使用背景 函數防抖其實是作為一名前端同學必備的技能了,之前一直偷懶都借用頁面loading或者按鈕loading來實現。最近在開發微信小程序,過多的loading會帶來不好的體驗,同時在跳轉頁面的時候,不好用loading來防抖。所以就會出現…

【Unity】RPG2D龍城紛爭(九)戰斗系統之角色移動

更新日期:2024年7月8日。 項目源碼:第五章發布(正式開始游戲邏輯的章節) 索引 簡介一、角色戰斗狀態二、角色移動1.角色起飛(移動前)2.角色降落(移動后)3.生成移動路徑4.角色移動三、整合簡介 之前的章節做了這么多準備工作,現在終于要進入我們最為核心的戰斗系統的編…

在idea中查看某個接口的所有實現類圖

一、選中某個接口右鍵 ---> Diagrams ---> show Diagrams,然后就會進入一個新的 tab 頁; 二、然后在出來的圖上選中某個接口右鍵 ---> show Implementations,就會顯示選中接口的所有實現類列表; 三、最后 ctrl A 全部選…

Defender Cloud Apps部署方案

目錄 Defender Cloud Apps是什么? Defender Cloud Apps:保護您的云應用程序免受威脅 1. 全面的云應用發現與評估 2. 實時的用戶活動監控 3. 深度的數據保護 4. 合規性管理與報告 5. 統一的安全管理 Defender Cloud Apps主要功能 1. 可見性和洞察 2. 數據保…

uniapp父頁面調用子頁面 組件方法記錄

文章目錄 導文如何點擊父頁面,觸發子頁面函數先寫一個子頁面的基礎內容父元素 如何點擊父頁面,修改子頁面的值先寫一個子頁面的基礎內容父元素 導文 如何點擊父頁面,觸發子頁面函數? 如何點擊父頁面,修改子頁面的值&am…

英區PayPal賬號3分鐘綁定WISE英鎊的銀行收款賬戶

正文開始,我們先登錄英區PayPal賬號后 有很多銀行給我們選擇,但是沒有WISE的選項,所以我們手動輸入“WISE”,然后如下圖所示點擊“Enter Your Bank Detailds”輸入銀行詳細信息按鈕。 然后輸入我們的WISE英鎊賬戶的收款銀行信息&a…

Advanced Electronic Materials:磁性智能皮膚作為人機界面

近年來,電子可穿戴設備的普及率迅速上升,柔性可穿戴設備因其高生物相容性、功能性、適應性和低成本而在人機界面上引起了極大的關注。柔性磁性智能皮膚是這一快速發展的柔性可穿戴電子領域的一部分,為人類感知發展開辟了一條新的道路。磁感是…

SpringCloud第一篇Docker基礎

文章目錄 一、常見命令二、數據卷三、數據掛載四、自定義鏡像五、網絡 一、常見命令 Docker最常見的命令就是操作鏡像、容器的命令,詳見官方文檔: https://docs.docker.com/ 需求: 在DockerHub中搜索Nginx鏡像,查看鏡像的名稱 …

k8s集群如kubeadm init和kube-flannel.yam問題

查看k8s中角色內容kubectl get all (顯示pod和server以及delment) 刪除應用資源選擇刪除先刪除部署查看部署和pod沒了服務還在,但資源和功能以及刪除,刪除服務kubectl delete 服務名(部署名),get pods 獲取默認空間的容…