发布于 5年前

Linux cat和zcat命令可能比你意识到的更有用

cat

Cat 是一个相当简单的工具,用于连接文件并将文件写入屏幕,称为标准输出(stdout)。您可以在任何Linux发行版或其他Unix操作环境(例如FreeBSD或Solaris)中使用它。cat 的最简单用法 是显示文件的内容。这是一个名为 hello.world 的文件示例:

 $ ls
hello.world 
$ cat hello.world 
Hello World !

$

我使用cat命令的最常用方法是查看配置文件,例如/ etc目录中的配置文件。该命令将显示一个文件,而不用担心损坏它。如果我使用ViNano等编辑器打开关键配置文件,我可能会无意中对文件进行不必要的更改。cat命令不是一个编辑器,因此不构成进行更改文件内容的风险。

如果我需要查看更长的文件,我可以使用带有more命令的管道:

$ cat <somelongfile> | more

Cat可以同时显示多个文件。如果我们希望看到两个文件 hello.worldgoodbye.world 可以包括文件名作为命令行参数:

$ cat hello.world goodbye.world 
Hello World !

Good Bye World!

$

Cat 还可以在输出时显示文件的行编号。有两个命令可以执行此操作,如帮助文档中所示:

-b, --number-nonblank    number nonempty output lines, overrides -n
-n, --number             number all output lines

如果我将-b命令与hello.world文件一起使用,输出将如下编号:

$ cat -b hello.world 
     1   Hello World !

$

在上面的示例中,有一个空行。我们可以使用-n参数确定出现此空行的原因:

$ cat -n hello.world 
     1   Hello World !
     2
$

现在我们看到有一个额外的空行。这两个参数在最终输出而不是文件内容上运行,因此如果我们对两个文件使用-n选项,编号将按以下方式计算行:

$ cat -n hello.world goodbye.world 
     1   Hello World !
     2   
     3   Good Bye World!
     4
$

另一个有用的选项是-s for squeeze-blank。该参数告诉cat将重复的空行输出减少到一行。这在查看具有大量空行的文件时很有用,因为它有效地适应了屏幕上的更多文本。假设我有一个文件,其中有三行由几个空行隔开,例如在本例中, greetings.world

$ cat greetings.world
Greetings World!

Take me to your Leader!

We Come in Peace!
$

使用-s选项可以节省屏幕空间:

$ cat -s greetings.world
Greetings World!

Take me to your Leader!

We Come in Peace!
$

Cat通常用于将一个文件的内容复制到另一个文件。你可能会问,“为什么不用cp?” 这是我如何创建一个名为both.files的新文件,其中包含hellogoodbye文件的内容:

$ cat hello.world goodbye.world > both.files
$ cat both.files
Hello World!

Good Bye World!

$

zcat

cat命令的另一个变体称为zcat。此命令能够显示已使用Gzip压缩的文件,而无需使用gunzip命令解压缩文件。顺便说一下,这也保留了磁盘空间,这就是压缩文件的全部原因!

该用zcat命令是有点更令人兴奋的,因为它可以为系统管理员查看系统日志文件,节省大量的时间。

我们在哪里可以找到压缩日志文件?在大多数Linux系统上查看/var/log。在我的系统上,/var/log包含几个文件,例如syslog.2.gzsyslog.3.gz。这些文件是日志管理系统的结果,它可以旋转和压缩日志文件以节省磁盘空间并防止日志增长到无法管理的文件大小。没有zcat,我必须先使用gunzip命令解压缩这些文件,然后才能查看它们。很幸运,我可以使用zcat

$ cd /var/log
$ ls *.gz
syslog.2.gz  syslog.3.gz
$
$ zcat syslog.2.gz |more
Jan 30 00:02:26 workstation systemd[1850]: Starting GNOME Terminal Server...
Jan 30 00:02:26 workstation dbus-daemon[1920]: [session uid=2112 pid=1920] Successful
ly activated service 'org.gnome.Terminal'
Jan 30 00:02:26 workstation systemd[1850]: Started GNOME Terminal Server.
Jan 30 00:02:26 workstation org.gnome.Terminal.desktop[2059]: # watch_fast: "/org/gno
me/terminal/legacy/" (establishing: 0, active: 0)
Jan 30 00:02:26 workstation org.gnome.Terminal.desktop[2059]: # unwatch_fast: "/org/g
nome/terminal/legacy/" (active: 0, establishing: 1)
Jan 30 00:02:26 workstation org.gnome.Terminal.desktop[2059]: # watch_established: "/
org/gnome/terminal/legacy/" (establishing: 0)
--More--

如果我们想要不间断地审查它们,我们也可以将这两个文件传递给zcat。由于日志轮换的工作原理,您需要以相反的顺序传递文件名以保留日志内容的时间顺序:

$ ls -l *.gz
-rw-r----- 1 syslog adm  196383 Jan 31 00:00 syslog.2.gz
-rw-r----- 1 syslog adm 1137176 Jan 30 00:00 syslog.3.gz
$ zcat syslog.3.gz syslog.2.gz |more

cat命令看似简单却是非常有用。我建议您查看catzcat命令的手册页(man cat),以了解有关如何使用它的更多信息。您还可以使用--help参数快速概述命令行参数。

©2020 edoou.com   京ICP备16001874号-3