linux shell 脚本攻略学习14--head命令详解,tail命令详解
当要查看上千行的大文件时,我们可不会用cat命令把整个文件内容给打印出来,相反,我们可能只需要看文件的一小部分地内容(例如文件的前十行和后十行),我们也有可能需要打印出来前n行或后n行,也有可能打印除了前n行或后n行之外的所有行,也有可能需要实时监控log日志的更新,那么怎么实现呢?下面一起来看一下linux下使用率极高的head ,tail两个命令。
一、head命令详解
首先,输入head --help查看帮助信息:
amosli@amosli-pc:~/learn/fd$ head --help
Usage: head [OPTION]... [FILE]...
Print the first lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[-]K print the first K bytes of each file;
with the leading `-', print all but the last
K bytes of each file
-n, --lines=[-]K print the first K lines instead of the first ;
with the leading `-', print all but the last
K lines of each file
-q, --quiet, --silent never print headers giving file names
-v, --verbose always print headers giving file names
--help display this help and exit
--version output version information and exit K may have a multiplier suffix:
b , kB , K , MB *, M *,
GB **, G **, and so on for T, P, E, Z, Y.
head命令的语法格式为:
head [OPTION]... [FILE]...
接下来将在实例中讲解各参数含义及用法:
实例:
1.使用head命令查看文件内容前十行
新建test.txt,共14行.
amosli@amosli-pc:~/learn/fd$ cat -n test.txt
a
b
c
d
e
f
g
h
i
j
k
l
m
n
使用head命令查看前十行,head命令默认显示文件前十行
amosli@amosli-pc:~/learn/fd$ head test.txt
a
b
c
d
e
f
g
h
i
j
2.-n参数,显示test.txt文件的前3行
amosli@amosli-pc:~/learn/fd$ head -n test.txt
a
b
c
英文提示信息:
-n, --lines=[-]K print the first K lines instead of the first ;
3.-n参数显示除了文件最后3行外的所有内容
amosli@amosli-pc:~/learn/fd$ head -n - test.txt
a
b
c
d
e
f
g
h
i
j
k
英文提示信息:
-n, --lines=[-]K print the first K lines instead of the first 10;
with the leading `-', print all but the last
K lines of each file
加上'-',打印所有内容除了最后的K行。
4.-c参数,按文件内容大小来打印,打印前2个字节的内容
amosli@amosli-pc:~/learn/fd$ head -c test.txt
a
2个字节就是一个“a”字母。
英文提示信息:
-c, --bytes=[-]K print the first K bytes of each file;
5.-c参数,打印除了最后2个字节的文件内容
amosli@amosli-pc:~/learn/fd$ head -c - test.txt
a
b
c
d
e
f
g
h
i
j
k
l
m
英文提示信息:
-c, --bytes=[-]K print the first K bytes of each file;
with the leading `-', print all but the last
K bytes of each file
6.-q参数,打印时不显示文件名称
amosli@amosli-pc:~/learn/fd$ head -q test.txt
a
b
c
d
e
f
g
h
i
j
英文提示信息:
-q, --quiet, --silent never print headers giving file names
其实后面跟上--quiet,--silent都是一样的,都不会显示文件名称,和默认打印是一样的效果。
7.-v参数,打印是显示文件名称
amosli@amosli-pc:~/learn/fd$ head -v test.txt
==> test.txt <==
a
b
c
d
e
f
g
h
i
j
英文提示信息:
-v, --verbose always print headers giving file names
其中,用--verbose和-v显示的是一样的效果
amosli@amosli-pc:~/learn/fd$ head --verbose test.txt
==> test.txt <==
a
b
c
d
e
f
g
h
i
j
8.打印多个文件的内容
amosli@amosli-pc:~/learn/fd$ head -n test.txt test2.txt
==> test.txt <==
a
b
c ==> test2.txt <==
c
d
e
二、tail命令详解
tail命令和head 命令非常相似,只不过它是打印文件的尾部内容的,当然也有一些特色之处,下面一起来看看吧。
首先,输入tail --help看一下提示信息
amosli@amosli-pc:~/learn/fd$ tail --help
Usage: tail [OPTION]... [FILE]...
Print the last lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=K output the last K bytes; alternatively, use -c +K
to output bytes starting with the Kth of each file
-f, --follow[={name|descriptor}]
output appended data as the file grows;
-f, --follow, and --follow=descriptor are
equivalent
-F same as --follow=name --retry
-n, --lines=K output the last K lines, instead of the last ;
or use -n +K to output lines starting with the Kth
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default ) iterations
to see if it has been unlinked or renamed
(this is the usual case of rotated log files).
With inotify, this option is rarely useful.
--pid=PID with -f, terminate after process ID, PID dies
-q, --quiet, --silent never output headers giving file names
--retry keep trying to open a file even when it is or
becomes inaccessible; useful when following by
name, i.e., with --follow=name
-s, --sleep-interval=N with -f, sleep for approximately N seconds
(default 1.0) between iterations.
With inotify and --pid=P, check process P at
least once every N seconds.
-v, --verbose always output headers giving file names
--help display this help and exit
--version output version information and exit If the first character of K (the number of bytes or lines) is a `+',
print beginning with the Kth item from the start of each file, otherwise,
print the last K items in the file. K may have a multiplier suffix:
b , kB , K , MB *, M *,
GB **, G **, and so on for T, P, E, Z, Y. With --follow (-f), tail defaults to following the file descriptor, which
means that even if a tail'ed file is renamed, tail will continue to track
its end. This default behavior is not desirable when you really want to
track the actual name of the file, not the file descriptor (e.g., log
rotation). Use --follow=name in that case. That causes tail to track the
named file in a way that accommodates renaming, removal and creation.
语法格式:
tail [OPTION]... [FILE]...
这里由于head和tail实在比较像,这里为了节省篇幅,对相似之处将尽量简洁
实例:
test2.txt,共有12行内容为从c-n
amosli@amosli-pc:~/learn/fd$ cat -n test2.txt
c
d
e
f
g
h
i
j
k
l
m
n
1.-c 参数,根据文件字节进行输出打印
-c, --bytes=K output the last K bytes; alternatively, use -c +K
to output bytes starting with the Kth of each file
打印test2.txt中的最后4 bytes,如下:
amosli@amosli-pc:~/learn/fd$ tail -c test2.txt
m
n
tail -c +4 test2.txt 加上一个‘+’会是什么效果呢?
amosli@amosli-pc:~/learn/fd$ tail -c + test2.txt e
f
g
h
i
j
k
l
m
n
少打印了c d 两个字母,那么 -c +K的意思也就很明了了,即打印文件的所有内容除了前面的K个字节
2、-n参数,根据文件行数进行打印
看一下提示信息:
-n, --lines=K output the last K lines, instead of the last ;
or use -n +K to output lines starting with the Kth
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default ) iterations
to see if it has been unlinked or renamed
(this is the usual case of rotated log files).
With inotify, this option is rarely useful.
--pid=PID with -f, terminate after process ID, PID dies
打印test2.txt最后的3行内容:
amosli@amosli-pc:~/learn/fd$ tail -n test2.txt
l
m
n
从第3行开始输出test2.txt的所有内容:
amosli@amosli-pc:~/learn/fd$ tail -n + test2.txt
e
f
g
h
i
j
k
l
m
n
3.-q参数,-v参数
-q, --quiet, --silent never output headers giving file names
--retry keep trying to open a file even when it is or
becomes inaccessible; useful when following by
name, i.e., with --follow=name
不打印文件名称信息:
amosli@amosli-pc:~/learn/fd$ tail -q test2.txt
e
f
g
h
i
j
k
l
m
n
打印文件名称信息:
amosli@amosli-pc:~/learn/fd$ tail -v test2.txt
==> test2.txt <==
e
f
g
h
i
j
k
l
m
n
4、-f参数
tail 命令的一个很重要的用法是从一个内容不断增加的文件中读取数据。新增加的内容部民被添加到文件的尾部,因此当新内容被写入文件的时候,可以用tail将其显示出来。只是简单的使用tail的话,它会读取文件的最后10行,然后退出,这样就不能做到实时监控,加入-f参数就可以做到实时监控文件的更新内容了。
amosli@amosli-pc:~/learn/fd$ tail -f test2.txt
g
h
i
j
k
l
m
n
o
p
ctrl+alt+t新开一个终端,然后执行下面的命令:
amosli@amosli-pc:~/learn/fd$ echo 'xyz' >> test2.txt
这个时候你就可以看到前一个终端在里出现了‘xyz’
amosli@amosli-pc:~/learn/fd$ tail -f test2.txt
g
h
i
j
k
l
m
n
o
p
xyz
这样就能实时监控项目里的log日志了。
如果想设定一个间隔时间去查看文件的更新应该怎么做呢?请看-s参数
5、-s参数
英文提示信息:
-s, --sleep-interval=N with -f, sleep for approximately N seconds
(default 1.0) between iterations.
With inotify and --pid=P, check process P at
least once every N seconds.
如每隔5秒查看一次test2.txt的内容是否更新
amosli@amosli-pc:~/learn/fd$ tail -f -s test2.txt
j
k
l
m
n
o
p
xyz
默认是1秒更新一次。
6.--pid参数
tail 具有一个很意思的特性,当某个给定进程结束之后,tail也会随之终结.
假如我们正在读取一个不断增长的文件,进程Foo一直在向该文件追加数据,那么tail就会一直执行,直到进程Foo的结束.
$PID=$(pidof Foo)
$tail -f file --pid $PID
#当进程Foo结束之后,tail也会跟着结束
例如用gedit打开test2.txt,不断加入数据,然后在终端里使用tail进行监听,具体为:
amosli@amosli-pc:~/learn/fd$ PID=$(pidof gedit)
amosli@amosli-pc:~/learn/fd$ tail -f -s test2.txt --pid $PID
h
i
j
k
l
m
n
o
p
xyz
然后不断在gedit中追加入‘yyy’后保存,按理说终端里应该会更新,但我的终端不知为何没有更新数据,这里就不帖出来了。
关闭gedit后,tail监控也关闭掉了。
linux shell 脚本攻略学习14--head命令详解,tail命令详解的更多相关文章
- linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解
一.校验与核实 目前最为出名的校验技术是md5sum和sha1sum,它们对文件内容使用相应的算法来生成校验和. 举例: amosli@amosli-pc:~/learn$ md5sum text.t ...
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- linux shell 脚本攻略学习 -- head命令详解, tail命令详解
当要查看上千行的大文件时,我们可不会用cat命令把整个文件内容给打印出来,相反,我们可能只需要看文件的一小部分地内容(例如文件的前十行和后十行),我们也有可能需要打印出来前n行或后n行,也有可能打印除 ...
- Linux Shell脚本攻略学习总结:一
终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...
- linux shell 脚本攻略学习18--grep命令详解
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是unix/linux中用于文本搜索 ...
- linux shell 脚本攻略学习16--wc命令详解,tree命令详解
在文本处理的工作中,统计文件的行数,单词数和字符数非常有用.而对于开发人员本身来说,统计LOC(line of code ,代码行数)是一件重要的工作.linux中有什么命令可以帮助我们做统计呢?没错 ...
- linux shell 脚本攻略学习13--file命令详解,diff命令详解
一.file命令详解 find命令可以通过查看文件内容来找出特定类型的文件,在UNIX/ Linux系统中,文件类型并不是由文件扩展名来决定的(windows中却正是这么做的),file命令的目的是从 ...
- linux shell 脚本攻略学习19--sed命令详解
sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...
- Linux Shell 脚本攻略学习--四
linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...
随机推荐
- 交互软件Axure—高保真原型
在上一篇文章中跟大家分享了Axure7.0 的简介.基本操作和原型图的制作,主要是应用元件库里的原件进行界面元素的搭建,直至完成原型图,在最后给大家展示了高保真原型图效果.而在本次分享中,主要带领大家 ...
- 【Git】Git-add之后-忽略部分文件的方法
Git-add之后-忽略部分文件的方法 SparkKafkaDemo - Streaming Statistics git add 部分_百度搜索 (1 封私信)git 中如何撤销部分修改? - 知乎 ...
- 利用shell脚本批量提交网站404死链给百度
网站运营人员对于死链这个概念一定不陌生,网站的一些数据删除或页面改版等都容易制造死链,影响用户体验不说,过多的死链还会影响到网站的整体权重或排名. 百度站长平台提供的死链提交工具,可将网站存在的死链( ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- 如何把本地代码提交到git(码云)、github代码管理项目上
前提必须安装了git工具 以下命令操作都是通过git bash操作. 将本地代码提交到码云空项目操作: D:\>mkdir inek_winprop D:\>cd inek_winprop ...
- hadoop无法启动
dataNode 无法启动是配置过程中最常见的问题,主要原因是多次format namenode 造成namenode 和datanode的clusterID不一致.建议查看datanode上面的lo ...
- 星文快投v2全新升级
2017-07-31 关于“星文快投”,我的初衷是:简单.稳定.可定制的投标软件.前期版本其实也基本达到这个目标了,系统跑起来后,几天下来也累积过手三十多万个标的了,自动投标也工作正常,作为一个纯粹的 ...
- POI的一些配置
引用:http://apps.hi.baidu.com/share/detail/17249059 POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWork ...
- [Canvas]计时表/秒表
欲观看效果请点击下载,然后用浏览器打开index.html查看. 本作 Github地址:https://github.com/horn19782016/StopWatch 图例: 代码: <! ...
- ThinkPHP3.2多域名 Virtual .htaccess 匹配 RewriteCond %{HTTP_HOST}
<Files *> Options -Indexes </Files> <IfModule mod_headers.c> <FilesMatch " ...