詳解Linux高效命令head、tail和cat

来源:https://www.cnblogs.com/Javame/archive/2018/10/09/9758638.html
-Advertisement-
Play Games

Linux中提供了多種命令和程式用於瀏覽文件。無論對於新手、普通用戶、高級用戶、開發人員還是管理員來說,與諸多文件打交道都是一項艱巨的任務。而如何做到高效更稱得上是一門藝術。 今天就讓我們來探討幾個最常使用的命令head、tail和cat,多數人對他們都有所瞭解,但這其中絕大部分人在真正使用的時候恐 ...


Linux中提供了多種命令和程式用於瀏覽文件。無論對於新手、普通用戶、高級用戶、開發人員還是管理員來說,與諸多文件打交道都是一項艱巨的任務。而如何做到高效更稱得上是一門藝術。

今天就讓我們來探討幾個最常使用的命令head、tail和cat,多數人對他們都有所瞭解,但這其中絕大部分人在真正使用的時候恐怕就不知所措了。

1. head

head命令用於獲取一個文件的前10行內容。其基本的語法格式如下:

1 head [options] [file(s)]

如下麵的命令會列印出“/etc/passwd”的前10行內容:

1 2 3 4 5 6 7 8 9 10 11 12 # head /etc/passwd   root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/bin/sh  bin:x:2:2:bin:/bin:/bin/sh  sys:x:3:3:sys:/dev:/bin/sh  sync:x:4:65534:sync:/bin:/bin/sync  games:x:5:60:games:/usr/games:/bin/sh  man:x:6:12:man:/var/cache/man:/bin/sh  lp:x:7:7:lp:/var/spool/lpd:/bin/sh  mail:x:8:8:mail:/var/mail:/bin/sh  news:x:9:9:news:/var/spool/news:/bin/sh

如果一次提供了多個文件,那head命令會分別返回每個文件的前10行內容。如:

1 2 3 4 5 6 7 8 9 10 11 12 13 # head /etc/passwd /etc/shadow   ==> /etc/passwd <== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/shadow <== root:$6$85e1:15740:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: adm:*:15513:0:99999:7::: lp:*:15513:0:99999:7::: sync:*:15513:0:99999:7::: shutdown:*:15513:0:99999:7::: halt:*:15513:0:99999:7::: mail:*:15513:0:99999:7::: uucp:*:15513:0:99999:7:::

如果想查看多於10行的內容,利用“-n”選項並跟上一個整數則可指定返回的行數。下麵的例子將返回“/var/log/yum.log”的前5行內容:

1 2 3 4 5 6 7 # head -n5 /var/log/yum.log   Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686 Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686 Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686 Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

實際上,“-n”都是不需要的。只需使用一個連字元外加一個整數即可達到同樣的效果,註意他們之間不含空格。

1 2 3 4 5 6 7 # head  -5 /var/log/yum.log   Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686 Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686 Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686 Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

head命令還支持使用“-c”選項返回指定位元組長度的內容。例如,下麵的命令將返回指定的文件前45位元組內容:

1 2 3 # head -c45 /var/log/yum.log   Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el

2. tail

tail命令用於獲取一個文本文件的後10行內容。該命令和head很相似,同樣支持傳入“n”選項來指定行數。

語法格式:

1 # tail [options] [filenames]

下麵的命令將返回“access.log”的後10行內容。

1 2 3 4 5 6 7 8 9 10 11 12 # tail access.log   1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg  1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

如果傳入了多個文件,那麼tail命令將會分別顯示出這些文件的後10行內容。

1 2 3 4 5 6 # tail access.log error.log   ==> access.log <== 1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg  1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html ==> error_log <== [Sun Mar 30 03:16:03 2014] [notice] Digest: generating secret for digest authentication ... [Sun Mar 30 03:16:03 2014] [notice] Digest: done [Sun Mar 30 03:16:03 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations

同樣,你可以利用“-n”來獲取最後n行數的內容。

1 2 3 4 5 6 # tail -5 access.log 1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

或者利用“-c”來指定返回的位元組數。

1 2 3 # tail -c5 access.log   ymantec.com:443 - NONE/- text/html

3. cat

cat是使用最為廣泛而通用的工具。它將標準輸入拷貝至標準輸出。在文本文件超出了屏幕範圍時,該命令還支持滾動。

語法格式:

1 # cat [options] [filenames] [-] [filenames]

那最常使用的方法要數讀取一個文件的所有內容。你要做的就是輸入“cat”外帶一個空格併在其後跟上文件名即可。

1 2 3 4 5 6 7 8 9 10 11 # cat /etc/passwd   root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/bin/sh  bin:x:2:2:bin:/bin:/bin/sh  sys:x:3:3:sys:/dev:/bin/sh  sync:x:4:65534:sync:/bin:/bin/sync  games:x:5:60:games:/usr/games:/bin/sh  man:x:6:12:man:/var/cache/man:/bin/sh  lp:x:7:7:lp:/var/spool/lpd:/bin/sh 

