一,什么是zcat
https://man.he.net/man1/zcat
gzip、gunzip、zcat - 用于压缩或解压文件
三个命令功能对比:
| | | |
|---|
| | | |
| | | |
| | 将解压后的内容输出到标准输出(屏幕),不生成新文件,保留原压缩文件 | 快速预览日志、配合管道命令 grep/less 使用 |
说明:
Gzip使用Lempel-Ziv编码(LZ77)来减小指定文件的大小。在可能的情况下,每个文件都会被替换为扩展名为.gz的文件,同时保持相同的所有权模式、访问时间和修改时间。(对于MSDOS、OS/2 FAT、Windows NT FAT和Atari,默认扩展名为z。)如果未指定文件,或者文件名是“-”,则将标准输入压缩到标准输出。Gzip只会尝试压缩常规文件。特别是,它会忽略符号链接。
如果压缩文件名对于其文件系统而言过长,gzip会进行截断。gzip会尝试仅截断文件名中超过3个字符的部分。(部分以点号分隔。)如果名称仅由小部分组成,则截断最长的部分。例如,如果文件名限制为14个字符,则gzip.msdos.exe会被压缩为gzi.msd.exe.gz。在文件名长度没有限制的系统上,名称不会被截断。
默认情况下,gzip会在压缩文件中保留原始文件名和时间戳。使用-N选项解压文件时,这些信息会被用到。当压缩文件名被截断或在文件传输后时间戳未被保留时,这一点非常有用。
使用gzip -d、gunzip或zcat可以将压缩文件恢复为其原始形式。如果压缩文件中保存的原始名称不适合其文件系统,则会根据原始名称构造一个新名称,使其合法。
gunzip 在其命令行中接受一个文件列表,并替换每个文件名以 .gz、-gz、.z、-z 或 _z 结尾(忽略大小写)且开头为正确幻数(magic number)的文件,将其替换为不带原始扩展名的未压缩文件。gunzip 还识别特殊扩展名 .tgz 和 .taz,分别作为 .tar.gz 和 .tar.Z 的简写形式。压缩时,如果需要,gzip 会使用 .tgz 扩展名,而不是用 .tar 扩展名截断文件。
gunzip目前可以解压由gzip、zip、compress、compress -H或pack创建的文件。输入格式的检测是自动完成的。
在使用前两种格式时,gunzip会检查32位的循环冗余校验(CRC)。对于pack和gunzip格式,会检查未压缩的长度。标准compress格式的设计并不支持一致性检查。然而,gunzip有时能够检测出错误的.Z文件。如果你在解压.Z文件时遇到错误,不要仅仅因为标准解压程序没有报错就认为.Z文件是正确的。这通常意味着标准解压程序没有检查其输入,而是愉快地生成了垃圾输出。SCO compress -H格式(lzh压缩方法)不包含CRC,但也允许进行一些一致性检查。
只有当zip创建的文件只有一个使用“deflation”方法压缩的成员时,才能使用gzip对其进行解压。此功能仅用于帮助将tar.zip文件转换为tar.gz格式。
要解压只有一个成员的zip文件,可以使用类似gunzip <foo.zip或gunzip -S .zip foo.zip的命令。要解压包含多个成员的zip文件,请使用unzip而不是gunzip。
zcat与gunzip -c相同。(在某些系统中,zcat可能被安装为gzcat,以保留原始的压缩链接。)zcat可以在命令行上解压文件列表,也可以解压其标准输入,并将解压后的数据写入标准输出。无论文件是否带有.gz后缀,只要具有正确的幻数,zcat都会对其进行解压。
Gzip采用与zip和PKZIP相同的Lempel-Ziv算法。压缩效果取决于输入文件的大小和常见子字符串的分布情况。通常,源代码或英语等文本的压缩率可达60-70%。其压缩效果通常远优于LZW(用于compress)、霍夫曼编码(用于pack)或自适应霍夫曼编码(compact)所实现的压缩效果。
即使压缩后的文件比原始文件略大,也总是会进行压缩。最坏的情况是,gzip文件头会占用几个字节,每32K块会额外占用5个字节,对于大文件来说,扩展率为0.015%。请注意,实际使用的磁盘块数量几乎从不增加。在压缩或解压时,gzip会保留文件的模式、所有权和时间戳。
二,帮助信息
[root@localhost ~]# zcat -h用法: gzip [选项]... [文件]...压缩或解压缩文件(默认情况下,就地压缩文件)。长选项的强制参数对于短选项也是强制的。-c, --stdout 写入标准输出,保持原始文件不变-d, --decompress 解压缩-f, --force 强制覆盖输出文件并压缩链接-h, --help 显示此帮助信息-l, --list 列出压缩文件的内容-L, --license 显示软件许可证-n, --no-name 不保存或恢复原始名称和时间戳-N, --name 保存或恢复原始名称和时间戳-q, --quiet 抑制所有警告-r, --recursive 递归操作目录-S, --suffix=SUF 在压缩文件上使用后缀 SUF-t, --test 测试压缩文件的完整性-v, --verbose 详细模式-V, --version 显示版本号-1, --fast 压缩速度更快-9, --best 压缩效果更好 --rsyncable 生成适用于 rsync 的归档文件如果没有指定文件,或者文件为 -,则读取标准输入。错误报告请发送至 bug-gzip@gnu.org。
三,例子
准备测试环境,准备一些文件
[root@localhost gz]# cat test.txt这是在测试xcatm命令[root@localhost gz]# gzip *[root@localhost gz]# lscheckv1.sh.gz checkv2.sh.gz checkv3.sh.gz compare_results.sh.gz testgz.txt.gz test.sh.gz
1:查看单个压缩文件内容,最基础的用法,直接将压缩文件的内容输出到终端屏幕
[root@localhost gz]# zcat testgz.txt.gz 这是在测试xcatm命令
2:配合分页命令查看大文件,如果压缩文件很大,直接输出会刷屏。可以结合 less 或 more 进行分页查看
[root@localhost gz]# zcat testgz.txt.gz | less #会跳进去类似vi界面[root@localhost gz]# [root@localhost gz]# zcat testgz.txt.gz | more 这是在测试xcatm命令
3.在压缩文件中搜索关键词,无需解压即可使用 grep 搜索内容,这是运维中非常高效的操作。
[root@localhost gz]# zcat testgz.txt.gz | grep "测试"这是在测试xcatm命令
4.查看多个压缩文件的内容,zcat 支持同时指定多个文件,它会按顺序将内容连接起来输出
[root@localhost gz]# zcat testgz.txt.gz testgz2.txt.gz 这是在测试xcatm命令测试文件2
5. 查看通配符匹配的所有压缩文件,例如查看当前目录下所有以 .txt.gz 结尾的文件内容
[root@localhost gz]# zcat testgz*测试文件2这是在测试xcatm命令
6. 查看压缩文件的属性信息(不查看具体内容),使用 -l (list) 选项可以显示压缩前大小、压缩后大小、压缩比率等信息,而不会输出文件实际内容
[root@localhost gz]# zcat -l testgz.txt.gz compressed uncompressed ratio uncompressed_name 61 27 -18.5% testgz.txt
7. 测试压缩文件的完整性
使用 -t (test) 选项检查文件是否损坏,没有任何输出表示文件正常,若有错误则会报错。
[root@localhost gz]# zcat -t testgz.txt.gz [root@localhost gz]#
8. 强制查看非标准后缀或未压缩文件
[root@localhost gz]# zcat -f testgz.txt这是在测试xcatm命令[root@localhost gz]# zcat testgz.txt这是在测试xcatm命令
情况二:混合查看压缩和未压缩文件如果你不确定文件是否被压缩,或者想在一个命令中同时查看普通文本文件和压缩文件,可以使用 -f。对于未压缩文件,zcat -f 的行为类似于 cat。
[root@localhost gz]# zcat -f testgz.txt testgz.txt.gz这是在测试xcatm命令这是在测试xcatm命令
9. 将解压内容重定向保存为新文件
虽然 zcat 本身不生成文件,但你可以通过重定向符号 > 将输出保存为解压后的文件。
[root@localhost gz]# zcat testgz.txt.gz > new_filename.txt[root@localhost gz]# cat new_filename.txt 这是在测试xcatm命令
10. 合并多个压缩文件为一个新压缩文件
可以先解压多个文件,然后通过管道重新压缩成一个新文件。
[root@localhost gz]# zcat testgz.txt.gz test.sh.gz | gzip > merged.gz[root@localhost gz]# zcat merged.gz 这是在测试xcatm命令#!/bin/bash# ================= 配置区域 =================PASSWORD="123456" # SSH 登录密码
四,补充
高级用法
多个压缩文件可以被连接在一起。在这种情况下,gunzip 将一次性提取所有成员。例如:
gzip -c file1 > foo.gzgzip -c file2 >> foo.gz
然后
如果 .gz 文件中的某个成员损坏,其他成员仍然可以恢复(如果移除损坏的成员)。然而,通过一次性压缩所有成员可以获得更好的压缩率:
cat file1 file2 | gzip > foo.gz
比
gzip -c file1 file2 > foo.gz
压缩效果更好。
如果你想重新压缩连接的文件以获得更好的压缩率,请执行:
gzip -cd old.gz | gzip > new.gz
如果压缩文件由多个成员组成,
--list 选项报告的未压缩大小和 CRC 仅适用于最后一个成员。如果你需要所有成员的未压缩大小,可以使用:
如果你希望创建一个包含多个成员的单一归档文件,以便以后可以独立提取成员,请使用如 tar 或 zip 这样的归档工具。GNU tar 支持
-z 选项以透明地调用 gzip。gzip 被设计为 tar 的补充,而不是替代品。环境变量
已过时的环境变量 GZIP 可以保存一组 gzip 的默认选项。这些选项首先被解释,并且可以被显式的命令行参数覆盖。由于这在使用脚本时可能导致问题,因此该功能仅支持那些不太可能造成太大危害的选项,并且 gzip 会在使用时发出警告。此功能将在未来的 gzip 版本中移除。
你可以使用别名或脚本来代替。例如,如果 gzip 位于 /usr/bin 目录中,你可以将 $HOME/bin 添加到你的 PATH 前面,并创建可执行脚本 $HOME/bin/gzip,包含以下内容:
#! /bin/shexport PATH=/usr/binexec gzip -9 "$@"
znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1)
gzip 文件格式在 P. Deutsch, GZIP file format specification version 4.3, https://www.ietf.org/rfc/rfc1952.txt, Internet RFC 1952 (1996年5月) 中指定。zip deflate 格式在 P. Deutsch, DEFLATE Compressed Data Format Specification version 1.3, https://www.ietf.org/rfc/rfc1951.txt, Internet RFC 1951 (1996年5月) 中指定。
诊断信息
退出状态通常为 0;如果发生错误,退出状态为 1。如果发生警告,退出状态为 2。
用法: gzip [-cdfhklLnNrtvV19] [-S suffix] [file ...]在命令行上指定了无效选项。file: not in gzip format指定给 gunzip 的文件未被压缩。file: Corrupt input. Use zcat to recover some data.压缩文件已损坏。可以使用以下命令恢复失败点之前的数据:zcat file > recoverfile: compressed with xx bits, can only handle yy bits文件由一个能处理比本机解压缩代码更多位的程序压缩(使用 LZW)。使用 gzip 重新压缩文件,它压缩效果更好且占用更少内存。file: already has .gz suffix -- unchanged假定文件已经被压缩。重命名文件并重试。file already exists; do you wish to overwrite (y or n)?如果希望替换输出文件,回复 "y";否则回复 "n"。gunzip: corrupt input检测到 SIGSEGV 违规,通常意味着输入文件已损坏。xx.x% Percentage of the input saved by compression.(仅与 -v 和 -l 相关。)-- not a regular file or directory: ignored当输入文件不是常规文件或目录时(例如符号链接、套接字、FIFO、设备文件),它保持不变。-- has xx other links: unchanged输入文件有链接;它保持不变。参见 ln(1) 获取更多信息。使用 -f 标志强制压缩多链接文件。
五,总结
zcat 命令也是为了方便查看gz压缩文件的命令,以上就是今天全部内容。
最后的最后(Last but not least),欢迎交流:
关注公众号留言,或者在下方直接留言: