zoukankan      html  css  js  c++  java
  • 详解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 tecmint.com@gmail.com' > 4
     
    # cat 1 2 3 4 > 5
     
    # cat 5
     
    Hi Tecmint-Team 
    Keep connected 
    Share your thought 
    connect us tecmint.com@gmail.com

    也可用于创建新文件。可以在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技术选型

  • 相关阅读:
    Systemd 入门教程:实战篇
    Systemd 入门教程:命令篇
    awk详解
    yum Multilib version problems
    Oracle ORA 12541 报错解决过程
    创建表空间
    大文件按行分离脚本
    heartbeat安装与配置
    Keepalived安装配置
    速查表的名称和建表语句
  • 原文地址:https://www.cnblogs.com/Javame/p/9758638.html
Copyright © 2011-2022 走看看