Tar 命令完全使用手册从基础到进阶tartape archive是类 Unix 系统中最核心的文件打包/压缩/解压工具支持创建归档文件、解压归档、查看归档内容等操作几乎所有 Linux 发行版都默认预装。本手册从基础到进阶覆盖tar命令的所有核心用法新手也能快速上手。一、核心概念打包将多个文件/目录合并为一个.tar格式的归档文件仅合并不压缩。压缩在打包基础上结合gzip/bzip2/xz等算法压缩生成.tar.gz/.tar.bz2/.tar.xz等压缩包。解压将归档/压缩包还原为原始文件/目录。二、基础参数必记tar命令的参数分短参数单横线如-x和长参数双横线如--extract核心参数如下短参数长参数功能说明-c--create创建新的归档文件打包模式-x--extract解压归档文件解压模式-t--list查看归档文件中的内容不解压-f--file指定归档/压缩包文件名必须紧跟文件名-v--verbose显示操作过程如打包/解压的文件列表-z--gzip用 gzip 压缩/解压对应.tar.gz格式-j--bzip2用 bzip2 压缩/解压对应.tar.bz2格式-J--xz用 xz 压缩/解压对应.tar.xz格式-C--directory指定解压的目标路径解压专用-p--preserve-permissions保留文件的原始权限解压/打包-P--absolute-names保留绝对路径默认会去掉根目录/-r--append向已存在的归档文件中追加文件-u--update仅追加比归档中更新的文件-d--diff对比归档文件与本地文件的差异--exclude-打包时排除指定文件/目录关键提醒-f必须是参数中最后一个后面直接跟文件名如tar -zcvf test.tar.gz ./files不能写成tar -zcfv test.tar.gz ./files。三、常用场景实战场景1创建归档/压缩包打包压缩1.1 仅打包不压缩生成 .tar# 打包单个文件 tar -cvf file.tar /home/user/file.txt # 打包多个文件/目录 tar -cvf docs.tar /home/user/documents /home/user/pictures # 说明-c创建 -v显示过程 -f指定文件名1.2 打包并压缩生成 .tar.gz/.tar.bz2/.tar.xz压缩格式命令示例压缩效率速度.tar.gztar -zcvf test.tar.gz /home/user/data中等较快.tar.bz2tar -jcvf test.tar.bz2 /home/user/data较高较慢.tar.xztar -Jcvf test.tar.xz /home/user/data最高最慢1.3 打包时排除指定文件/目录# 打包时排除单个目录 tar -zcvf app.tar.gz /opt/app --exclude/opt/app/logs # 打包时排除多个文件用多个 --exclude tar -zcvf project.tar.gz ./project --exclude./project/node_modules --exclude./project/.git1.4 保留绝对路径打包默认情况下tar会去掉路径前的/避免解压时覆盖系统文件加-P可保留tar -zcvPf root.tar.gz /etc /usr/local # 保留 /etc、/usr/local 的绝对路径场景2解压归档/压缩包2.1 基础解压解压到当前目录压缩格式解压命令.tartar -xvf test.tar.tar.gztar -zxvf test.tar.gz.tar.bz2tar -jxvf test.tar.bz2.tar.xztar -Jxvf test.tar.xz简化用法现代tar可自动识别压缩格式无需指定-z/-j/-J直接tar -xvf 压缩包即可推荐新手使用tar -xvf test.tar.gz # 自动识别 gzip 格式并解压2.2 解压到指定目录核心-C 参数# 解压到 /opt/target 目录需确保目录已存在 mkdir -p /opt/target # -p 确保目录不存在时创建存在则不报错 tar -zxvf test.tar.gz -C /opt/target # 简化版自动识别格式 tar -xvf test.tar.bz2 -C /home/user/docs2.3 解压归档中的指定文件/目录无需解压整个包只提取需要的文件# 先查看归档内容确定要提取的文件路径 tar -tvf test.tar.gz # 提取单个文件 tar -zxvf test.tar.gz home/user/documents/readme.txt # 注意路径去掉根/对应打包时的相对路径 # 提取单个目录 tar -zxvf test.tar.gz -C /tmp home/user/pictures # 提取 pictures 目录到 /tmp2.4 保留文件原始权限解压默认解压会继承当前用户权限加-p可保留文件原始权限适合系统配置文件sudo tar -zxvpf etc.tar.gz -C / # 解压系统配置文件保留原始权限需 sudo场景3查看归档内容不解压# 查看 .tar.gz 内容显示详细信息权限、大小、时间 tar -ztvf test.tar.gz # 查看 .tar 内容简化版仅显示文件名 tar -tf test.tar # 过滤查看特定文件结合 grep tar -ztvf test.tar.gz | grep .log # 只看归档中的 .log 文件场景4进阶操作4.1 向归档文件追加文件仅对未压缩的.tar文件有效压缩包无法追加# 先创建基础归档 tar -cvf files.tar file1.txt file2.txt # 追加 file3.txt 到归档 tar -rvf files.tar file3.txt # 验证追加结果 tar -tvf files.tar4.2 对比归档与本地文件的差异tar -dzvf test.tar.gz /home/user/data # 输出示例显示哪些文件在本地已修改、新增或删除4.3 解压时忽略报错适合损坏的压缩包tar -zxvf test.tar.gz --ignore-zeros # 忽略空块常见于损坏的压缩包 tar -zxvf test.tar.gz --skip-old-files # 解压时跳过已存在的文件不覆盖四、常见问题与解决方案问题1解压时报 “Permission denied”原因目标路径无写入权限或压缩包内文件需管理员权限。解决加sudo提升权限sudo tar -zxvf test.tar.gz -C /usr/local问题2解压时报 “Not found in archive”原因指定的解压文件路径错误与归档内的路径不一致。解决先执行tar -tvf 压缩包查看正确路径再按实际路径提取。问题3压缩包太大想分卷压缩# 将 test.tar.gz 分割为每个 100MB 的分卷命名为 test.tar.gz.01、test.tar.gz.02... split -b 100M test.tar.gz test.tar.gz. # 合并分卷并解压 cat test.tar.gz.* test.tar.gz tar -zxvf test.tar.gz五、常用组合命令速查表需求命令示例打包并压缩目录tar -zcvf dir.tar.gz ./dir解压到指定目录tar -xvf dir.tar.gz -C /opt/dir查看压缩包内容tar -tvf dir.tar.gz打包时排除日志文件tar -zcvf app.tar.gz ./app --exclude*.log保留权限解压系统配置文件sudo tar -zxvpf etc.tar.gz -C /仅解压压缩包中的单个文件tar -xvf dir.tar.gz dir/config.ini总结tar核心参数-c创建、-x解压、-t查看、-f指定文件-z/-j/-J对应不同压缩格式现代 tar 可自动识别。解压到指定路径的关键是-C参数且需提前创建目标目录打包排除文件用--exclude。权限相关问题加sudo路径问题先通过tar -tvf确认归档内的正确路径。