Linux中有几个命令可以查看文件的内容,而不需要调用其他文本编辑器(参见第10章)。本
节将演示一些可以帮助查看文件内容的命令。

3.8.1 查看文件类型

在显示文件内容之前,应该先了解一下文件的类型。如果打开了一个二进制文件,你会在屏
幕上看到各种乱码,甚至会把你的终端仿真器挂起。
file命令是一个随手可得的便捷工具。它能够探测文件的内部,并决定文件是什么类型的:

$ file my_file
my_file: ASCII text
$

上面例子中的文件是一个text(文本)文件。file命令不仅能确定文件中包含的文本信息,
还能确定该文本文件的字符编码,ASCII。
下面例子中的文件就是一个目录。因此,以后可以使用file命令作为另一种区分目录的方法:

$ file New_Dir
New_Dir: directory
$

第三个file命令的例子中展示了一个类型为符号链接的文件。注意,file命令甚至能够告
诉你它链接到了哪个文件上:

$ file sl_data_file
sl_data_file: symbolic link to ‘data_file’
$

下面的例子展示了file命令对脚本文件的返回结果。尽管这个文件是ASCII text,但因为它
是一个脚本文件,所以可以在系统上执行(运行):

$ file my_script
my_script: Bourne-Again shell script, ASCII text executable
$

最后一个例子是二进制可执行程序。file命令能够确定该程序编译时所面向的平台以及需
要何种类型的库。如果你有从未知源处获得的二进制文件,这会是个非常有用的特性:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.24,
[…]
$

现在你已经学会了如何快速查看文件类型,接着就可以开始学习文件的显示与浏览了。

3.8.2 查看整个文件

如果手头有一个很大的文本文件,你可能会想看看里面是什么内容。在Linux上有3个不同的
命令可以完成这个任务。

1. cat命令

cat命令是显示文本文件中所有数据的得力工具。

$ cat test1
hello
This is a test file.
That we’ll use to test the cat command.
$

没什么特别的,就是文本文件的内容而已。这里还有一些可以和cat命令一起用的参数,可
能对你有所帮助。
-n参数会给所有的行加上行号。

$ cat -n test1
1 hello
2
3 This is a test file.
4
5
6 That we’ll use to test the cat command.
$

这个功能在检查脚本时很有用。如果只想给有文本的行加上行号,可以用-b参数。

$ cat -b test1
1 hello
2 This is a test file.
3 That we’ll use to test the cat command.
$

最后,如果不想让制表符出现,可以用-T参数。

$ cat -T test1
hello
This is a test file.
That we’ll use to^Itest the cat command.
$

-T参数会用^I字符组合去替换文中的所有制表符。
对大型文件来说,cat命令有点繁琐。文件的文本会在显示器上一晃而过。好在有一个简单
办法可以解决这个问题。

2. more命令

cat命令的主要缺陷是:一旦运行,你就无法控制后面的操作。为了解决这个问题,开发人
员编写了more命令。more命令会显示文本文件的内容,但会在显示每页数据之后停下来。我们
输入命令more /etc/bash.bashrc 生成如图3-3中所显示的内容。
image.png
注意图3-3中屏幕的底部,more命令显示了一个标签,其表明你仍然在more程序中以及你现
在在这个文本文件中的位置。这是more命令的提示符。

more命令是分页工具。在本章前面的内容里,当使用man命令时,分页工具会显示所选的bash
手册页面。和在手册页中前后移动一样,你可以通过按空格键或回车键以逐行向前的方式浏览文
本文件。浏览完之后,按q键退出。

more命令只支持文本文件中的基本移动。如果要更多高级功能,可以试试less命令。

3. less命令

从名字上看,它并不像more命令那样高级。但是,less命令的命名实际上是个文字游戏(从
俗语“less is more”得来),它实为more命令的升级版。它提供了一些极为实用的特性,能够实
现在文本文件中前后翻动,而且还有一些高级搜索功能。

less命令的操作和more命令基本一样,一次显示一屏的文件文本。除了支持和more命令相
同的命令集,它还包括更多的选项。


窍门 要想查看less命令所有的可用选项,可以输入man less浏览对应的手册页。也可以这样查看more命令选项的参考资料。


其中一组特性就是less命令能够识别上下键以及上下翻页键(假设你的终端配置正确)。在
查看文件内容时,这给了你全面的控制权。

3.8.3 查看部分文件

通常你要查看的数据要么在文本文件的开头,要么在文本文件的末尾。如果这些数据是在大
型文件的起始部分,那你就得等cat或more加载完整个文件之后才能看到。如果数据是在文件的
末尾(比如日志文件),那可能需要翻过成千上万行的文本才能到最后的内容。好在Linux有解决
这两个问题的专用命令。

1. tail命令

tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末
尾10行。
出于演示的目的,我们创建了一个包含20行文本的文本文件。使用cat命令显示该文件的全
部内容如下:

$ cat log_file
line1
line2
line3
line4
line5
Hello World - line 6
line7
line8
line9
line10
line11
Hello again - line 12
line13
line14
line15
Sweet - line16
line17
line18
line19
Last line - line20
$

现在你已经看到了整个文件,可以再看看使用tail命令浏览文件最后10行的效果:

$ tail log_file
line11
Hello again - line 12
line13 line14
line15
Sweet - line16
line17
line18
line19
Last line - line20
$

可以向tail命令中加入-n参数来修改所显示的行数。在下面的例子中,通过加入-n 2使
tail命令只显示文件的最后两行:

$ tail -n 2 log_file
line19
Last line - line20
$

-f参数是tail命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。
tail命令会保持活动状态,并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙
方式。

2. head命令

head命令,顾名思义,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行
的文本:

$ head log_file
line1
line2
line3
line4
line5
Hello World - line 6
line7
line8
line9
line10
$

类似于tail命令,它也支持-n参数,这样就可以指定想要显示的内容了。这两个命令都允
许你在破折号后面输入想要显示的行数:

$ head -5 log_file
line1
line2
line3
line4
line5
$

文件的开头通常不会改变,因此head命令并像tail命令那样支持-f参数特性。head命令是
一种查看文件起始部分内容的便捷方法。