7z 是什么
7z 是 7-Zip 的命令行归档工具,Linux 上由 p7zip / p7zip-full 提供,命令有 7z、7za、7zr 三个变体。它的核心优势是 LZMA / LZMA2 带来的高压缩率,以及原生支持 AES-256 加密并可连文件名一起加密(-mhe=on)。除了自家的 7z 格式,它也能创建与解开 zip、gzip、tar、xz 等常见格式,因此常被用来处理 Windows 用 GBK 文件名打包、Linux 解压时出现乱码的 zip 文件。
基本信息
| 适用平台 | Linux(p7zip-full)、Windows(7-Zip)、macOS(p7zip 等移植版) |
|---|---|
| 语法 | 7z <a|x|l|t|e|d|u> [选项] 归档名 [文件或目录] |
| 主要动作 | a 添加 l 列表 t 测试 x 带路径解压 e 平铺解压 |
| 加密 | -p 指定口令,-mhe=on 隐藏文件名(仅 7z 格式) |
| 分卷 | -v1g 表示每卷 1GB |
| 格式支持 | Debian / Ubuntu 装 p7zip-full 才有完整格式支持 |
典型使用场景
- 打包加密归档后交付或上传,AES-256 比 zip 的传统加密强度高得多。
- 在 Linux 上解开 Windows 传来的中文 zip,避免文件名乱码或报非法字符。
- 把大目录压缩后做异地备份,用 -v 分卷切到实际介质容量再逐一搬运。
- 归档前用 7z t 测试压缩包完整性,确认能解开再删除原始数据。
- 重压缩日志、镜像等大文件以便传输,前提是内容本身可被压缩。
常用写法
常用写法
7z a backup.7z /data/app # 把目录打包成 7z
7z a -p -mhe=on secret.7z private/ # 口令加密并隐藏文件名
7z a -mx=9 -v1g parts.7z big.iso # 最高压缩等级 + 每卷 1GB 分卷
7z l backup.7z | head -20 # 只列内容,不解压
7z l -slt backup.7z | grep -i method # 查看压缩与加密方法
7z t backup.7z # 测试归档是否损坏
7z x backup.7z -o/restore/ # 按原目录结构解压到指定路径
ls -lh backup.7z # 确认归档大小与预期一致动作逐项读法
| 动作或选项 | 作用 | 使用要点 |
|---|---|---|
| a | 创建或追加归档 | 同名归档已存在时是追加,不是覆盖 |
| x | 按原路径解压 | 保留目录结构,恢复备份用这个 |
| e | 平铺解压 | 文件全倒进当前目录,易覆盖同名文件 |
| l 与 -slt | 列表与详细列表 | -slt 能看到加密方法,确认是否 AES-256 |
| -v1g | 创建分卷 | 解压时只需指定第一片 |
| -mx=9 | 最高压缩等级 | CPU 代价明显,先用小样试压缩比 |
-p 后不跟口令时 7z 会交互提示输入,这是更安全的用法:把口令直接写在命令行里会进入 shell 历史、进程列表和审计日志,泄露后归档等同于明文。自动化场景用受限权限的口令文件或交互输入,并在密码库中留档。
7z、7za、7zr 能力不同:7zr 只认 7z 格式,7za 是精简独立版,发行版不装 full 包时可能缺 zip 支持。脚本统一用 7z 并在目标机确认包已安装,能避免在别的机器上突然报 unsupported method。
-mhe=on 只对 7z 格式有效,开启后连目录结构与文件名都不可见,代价是没法在不给口令的情况下列出内容,交接给他人时要提前说明口令传递方式。