Linux 下查看文件内容的命令
-
cat – 由第一行开始显示整个文件,并将所有内容输出
-
tac – 从最后一行倒序显示整个文件,并将所有内容输出
-
more – 根据窗口大小分页显示输出,可按空格健继续显示下一个画面(按 Q 键退出)。
-
less – 和 more 类似,但其优点可以往前翻页,而且进行可以搜索字符(先按
:再按Q退出)。 -
head – 输出文件的开头部分,默认显示前面 10 行。
-
tail – 输出文件的末尾部分,默认显示最后 10 行。
-
nl – 类似于 cat -n,可以将输出的文件内容自动的加上行号。
-
tailf – 类似于 tail -f,当文件增长时,输出后续添加的数据,适合跟踪日志文件。
各个命令详细使用
准备一个 t.txt 文件
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
4-4-4-4-4-4-4-4-4-4
5-5-5-5-5-5-5-5-5-5
6-6-6-6-6-6-6-6-6-6
7-7-7-7-7-7-7-7-7-7
8-8-8-8-8-8-8-8-8-8
9-9-9-9-9-9-9-9-9-9
10-10-10-10-10-10-10-10-10-10
11-11-11-11-11-11-11-11-11-11
...
...
94-94-94-94-94-94-94-94-94-94
95-95-95-95-95-95-95-95-95-95
96-96-96-96-96-96-96-96-96-96
97-97-97-97-97-97-97-97-97-97
98-98-98-98-98-98-98-98-98-98
99-99-99-99-99-99-99-99-99-99
1. cat
用法:cat [选项] [文件]...
将 [文件] 或标准输入组合输出到标准输出。
-A, --show-all 等价于 -vET
-b, --number-nonblank 非空行输出行编号
-e 等价于 -vE
-E, --show-ends 每行结尾显示 $
-n, --number 所有行输出行编号
-s, --squeeze-blank 多行空行只输出两行
-t 与 -vT 等价
-T, --show-tabs 跳格字符显示为 ^I
-u (被忽略)
-v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
--help 显示此命令帮助信息并退出
--version 输出版本信息并退出
如果 [文件] 缺省,或者 [文件] 为 - ,则读取标准输入。
cat 实例
Example 1
[root@qb test]# cat t.txt # 普通输出
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
...
...
94-94-94-94-94-94-94-94-94-94
95-95-95-95-95-95-95-95-95-95
96-96-96-96-96-96-96-96-96-96
Example 2
[root@qb test]# cat -n t.txt # 开头显示行号
1 0-0-0-0-0-0-0-0-0-0
2 1-1-1-1-1-1-1-1-1-1
3 2-2-2-2-2-2-2-2-2-2
4 3-3-3-3-3-3-3-3-3-3
...
...
98 97-97-97-97-97-97-97-97-97-97
99 98-98-98-98-98-98-98-98-98-98
100 99-99-99-99-99-99-99-99-99-99
Example 3
[root@qb test]# cat -E t.txt # 以 $ 结束
0-0-0-0-0-0-0-0-0-0$
1-1-1-1-1-1-1-1-1-1$
2-2-2-2-2-2-2-2-2-2$
3-3-3-3-3-3-3-3-3-3$
...
...
96-96-96-96-96-96-96-96-96-96$
97-97-97-97-97-97-97-97-97-97$
98-98-98-98-98-98-98-98-98-98$
99-99-99-99-99-99-99-99-99-99$
Example 4
[root@qb test]# cat -s t.txt # 超过 2 行,合并成一行
Example 5
[root@qb test]# cat > a.txt # 从键盘输入内容到文件,回车保存,Ctrl+Z 退出
qinbin
123456
wwqq
^Z
[2]+ Stopped cat > a.txt
[root@qb test]# cat a.txt
qinbin
123456
wwqq
Example 6
[root@qb test]# cat file1.txt
file1 content.
[root@qb test]# cat file2.txt
file2 content.
[root@qb test]# cat file1.txt file2.txt > file.txt # 将两个文件内容输出到一个文件中
[root@qb test]# cat file.txt
file1 content.
file2 content.
Example 7
[root@qb test]# cat file1.txt >> file2.txt #将 file1.txt 内容追加到 file2.txt 内容后
[root@qb test]#
[root@qb test]# cat file2.txt
file2 content.
file1 content.
Example 8
[root@qb test]# echo "Hello echo." > file.txt
[root@qb test]# cat file.txt
Hello echo.
[root@qb test]# cat >>file.txt << EOF # 将指定内容添加到 file.txt 中,输入 EOF 后命令结束。
> I
> am
> BinQin
> EOF
[root@qb test]# cat file.txt
Hello echo.
I
am
BinQin
PS:EOF 可用其他字符代替。
2. tac
用法:tac [选项]... [文件]...
将每个指定文件按行倒过来输出到标准输出。
如果不指定文件,或文件为 “-“,则从标准输入读取数据。
-b, --before 在行前而非行尾添加分隔标志
-r, --regex 将分隔标志当作正则表达式来解析
-s, --separator = 字符串 使用指定字符串代替换行作为分隔标志
--help 显示此帮助信息并退出
--version 显示版本信息并退出
Example 1
[root@qb test]# cat file.txt
Hello echo.
I
am
BinQin
[root@qb test]# rev file.txt
.ohce olleH
I
ma
niQniB
[root@qb test]# tac file.txt
BinQin
am
I
Hello echo.
3. more
用于分页显示文件内容
Options:
-d display help instead of ring bell
-f 使 more 计数 逻辑行, 而不是 屏幕行 (就是说, 长行 不会 断到 下一行)
-l more 会将 ^L (form feed) 当做 特殊字符, 遇到 这个字符 就会 暂停. -l 选项 可以 阻止 这种特性
-p 不卷屏, 而是 清除 整个屏幕, 然后 显示 文本
-c 不卷屏, 而是 从 每一屏的 顶部 开始 显示 文本, 每 显示完 一行, 就 清除 这一行的 剩余部分
-u 防止下划线
-s 把 重复的空 行压缩成 一个 空行
-NUM 这个选项指定屏幕的行数 (以整数表示)
+NUM 从行号 num 开始显示
-V 输出版本信息并退出
more 的交互命令
h or ? 帮助: 显示 这些 命令 的 摘要
<space> 显示 接下来的 k 行文本,缺省值 是 当前的屏幕大小
z 显示 接下来的 k 行文本,缺省值 是 当前的屏幕大小, 参数 成为 新的缺省值
<return> 显示 接下来的 k 行文本,缺省值 是 1. 参数 成为 新的缺省值
d or ctrl-D 卷屏 k 行. 缺省值 是 当前的 卷屏大小,初始化为 11,参数 成为 新的缺省值
q or Q or <interrupt> 退出
s 向前跳过 k 行文本,缺省值 是 1
f 向前跳过 k 屏文本,缺省值 是 1
b or ctrl-B 向后跳回 k 屏文本,缺省值 是 1。跳到 上一次 搜索开始 的地方。
= 显示当前行号
/<regular expression> 搜索 第 k 个 符合 正则表达式的 文本串,缺省值 是 1
n 搜索 最后 第 k 个 符合 正则表达式的 文本串,缺省值 是 1
v 启动 /usr/bin/vi,指向 当前行
ctrl-L 刷新屏幕
:n 跳到 后面 第 k 个 文件,缺省值 是 1
:p 跳到 前面 第 k 个 文件,缺省值 是 1
:f 显示 当前文件名 和 行号
. 重复上次命令
more 实例
Example 1
[root@qb test]# more t.txt # 查看文件
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
...
...
51-51-51-51-51-51-51-51-51-51
52-52-52-52-52-52-52-52-52-52
--More--(51%)
Example 2
[root@qb test]# netstat -tpnl | more # Linux 网络状态信息,分页显示
4. less
more 命令的增强版,可以通过翻页键查看上下页的内容
Options:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似 more 命令的百分比
-N 显示每行的行号
-o <文件名> 将 less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将 “tab” 键显示为规定的数字空格
less 的交互命令
按键功能如下:
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出 less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
1) 向前搜索
/ : 使用一个模式进行搜索,并定位到下一个匹配的文本
n : 向前查找下一个匹配的文本
N : 向后查找前一个匹配的文本
2) 向后搜索
? : 使用模式进行搜索,并定位到前一个匹配的文本
n : 向后查找下一个匹配的文本
N : 向前查找前一个匹配的文本
2 全屏导航
ctrl + F :向前移动一屏
ctrl + B :向后移动一屏
ctrl + D :向前移动半屏
ctrl + U :向后移动半屏
3 单行导航
j : 向前移动一行
k : 向后移动一行
4 其它导航
G : 移动到最后一行
g : 移动到第一行
q / ZZ : 退出 less 命令
5 编辑文件
v : 进入编辑模式,使用配置的编辑器编辑当前文件
6 标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。
ma : 使用 a 标记文本的当前位置
'a : 导航到标记 a 处
7 浏览多个文件
方式一,传递多个参数给 less,就能浏览多个文件。
less file1 file2
方式二,正在浏览一个文件时,使用 :e 打开另一个文件。
less file1
:e file2
当打开多个文件时,使用如下命令在多个文件之间切换
:n - 浏览下一个文件
:p - 浏览前一个文件
less 实例
Example 1
[root@qb test]# less t.txt # 查看文件
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
...
...
51-51-51-51-51-51-51-51-51-51
52-52-52-52-52-52-52-52-52-52
--More--(51%)
Example 2
[root@qb test]# netstat -tpnl | less # Linux 网络状态信息,分页显示
5. head
用法:head [选项]... [文件]...
将每个指定文件的头 10 行显示到标准输出。
如果指定了多于一个文件,在每一段输出前会给出文件名作为文件头。
如果不指定文件,或者文件为 “-“,则从标准输入读取数据。
-c, --bytes=[-]K 显示每个文件的前 K 字节内容;
如果附加 "-" 参数,则除了每个文件的最后 K 字节数据外
显示剩余全部内容
-n, --lines=[-]K 显示每个文件的前 K 行内容;
如果附加 "-" 参数,则除了每个文件的最后 K 行外显示
剩余全部内容
-q, --quiet, --silent 不显示包含给定文件名的文件头
-v, --verbose 总是显示包含给定文件名的文件头
--help 显示此帮助信息并退出
--version 显示版本信息并退出
head 实例
Example 1
[root@qb test]# head t.txt # 默认显示前 10 行
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
4-4-4-4-4-4-4-4-4-4
5-5-5-5-5-5-5-5-5-5
6-6-6-6-6-6-6-6-6-6
7-7-7-7-7-7-7-7-7-7
8-8-8-8-8-8-8-8-8-8
9-9-9-9-9-9-9-9-9-9
Example 2
[root@qb test]# head -6 t.txt # 显示前 6 行
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
4-4-4-4-4-4-4-4-4-4
5-5-5-5-5-5-5-5-5-5
Example 3
[root@qb test]# head -q -n k f1.txt f2.txt f3.txt # 显示多个文件前 k 行,并且不显示文件名的文件头
Example 4
[root@qb test]# head -n -k t.txt # 除最后 k 行外,显示剩余全部内容
[root@localhost ~]# head -n 5 t.txt # 显示前 5 行
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
4-4-4-4-4-4-4-4-4-4
[root@localhost ~]# head -n -5 t.txt # 显示从 0 到倒数第 5 行
0-0-0-0-0-0-0-0-0-0
1-1-1-1-1-1-1-1-1-1
2-2-2-2-2-2-2-2-2-2
3-3-3-3-3-3-3-3-3-3
4-4-4-4-4-4-4-4-4-4
...
...
90-90-90-90-90-90-90-90-90-90
91-91-91-91-91-91-91-91-91-91
92-92-92-92-92-92-92-92-92-92
93-93-93-93-93-93-93-93-93-93
94-94-94-94-94-94-94-94-94-94
6. tail
与 head 相反,输出文件的末尾部分
-c, --bytes=K 输出最后 K 个字节
-f, --follow[={name|descriptor}]
当文件增长时, 输出后续添加的数据
-n, --lines=K 输出最后 K 行, 而非默认的最后 10 行
--pid=PID 与 - f 合用, 表示在进程 ID,PID 死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=N 与 - f 合用, 表示在每次反复的间隔休眠 S 秒
-v, --verbose 总是输出给出文件名的首部
--help 显示帮助信息后退出
--version 输出版本信息后退出
tail 实例
Example 1
[root@qb test]# tail t.txt # 默认显示最后 10 行
90-90-90-90-90-90-90-90-90-90
91-91-91-91-91-91-91-91-91-91
92-92-92-92-92-92-92-92-92-92
93-93-93-93-93-93-93-93-93-93
94-94-94-94-94-94-94-94-94-94
95-95-95-95-95-95-95-95-95-95
96-96-96-96-96-96-96-96-96-96
97-97-97-97-97-97-97-97-97-97
98-98-98-98-98-98-98-98-98-98
99-99-99-99-99-99-99-99-99-99
Example 2
[root@qb test]# tail -n 2 t.txt # 显示最后 2 行
98-98-98-98-98-98-98-98-98-98
99-99-99-99-99-99-99-99-99-99
Example 3
[root@qb test]# tail -n +k t.txt # 从开头第 k 行处开始输出
Example 4
[root@qb test]# tail -q -n k f1.txt f2.txt f3.txt # 显示多文件最后 k 行,并且不显示文件名的文件头
Example 5
# 参数 - f 使 tail 不停地去读最新的内容,可以用来实时跟踪日志,Ctrl+C 退出。
[root@qb test]# tail -f /var/log/messages
7. nl
nl 命令在 linux 系统中用来计算文件中行号。
nl 可以将输出的文件内容自动的加上行号。其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。
用法:nl [选项]... [文件]...
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号 (类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号 (默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
-p :在逻辑定界符处不重新开始计算。
nl 实例
Example 1
[root@qb test]# nl t.txt # 打印 t.txt
1 0-0-0-0-0-0-0-0-0-0
2 1-1-1-1-1-1-1-1-1-1
3 2-2-2-2-2-2-2-2-2-2
4 3-3-3-3-3-3-3-3-3-3
5 4-4-4-4-4-4-4-4-4-4
...
...
97 96-96-96-96-96-96-96-96-96-96
98 97-97-97-97-97-97-97-97-97-97
99 98-98-98-98-98-98-98-98-98-98
100 99-99-99-99-99-99-99-99-99-99
Example 2
[root@qb test]# nl -b a log2012.log #打印 t.txt,空行也加上行号
Example 3
[root@qb test]# nl -b a -n rz t.txt # 在行号前面自动补上 0,统一输出格式
000001 0-0-0-0-0-0-0-0-0-0
000002 1-1-1-1-1-1-1-1-1-1
000003 2-2-2-2-2-2-2-2-2-2
000004 3-3-3-3-3-3-3-3-3-3
000005 4-4-4-4-4-4-4-4-4-4
...
...
000097 96-96-96-96-96-96-96-96-96-96
000098 97-97-97-97-97-97-97-97-97-97
000099 98-98-98-98-98-98-98-98-98-98
000100 99-99-99-99-99-99-99-99-99-99
8. tailf
tailf 命令几乎等同于 tail -f
当文件改名之后它也能继续跟踪,特别适合于日志文件的跟踪。
与 tail -f 不同的是,如果文件不增长,它不会去访问磁盘文件。
tailf 特别适合那些便携机上跟踪日志文件,因为它能省电,因为减少了磁盘访问嘛。
tailf 命令不是个脚本,而是一个用 C 代码编译后的二进制执行文件,某些 Linux 安装之后没有这个命令
tailf 实例
Example 1
[root@qb logs]# tailf -n 3 /usr/local/nginx/logs/access.log # 显示 access.log 的最后 3 行
结语
呼 ~~ 终于结尾了。