解压.tar.gz必须用tar -zxvf,因它是tar打包+gzip压缩的复合格式;解压.zip必须用unzip,tar无法识别该格式;-f选项必须紧接文件名且常置末位,-z/-j/-j互斥不可共存。

tar 和 unzip 是 Linux 下解压 .tar.gz 和 .zip 文件最常用的命令,但它们行为差异大、参数易混淆,直接套用容易出错。
解压 .tar.gz 文件:必须用 tar -zxvf,不能只用 gzip
常见错误是看到 .gz 就下意识用 gunzip 或 gzip -d,结果报错:gzip: FileName.tar.gz: not in gzip format —— 实际上这个文件是 tar 打包 + gzip 压缩的复合格式,gzip 只能处理单个文件压缩,无法识别内部 tar 结构。
-
tar -zxvf archive.tar.gz:标准解压,当前目录展开 -
tar -zxvf archive.tar.gz -C /path/to/dir:指定解压到目标目录(-C必须紧接路径,中间不能有空格) -
tar -ztvf archive.tar.gz:仅查看内容不解压(-t代替-x),适合确认包内结构再操作 - 如果漏掉
-z,会提示:tar: Archive is compressed. Use -z option
解压 .zip 文件:必须用 unzip,tar 无效
.zip 是独立归档格式,和 tar 完全无关。用 tar -xvf file.zip 会报错:tar: This does not look like a tar archive,或解出一堆乱码文件。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
unzip archive.zip:默认解压到当前目录 -
unzip -o archive.zip -d /path/to/dir:覆盖已有文件(-o)并指定路径(-d) -
unzip -l archive.zip:只列出内容,不释放磁盘空间 - 若 zip 包含中文路径,可能乱码;可加
-O GBK(部分系统支持)或改用7z x(需安装p7zip)
tar 参数顺序和组合限制很严格
tar 不是按“选项+参数”自由组合的命令,-f 后必须紧跟文件名,且通常要放在最后;-z、-j、-J 互斥,不能同时出现。
- ✅ 正确:
tar -zxvf file.tar.gz、tar -xvf file.tar -C /tmp - ❌ 错误:
tar -xvzf file.tar.gz(虽然某些旧版兼容,但 POSIX 不保证,建议避免) - ❌ 错误:
tar -z -x -v -f file.tar.gz(GNU tar 允许,但 BSD tar 会失败;统一写成连写更稳妥) - ⚠️ 注意:
-C指定的目录必须已存在,tar不会自动创建
权限与路径陷阱:解压后文件属主/权限可能不符合预期
从别人发来的包解压后,常发现脚本没执行权限、配置文件属主是 root、或路径带绝对路径(如 /etc/nginx/conf.d/)导致覆盖系统文件。
- 用
tar -tzf archive.tar.gz | head先看前几行路径,确认是否含/开头的绝对路径 - 解压前加
--strip-components=1可剥离顶层目录(例如包里是project/src/main.c,想直接解到./src/main.c) - 解压后执行
chmod +x *.sh或chown $USER:$USER *很常见,但别无脑递归改权限 - 生产环境解压前,建议先
mkdir extract && cd extract && tar -zxvf ../archive.tar.gz隔离操作
tar -tzf 或 unzip -l 看一眼内容,比重试三遍强得多。










