Linux 压缩归档与其他命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑧族:压缩归档与其他,约 34 个命令,也是本主题的收尾篇。先分清两个概念:归档(archive)是把一堆文件打包成一个,不改变大小;压缩(compress)才是真正减小体积。tar 只做前者,配合 gzip 等工具才同时完成两件事。其他命令族见 Linux 命令速查主题。
一、tar 打包归档
tar(tape archive,磁带归档)最初是为磁带备份设计的,如今是 Linux 上打包的绝对标准。它的参数不需要写横杠(tar czf 与 tar -czf 等价),主参数只有三个字母要记:c 创建、x 解包、t 查看。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| tar | 打包与解包,可组合各种压缩算法 | tar -czf a.tar.gz dir/(打包并用 gzip 压缩);tar -xzf a.tar.gz(解压);tar -tzf a.tar.gz(先查看内容再解压);tar -xjf a.tar.bz2(bzip2);tar -xJf a.tar.xz(xz);tar -xzf a.tar.gz -C /target/(解压到指定目录);tar -czf - dir/ | ssh host 'cd /dst && tar -xzf -'(流式远程复制);tar -czf a.tgz --exclude='*.log' dir/(排除文件) |
tar 选项速记:
c创建、x解包、t查看、v显示过程、f指定文件名、zgzip、jbzip2、Jxz。f必须放在最后且紧跟文件名(tar -czf file.tar.gz不能写成tar -cfz)。解压前先tar -tzf看一眼内容是个好习惯——有些包解压后会散落一堆文件在当前目录,有些则带一层目录,提前知道能避免把目录弄乱。
二、单文件压缩
选压缩算法的本质是在压缩率和速度之间做权衡。日志归档这类"写完基本不读"的场景看重压缩率;频繁解压、构建流水线这类场景看重速度。
| 命令 | 作用 | 常用示例 |
|---|---|---|
gzip / gunzip | 最通用的压缩,速度快、兼容性最好 | gzip file(→ file.gz,默认删除原文件);gzip -k file(保留原文件);gzip -d file.gz(解压);gzip -9(最大压缩比);gzip -1(最快) |
bzip2 / bunzip2 | 压缩率高于 gzip,但更慢,现在较少用 | bzip2 file;bzip2 -d file.bz2;bzip2 -k |
xz / unxz | 压缩率最高,适合归档分发,但压缩很慢很耗内存 | xz file;xz -d file.xz;xz -k;xz -9(最大压缩);xz -T0(多线程) |
| zstd | 现代压缩算法,压缩率接近 xz 但速度快一个量级,解压极快,正在成为新标准 | zstd file(→ file.zst);zstd -d file.zst;zstd -19(高压缩比);zstd --long=27(大文件优化);zstd -T0(多线程) |
lz4 | 极速压缩,压缩率一般,主打"几乎不影响性能",常用于实时压缩与内存转储 | lz4 file;lz4 -d file.lz4;lz4 -9(高压缩档) |
pigz / pbzip2 | gzip / bzip2 的并行实现,多核机器上比原版快数倍,输出格式完全兼容 | pigz file;pigz -k -9 bigfile;pbzip2 -k bigfile;pigz -p 8(指定 8 线程) |
zcat / zless / zgrep | 不解压直接查看/搜索 gzip 内容,查历史日志必备 | zcat file.gz;zgrep error *.gz(在压缩日志里搜);zless file.gz(分页看) |
bzcat / xzcat / zstdcat | 查看 bz2/xz/zst 内容,用法同 zcat | bzcat file.bz2;xzcat file.xz;zstdcat file.zst |
实践建议:日常打包分发优先 zstd(又快又小),追求最大兼容用 gzip,归档冷数据用 xz。gzipped 日志不用先解压——
zgrep、zcat直接就能搜,处理轮转后的历史日志时省掉大量解压步骤。
三、zip 与跨平台格式
与 Windows 或其他系统交换文件时,zip 是最保险的选择(双方都原生支持)。Linux 原生的 tar.gz 在 Windows 上需要额外工具才能打开。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| zip | 创建 zip 压缩包,可含多个文件与目录 | zip -r archive.zip dir/(递归);zip archive.zip f1 f2;zip -P pass archive.zip f(加密,不安全,见提示);zip -e(交互式设密码) |
| unzip | 解压 zip | unzip archive.zip;unzip -l archive.zip(先看列表);unzip archive.zip -d out/(指定目录);unzip -O gbk win.zip(指定编码,解决中文文件名乱码) |
| 7z | 7-Zip 命令行版,支持几乎所有格式,压缩率高 | 7z a archive.7z dir/(压缩);7z x archive.7z(解压,保留目录结构);7z e archive.7z(解压到当前目录,不含结构);7z l archive.7z(列表);7z x -pPASS archive.7z(带密码) |
rar / unrar | RAR 格式(rar 压缩需商业授权,unrar 解压免费) | unrar x archive.rar;unrar l archive.rar(列表);rar a archive.rar dir/ |
cpio | 传统归档工具,RPM 包内部与 initramfs 用它 | find dir | cpio -ov > archive.cpio(打包);cpio -idv < archive.cpio(解包);cpio -t < archive.cpio(查看) |
pax | POSIX 标准的归档工具,兼顾 tar 与 cpio 格式 | pax -wf archive.tar dir/(写);pax -rf archive.tar(读);pax -f archive.tar(列出) |
zip 的
-P加密是弱加密,很容易被破解,别用它保护真正敏感的数据;需要加密请用 7z(AES-256)或gpg(见 安全加密与审计)。另外 Windows 生成的 zip 里中文文件名常用 GBK 编码,Linux 下解压会乱码,加-O gbk即可正确还原。
四、校验与编码
校验和(checksum,把任意长度的数据映射成固定长度摘要的算法)用于验证文件完整性——下载大文件(镜像、安装包)后核对官方公布的哈希值,能确认文件没在传输中损坏、也没被篡改。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| md5sum | 计算 MD5 校验和(已不安全,仅用于非安全场景的完整性检查) | md5sum file;md5sum -c checksum.txt(批量校验);md5sum * > MD5SUMS |
sha256sum | 计算 SHA-256 校验和,目前的安全标准,下载校验首选 | sha256sum file;sha256sum -c SHA256SUMS(校验);sha256sum -c --quiet(只报失败项) |
sha512sum | SHA-512 校验和,摘要更长 | sha512sum file;sha512sum -c sums.txt |
| base64 | Base64 编解码,把二进制转成可打印字符以便嵌入文本 | echo -n "hello" | base64;echo aGVsbG8= | base64 -d(解码);base64 -w 0 file(不换行输出) |
xxd | 十六进制转储,可反向还原,分析/编辑二进制文件 | xxd file;xxd -r(还原);xxd -p file(纯 hex 串);xxd -l 64 file(只看前 64 字节) |
od | 八进制或任意进制转储,查看原始字节 | od -A x -t x1z file(hex + ASCII,最常用);od -c file(字符形式,能看见 \r \n) |
校验失败几乎总是意味着文件损坏或下载不完整,重新下载即可。注意
md5sum -c要求校验文件里的路径与实际文件位置匹配,通常要在同一个目录下执行。判断两个文件是否相同,cmp 比算哈希快得多——它找到第一处不同就返回,而哈希必须读完整个文件,详见 文本处理。
五、Shell 辅助
这几个命令不属于任何功能族,但用得极频繁——它们是命令行的"日常工具"。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| echo | 输出字符串 | echo hello;echo -e "a\nb"(解析转义);echo -n hello(不换行);echo $PATH(变量);echo "text" > file(写文件) |
printf | 格式化输出,比 echo 可控(不同系统 echo 行为不一致) | printf "%s-%d\n" abc 3;printf "%05d" 42 → 00042;printf "%.2f\n" 3.14159 |
| seq | 生成数字序列,循环里常用 | seq 1 10;seq -w 1 100(等宽补零:001, 002);seq 0 2 10(步长 2);seq -s, 1 5(逗号分隔) |
| alias | 定义命令别名,把长命令缩短 | alias ll='ls -alF';alias(列出全部);unalias ll(取消);写进 ~/.bashrc 永久生效 |
| history | 命令历史 | history;history | grep ssh;!123(重跑第 123 条);!!(重跑上一条);Ctrl-R(反向搜索,最实用) |
shuf | 随机打乱行顺序或随机抽样 | shuf file(打乱);shuf -n 5 file(随机取 5 行);shuf -i 1-100 -n 1(随机取 1~100 的一个数) |
| yes | 持续重复输出字符串,用于自动应答 | yes | rm -i *(自动确认);yes str(重复输出 str);yes > /dev/null(压测 CPU) |
bc | 命令行计算器,支持任意精度 | echo '3.14*2' | bc;echo "scale=4; 10/3" | bc(保留 4 位小数);echo 'obase=16; 255' | bc(转十六进制) |
clear | 清屏 | clear(或 Ctrl-L) |
man | 查看手册页,最权威的本地文档 | man ls;man -k keyword(按关键字搜索手册,等价 apropos);man 2 open(指定章节,2 是系统调用);man -f cmd(一句话说明) |
info | 查看 GNU info 文档,比 man 更详细、带超链接 | info coreutils;info tar |
whatis | 一句话说明某个命令是干什么的 | whatis ls;whatis -w "ls*"(通配) |
Ctrl-R是命令行效率的分水岭:按一下再输入片段,就能反向搜索历史命令,比翻 history 快得多。另外man页分章节:1 用户命令、2 系统调用、3 库函数、5 文件格式、8 管理命令。查open时要man 2 open(系统调用)而不是man 1 open。不想读长篇手册就用tldr,见 现代命令行工具。
六、重定向与管道技巧
Shell 的重定向控制数据往哪去,管道(|)把上一个命令的输出接成下一个命令的输入。这两者组合,是把简单命令拼成复杂功能的粘合剂。
| 写法 | 作用 |
|---|---|
cmd > out.log | 标准输出写入文件(覆盖) |
cmd >> out.log | 标准输出追加到文件 |
cmd 2> err.log | 只把错误输出写入文件 |
cmd > out.log 2>&1 | 标准输出与错误都写入同一文件(最常用) |
cmd &> out.log | 上一条的简写形式(Bash 支持) |
cmd 2>/dev/null | 丢弃错误输出,常用于屏蔽无关报错 |
cmd1 | cmd2 | 把 cmd1 的输出作为 cmd2 的输入 |
cmd1 | tee out.log | 既输出到屏幕又写文件,调试长管道时用来看中间结果 |
nohup cmd > out.log 2>&1 & | 后台常驻且输出不丢,断开终端也不停 |
2>&1的顺序不能写反(cmd 2>&1 > file是错的):它表示"把文件描述符 2(stderr)指向 1(stdout)当前指向的地方",所以必须先把 stdout 重定向到文件,再让 stderr 跟过去。tee 在调试长管道时特别有用——插在管道中间,既能让流程继续,又能看到那一步的数据长什么样。
一句话总结
压缩归档与其他速查:打包用 tar -czf、解压 tar -xzf(先用 -tzf 看内容,用 -C 指定目录),压缩优先 zstd(快且小)、兼容用 gzip、极限压缩用 xz,跨平台交换用 zip/7z,校验用 sha256sum,查历史日志用 zgrep(不用先解压),日常辅助靠 Ctrl-R/alias/printf——34 个命令补齐日常操作的最后一公里。