cat命令還用來串聯多個文件:

1 2 3 4 5 6 7 8 9 10 11 12 13 # echo 'Hi Tecmint-Team' > 1  # echo 'Keep connected' > 2  # echo 'Share your thought' > 3  # echo 'connect us [email protected]' > 4   # cat 1 2 3 4 > 5   # cat 5   Hi Tecmint-Team  Keep connected  Share your thought  connect us [email protected]

也可用於創建新文件。可以在cat命令後外加一個輸出重定向操作符和新文件的文件名即可。

1 2 3 # cat > tecmint.txt   Tecmint is the only website fully dedicated to Linux.

我們可以定製cat命令的結束符。預設的行為如下:

1 2 3 4 5 6 # cat > test.txt << end   I am Avishek  Here i am writing this post  Hope your are enjoying  end
1 2 3 4 5 # cat test.txt   I am Avishek  Here i am writing this post  Hope your are enjoying

可別低估cat的力量,他還可以用來複制文件!

1 2 3 # cat avi.txt   I am a Programmer by birth and Admin by profession
1 2 3 4 # cat avi.txt > avi1.txt # cat avi1.txt   I am a Programmer by birth and Admin by profession

那與cat相對的命令是什麼呢?它是tac。tac也是Linux中的一個命令。讓我們用一個例子來展示tac,我想這比什麼都強!

我們首先用cat命令來創建一個month文件併在其中輸入各月份的單詞,每個單詞占一行。

1 2 3 4 5 6 7 8 9 10 11 12 13 # cat month January February March April May June July August September October November December

然後來看看tac的效果如何。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 # tac month   December November October September August July June May April March February January

是不是很有趣呢。以上就是今天的全部內容。

____________________________

推薦閱讀:

Logstash+Kafka+ES實現日誌採集系統

大數據開放平臺產品落地方案

支付寶系統架構內部剖析

華為Java編程軍規,每季度代碼驗收標準

大數據Spark與Storm技術選型


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1,安裝Microsoft.AspNetCore.Mvc.Versioning NET Core Mvc中,微軟官方提供了一個可用的Api版本控制庫Microsoft.AspNetCore.Mvc.Versioning。 2,修改Startup類 這裡我們需要在Startup類的ConfigureS ...
  • 本人使用的是18款512g的macbookpro<後續簡稱mbp>,已升級最新mojave系統。 以下是我平時記錄、也是使用最多的快捷鍵,惠存。 1.切換拼音和字母 control+空格<或者直接按caps lock> 2.切換字母的大小寫dd 按住shift+字母-->大寫字母 3.撤銷 撤銷:c ...
  • 1. 輸出重定向 最基本的重定向是將命令的輸出發送到一個文件中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,保存到指定的輸出文件中。 如果文件已存在,重定向操作符會用新的文件數據覆蓋已有文件。這種情況下可以用雙大於號(> ...
  • 在 shell 編程中,常需要處理文本,這裡介紹幾個文本處理命令。 一、grep 命令 grep 命令由來已久,用 grep 命令來查找 文本十分方便。在 POSIX 系統上,grep 可以在兩種正則表達式風格中選擇一種(BRE 和 ERE),或是執行簡單的字元串匹配。傳統上,有三種程式可以用來查找 ...
  • SSH 包含3個組件 (1) ssh 遠程登錄節點 : ssh 用戶名@IP地址 ① 不允許空密碼或錯誤密碼認證登錄 ② 不允許root用戶登錄 ③ 有兩個版本 ssh,ssh2安全性更高 (2) sftp 文件共用連接 , xftp連接就是 sftp實現的 (3)scp 文件拷貝共用 scp命令 ...
  • 輕量桌面Archlinux用戶逃離systemd,擁抱Gentoo的openrc. 鏡像源:官方鏡像源非常慢,曾經一度體驗artix後就放棄了,後來發現了清華和騰訊雲的鏡像,速度非常快,現在又重新安裝了Artix,替代Arch和Manjaro成為了使用的主力發行版。 Artix介紹: "Artix ...
  • Lab1:Booting a PC 概述 本文主要介紹lab1,從內容上分為三部分,part1簡單介紹了彙編語言,物理記憶體地址空間,BIOS。part2介紹了BIOS從磁碟0號扇區讀取boot loader到0000:7c00處,並將cs:ip設置成0000:7c00。boot loader主要做兩 ...
  • 5.1 uname 顯示系統信息 uname -a 可以看到更多的信息,顯示所有 Linux 代表內核名稱 oldboy代表主機名 2.6.32-573.el6.x86_64 內核發行版本號 1 SMP Thu Jul 23 15:44:03 UTC 2015 內核的版本號 cat /etc/red ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...