Linux中提供了多种命令和程序用于浏览文件。无论对于新手、普通用户、高级用户、开发人员还是管理员来说,与诸多文件打交道都是一项艰巨的任务。而如何做到高效更称得上是一门艺术。

今天就让我们来探讨几个最常使用的命令head、tail和cat,多数人对他们都有所了解,但这其中绝大部分人在真正使用的时候恐怕就不知所措了。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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技术选型

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