Linux tar 命令详解
Linux tar 命令详解 🐧📦📦
学习目标 🎯
- 理解
tar命令的基本功能与使用场景。 - 掌握打包、压缩、解压文件的多种方式(如
.tar,.tar.gz,.tar.bz2等)。 - 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在默认支持格式和权限控制上的差异。
- 能结合实际开发、运维、脚本编写等场景灵活运用
tar。 - 熟悉常见错误及安全操作建议,避免误操作导致数据丢失或损坏。
核心重点 ✅
| 类别 | 内容 |
|---|---|
| 命令含义 | tape archive 打包/归档工具 |
| 基本语法 | tar [选项] [生成文件] [源文件/目录] |
| 核心功能 | - 打包目录为单个文件 - 配合 gzip/bzip2/xz 进行压缩 |
| 常用参数 | -c, -x, -f, -z, -j, -J, -v |
| 权限控制 | 受文件系统权限限制,普通用户不能打包 /root 下的内容 |
| 跨平台差异 | 不同发行版对压缩算法的支持略有差异 |
详细讲解 💡
1. 基本介绍 📘
📌 功能:
tar 是 Linux 中最常用的打包工具,可以将多个文件或目录合并成一个 .tar 文件。它本身不进行压缩,但可以通过配合其他压缩工具(如 gzip, bzip2, xz)实现高效的数据归档和压缩。
📌 语法:
tar [选项] [输出文件] [输入文件/目录]
📌 示例:
tar -cvf project.tar project/
👀 输出示例:
project/
project/file1.txt
project/file2.txt
2. 常用参数详解 🛠️
✅ -c:创建新归档文件(create)
tar -cvf archive.tar file1 file2 dir/
✅ -x:解压归档文件(extract)
tar -xvf archive.tar
✅ -f:指定归档文件名(file)
必须使用,否则无法识别输出文件。
✅ -z:配合 gzip 压缩(.tar.gz)
tar -czvf archive.tar.gz project/
✅ -j:配合 bzip2 压缩(.tar.bz2)
tar -cjvf archive.tar.bz2 project/
✅ -J:配合 xz 压缩(.tar.xz)
tar -cJvf archive.tar.xz project/
✅ -v:显示处理过程(verbose)
tar -cvf archive.tar project/
👀 应用:调试时查看打包进度。
3. 实际应用场景 🏢
🧱 场景一:项目部署前打包上传代码
tar -czvf myproject.tar.gz myproject/
scp myproject.tar.gz ubuntu@47.105.123.45:/home/ubuntu/
👀 应用:快速部署 Web 项目到云服务器。
🧱 场景二:定时任务自动备份日志
#!/bin/bash
LOG_DIR="/var/log/app"
BACKUP_DIR="/mnt/nas/logs"
DATE=$(date +%Y%m%d)
tar -czvf $BACKUP_DIR/app_logs_$DATE.tar.gz $LOG_DIR/*.log
👀 应用:每日日志归档备份。
🧱 场景三:从远程服务器下载并解压配置文件
scp ubuntu@47.105.123.45:/home/ubuntu/config.tar.gz .
tar -xzvf config.tar.gz
👀 应用:恢复生产环境配置。
🧱 场景四:只提取 tar 包中的部分文件
tar -xvf archive.tar project/file1.txt
👀 应用:节省时间,无需全部解压。
4. 不同 Linux 发行版差异对比 🖥️🐧
| 对比项 | Ubuntu | CentOS | EulerOS |
|---|---|---|---|
| 默认 shell | bash | bash | bash |
是否支持 -z (gzip) |
✅ | ✅ | ✅ |
是否支持 -j (bzip2) |
✅(需安装) | ✅ | ✅ |
是否支持 -J (xz) |
✅ | ✅ | ✅ |
| root 用户权限限制 | sudo 制度严格 | su 更常见 | 政企级安全强化 |
| SELinux/AppArmor 影响 | ❌ | ✅ | ✅ |
⚠️ 小贴士:某些政企级系统(如 EulerOS)可能默认禁用
bzip2,需手动安装:
sudo apt install bzip2 # Ubuntu
sudo yum install bzip2 # CentOS
5. tar vs zip 对比 🤔
| 特性 | tar |
zip |
|---|---|---|
| 是否保留权限 | ✅ | ❌ |
| 是否支持符号链接 | ✅ | ❌ |
| 压缩效率 | 高(可选 gzip/bzip2/xz) | 一般 |
| 平台兼容性 | Linux 主流 | Windows/Linux 兼容 |
| 使用建议 | Linux 系统内部归档 | 跨平台共享文件 |
6. 常见问题与解决方案 ❗
❌ 错误 1:找不到压缩工具
tar: Error is not supported
原因:未安装对应压缩工具
解决:
sudo apt install gzip bzip2 xz-utils # Ubuntu
sudo yum install gzip bzip2 xz # CentOS
❌ 错误 2:解压失败提示“not in gzip format”
tar: Archive mode requires -f
原因:文件不是 .tar.gz 格式
解决:检查后缀是否正确或尝试其他解压方式。
❌ 错误 3:路径中有空格或特殊字符
tar -cvf "my project.tar" my project/
解决:加引号即可正常处理。
7. 小技巧 & 高效用法 🚀
- Tab 补全:输入部分路径后按
Tab键自动补全。 - 历史记录:使用上下箭头键查看之前执行过的
tar命令。 - 管道压缩传输:
tar -cz project/ | ssh user@remote "tar -xz -C /backup/"
👀 应用:直接打包并通过 SSH 流式传输解压。
- 配合变量使用(脚本中):
SRC="project/"
DEST="backup_$(date +%Y%m%d).tar.gz"
tar -czvf $DEST $SRC
8. 实战练习题 🧪
🔍 练习 1:
请写出以下命令的作用:
tar -xjvf data.tar.bz2 -C /tmp/
📝 答案:
解压 data.tar.bz2 文件,并将内容释放到 /tmp/ 目录中。
🔍 练习 2:
编写一个脚本 backup_project.sh,实现以下功能:
- 接收一个参数:要备份的项目目录
- 生成带日期的
.tar.gz文件 - 显示详细打包过程
📝 答案:
#!/bin/bash
PROJECT_DIR=$1
if [ -z "$PROJECT_DIR" ]; then
echo "请提供项目目录路径!"
exit 1
fi
DATE=$(date +%Y%m%d)
OUTPUT="backup_$DATE.tar.gz"
echo "正在备份项目:$PROJECT_DIR"
tar -czvf $OUTPUT $PROJECT_DIR
echo "备份完成,文件保存为:$OUTPUT"
使用方法:
chmod +x backup_project.sh
./backup_project.sh myproject/
总结 📋
tar 是 Linux 中最基础但极其强大的命令之一,尤其在打包归档和压缩传输时不可或缺。它不仅适用于日常运维、程序调试、日志备份等多个场景,还广泛用于自动化脚本中。
掌握 tar 的各种参数组合,理解不同发行版之间的权限与安全机制差异,并结合实际场景灵活运用,可以显著提升你的工作效率和系统掌控能力。
建议多与 scp, ssh, find, cp, mv, rsync, gzip, bzip2, xz 等命令配合使用,形成完整的文件管理与传输流程。

浙公网安备 33010602011771号