Linux 下查看文件内容的命令

2018/09/04 Linux

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 行

结语

呼 ~~ 终于结尾了。

Search

    Table of Contents