【Ubuntu】zcat之所有选项
azurekiln 发布于 阅读:60 Linux操作系统基础
那么今天要和大家讲的是zcat这个程序,首先zcat的名字可以拆解为z
和cat
,在Linux中,cat
命令用于查看文件内容并将其输出到“标准输出”(通常是你的终端),而z
这里代表使用gzip压缩算法。所以,zcat
的核心功能就是读取一个通常以.gz
结尾的被gzip压缩的文件,我们需要查看压缩文件的内容都传统方法需要经过"解压->查看->删除"三个步骤,而zcat能够在内存中实时解压,然后像cat一样,将解压后的原始内容输出到终端中,而不会在硬盘上生成解压后的文件。
那么现在我们通过help选项 (1/9) 来列出zcat的帮助文档,我们输入
zcat --help
按回车,我们可以看到options这里除了最后两个选项外共有7个选项。
我们先来看最后一个选项,这是一个打印当前zcat程序的版本号信息的功能 (2/9)。
我们输入
zcat --version
或者
zcat -V
然后回车运行,可以看到当前版本号为 1.6。然后大家可以看到括号里写着gzip,记住这个gzip,待会要考。
接下来我们看到第一个选项 force; read compressed data even from a terminal
意思就是强制执行。一个特殊用途是,如果压缩数据不是来自文件,而是直接通过终端输入(这种情况很少见),zcat 默认会拒绝并警告,使用 -f 可以强制它处理。对普通用户来说,这个选项几乎用不到。
第二个选项 list compressed file contents
它不会显示文件的内容,而是列出压缩包内的信息,包括:压缩前/后的尺寸、压缩率、以及原始文件名。
第三个选项 suppress all warnings
意思为抑制所有警告,也叫安静模式。如果添加该选项,那么在执行过程中遇到的任何警告都不会在终端上呈现给你看。
第四个选项 operate recursively on directories
意思为在目录上递归操作,如果你给 zcat 传递一个目录,它会进入这个目录以及所有子目录,寻找并处理所有它认识的压缩文件。
第五个选项为 use suffix on compressed files
意思为指定压缩文件的后缀名。默认情况下,zcat 和 gzip 认识 .gz、.z、.Z 等。如果你有一些奇特的压缩文件,比如 file.myzip,你可以用 -S .myzip 来告诉 zcat 这也是它应该处理的文件。
第六个选项 test compressed file integrity
意思为测试压缩文件的完整性,添加该选项,它会默默地在后台解压文件,检查文件是否损坏或不完整。如果文件是好的,它不会有任何输出;如果文件损坏,它会报错。这对于检查下载的压缩包是否完好非常有用。
第七个选项 verbose mode
意思为详细模式。通常会与 -l 或 -t 配合使用,会显示更详细的信息,比如文件名和压缩率。
首先我们先来创建一个3行的a.log
文件,我们输入
echo "line1" > a.log
echo "line2" >> a.log
echo "line3" >> a.log
然后我们通过cat
命令来确定a.log
的内容是否准确无误,我们输入
cat a.log
然后回车。
然后我们使用 gzip
的命令将a.log
压缩,我们输入
gzip a.log
回车后,生成a.log.gz
的同时a.log
会被删除。我们输入
ls
然后回车确认,可以看到a.log.gz
确实被生成,a.log
确实被删除。
接下来我们使用zcat
来读取,我们输入
zcat a.log.gz
可以看到我们刚才填入a.log
的内容被完整打印出来。
然后我们在原来的命令添加 -t
选项 (3/9)。
zcat -t a.log.gz
可以看到没有打印任何内容,说明我们的a.log.gz
并没有损坏
然后我们尝试使用 -l
选项 (4/9) 列出 a.log.gz
。
zcat -l a.log.gz
可以看到文件大小、压缩率等信息已经被打印了出来。
然后我们在原来的基础上添加 -v
选项 (5/9)。
zcat -l -v a.log.gz
可以看到这里还有压缩方法、时间,crc等文件信息,展示给我们的文件信息更详细了。
现在我们来创建一个目录,我们输入
mkdir testdir
创建完成后我们可以通过输入
ls
回车判断文件夹是否已经被创建。
创建完成后,我们通过cp命令复制几个a.log.gz
的副本b.log.gz
、b.ttt
、c.log.gz
、d.log.gz
。
我们依次输入
cp a.log.gz b.log.gz
cp a.log.gz testdir/b.ttt
cp a.log.gz testdir/b.log.gz
cp a.log.gz testdir/c.log.gz
cp a.log.gz testdir/d.log.gz
复制完成后我们可以继续输入
ls
ls testdir
列出所有文件确认已经复制成功。
接下来我们使用-r
选项 (6/9) 将testdir传给zcat,并使用-S
选项 (7/9) 指定ttt后缀的文件也是它应该处理的类型,我们输入
zcat -S ttt -r testdir
然后回车,可以看到它把目录中所有压缩文件包括改了后缀的压缩文件的内容全部显示出来。
接下来我们去掉后缀名的指定选项
zcat -r testdir
可以看到它还是把目录中所有压缩文件包括改了后缀的压缩文件的内容全部显示出来。那这是为什么呢,还记得我们刚才说到的gzip吗,zcat其实可以理解为是在gzip做起来的,它不再单纯依靠文件后缀名判断文件是否为它可以处理的压缩文件。
我们再将修改了后缀的压缩文件直接传给
zcat testdir/b.ttt
可以看到文件的内容仍旧可以正常被读取。
作为对比 ,我们以同样的文件,传给gzip进行解压操作。
gzip -d testdir/b.ttt
可以看到这里报了个错,未知的后缀名,这个时候我们在原来的基础上添加 -S ttt,跟gzip说后缀为ttt的文件也是它应该处理的压缩文件。
gzip -S ttt -d testdir/b.ttt
再次回车可以看到已经不报错了,文件也被正常解压。所以-S这个选项对zcat来说就是名存实亡的,毕竟它都能智能识别了,对吧?
还有一个 -f 强制执行,也是一样的道理,在zcat
中已经做到了智能识别,所以并不会动不动就报错无法进一步执行,不需要我们自行强制执行,所以 -f
在zcat
中也是一个名存实亡的选项了。(8)
接下来我们输入
echo "line xxx" >> b.log.gz
将这行内容追加到这个b.log.gz压缩文件的后面,这样就会导致正常的压缩文件出现了垃圾数据。
接着我们执行
zcat b.log.gz
可以看到这里已经出现了警告。
我们在原来的基础上添加 -q 选项。(9)
zcat -q b.log.gz
再次回车,可以看到警告已经消失了。
那么以上就是zcat这个程序中9个选项的介绍讲解。