Linux 文件内容查看

一次性输出

在 Linux 中,可以使用 cattac 命令一次性将文本内容打印出来,即将标准输入的数据复制到标准输出。

cat 是 Catenate 的缩写,从第一行开始显示文件内容。另外一个重要的应用是组合多个文件。如果没有指定文件或文件为 -,则从标准输入读取。

例如,要查看 c.log 文件的内容,并使用 -b 参数来显示行号(不计空行,计空行使用 -n):

[root@101c7 audit]$ cat -b c.log 
     1 type=CRED_DISP msg=audit(1631178061.322:415)
     2 type=USER_END msg=audit(1631178061
     3 type=USER_START msg=audit(163
     4 type=CRED_DISP msg=audi

使用 -A 参数可以将特殊字符打印出来,例如 [Tab] 显示为 ^I[Enter] 换行显示为 $

[root@101c7 audit]$ cat -nA c.log 
     1 type=CRED_DISP msg=audit(1631178061.322:415)
     2 ^Itype=USER_END msg=audit(1631178061$
     3   type=USER_START msg=audit(163$
     4 type=CRED_DISP msg=audi$
     5 $

cat 命令的一个常见用途是将多个文件内容组合到一个文件中:

[root@server1 ~]$ cat ftp.sh ca.srl >> newfile

使用 tac 命令可以倒序输出文件内容:

[root@101c7 audit]$ tac c.log 
type=CRED_DISP msg=audi
  type=USER_START msg=audit(163
       type=USER_END msg=audit(1631178061
type=CRED_DISP msg=audit(1631178061.322:415)

如果要将每行的内容反转输出,可以使用 rev 命令:

[root@server3 ~]$ rev ftp.sh 
gro.miv.ptf nepo
bup dc
txt.tahWdniFoTerehW teg
eyb

使用 nl 命令可以自定义行号位置打印文件内容,例如给行号加零填充:

[root@101c7 audit]$ nl -n rz c.log 
000001 type=CRED_DISP msg=audit(1631178061.322:415)
000002  type=USER_END msg=audit(1631178061
000003   type=USER_START msg=audit(163
000004 type=CRED_DISP msg=audi

阅读文件

使用 more 命令可以查看文件内容并逐页翻阅:

[root@101c7 ~]$ more nohup.out
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--More--(23%)

当文件内容超过一页时,会提示 --More--,此时可以使用以下按键进行操作:

按键 功能
空格(space) 向下翻一页
回车(enter) 向下滚动一行
/字符串 向下搜索关键字,定位到那一页
:f 显示文件名以及当前行数
q 退出
b 往回翻页,对管道无用
v 调用 vi 编辑器

使用less命令查看文件时,可以使用方向键进行导航:

[root@101c7 ~]$ less nohup.out
Vim: Warning: Output is not to a terminal
Vim: Warning: Output is not to a terminal
:

进入查看页面后,可以使用以下键盘按键:

按键 功能
PageUp/PageDown 向上/向下翻页。
方向键上/方向键下 向上/向下滚动一行。
/字符串&?字符串 向下&向上查询字符串。
n/N 向下/向上重复查询。
v 启动 vi 编辑器编辑当前文件。
q 离开。
h 帮助文件。

可以通过设置环境变量 PAGER 来指定希望使用的分页程序。

数据选取

head 命令可以设定从文件开头开始选取多少行的内容。例如,要查看 nohup.out 文件的前 2 行内容:

[root@101c7 ~]$ head -2 nohup.out
Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal

tail 命令则从文件后面开始取多少行的内容并显示出来。例如,要选取查看 list.txt 文件最后 1 行的内容:

[root@101c7 ~]$ tail -1 list.txt
/tmp/etc/skel/.bashrc

可以加上 -f 参数来持续打印文件内容,这在查看日志文件时非常有用:

[root@101c7 ~]$ tail -f nohup.out 
Vim: Error reading input, exiting...sers package to sandbox the tcsd daemon:/devv
Vim: Finished.

这将持续打印 nohup.out 文件的内容,直到手动停止命令。

二进制文件查看

使用普通的文本查看命令查看二进制文件会显示乱码,可以使用 od 命令来查阅二进制文件。

例如,以默认八进制方式查看 passwd 文件:

[root@101c7 audit]$ od /bin/passwd | head -n 10
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000003 000076 000001 000000 031110 000000 000000 000000
0000040 000100 000000 000000 000000 062620 000000 000000 000000
0000060 000000 000000 000100 000070 000011 000100 000035 000034
0000100 000006 000000 000005 000000 000100 000000 000000 000000

-t 参数指定显示格式,例如将十六位进制与 ASCII 字符同时显示:

[root@101c7 audit]$ od -t xCc c.log
0000000  74  79  70  65  3d  43  52  45  44  5f  44  49  53  50  20  6d
          t   y   p   e   =   C   R   E   D   _   D   I   S   P       m
0000020  73  67  3d  61  75  64  69  74  28  31  36  33  31  31  37  38
          s   g   =   a   u   d   i   t   (   1   6   3   1   1   7   8
0000040  30  36  31  2e  33  32  32  3a  34  31  35  29  3a  20  70  69
          0   6   1   .   3   2   2   :   4   1   5   )   :       p   i

也可以使用 hexdump 命令来查看二进制文件,唯一区别是 hexdump 默认情况下以十六进制显示数据:

[root@server3 ~]$ hexdump -C /usr/bin/scsi_temperature
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 0a 23 23 23  |#!/bin/bash..###|
00000010  23 23 23 23 23 23 23 23  23 23 23 23 23 23 23 23  |################|
*
00000050  0a 23 0a 23 20 20 43 68  65 63 6b 20 74 68 65 20  |.#.#  Check the |
00000060  74 65 6d 70 65 72 61 74  75 72 65 20 6f 66 20 74  |temperature of t|
00000070  68 65 20 67 69 76 65 6e  20 53 43 53 49 20 64 65  |he given SCSI de|

上面二进制数据显示方式叫规范格式(Canonical Format)。每行最左边是十六进制表示的偏移,中间 16 个字节是实际数据,右边为相应 ASCII 字符。