Linux tar 命令完全指南
文件归档压缩工具 · Linux 必备技能
tar [主选项] [辅助选项] [文件...]
一、tar 是什么?
tar(Tape Archive)是 Linux/Unix 系统中用于打包和压缩文件的命令。它可以将多个文件或目录合并成一个归档文件(.tar),并支持 gzip、bzip2、xz 等压缩格式。
tar 是备份、传输、分发软件的标准工具,Linux 源码、配置文件等通常以 .tar.gz 或 .tar.bz2 的形式发布。
二、主选项(必选其一)
-c, --create 创建新的归档文件-x, --extract, --get 从归档中提取文件-t, --list 列出归档内容-r, --append 追加文件到归档-u, --update 更新归档中的文件-d, --diff, --compare 比较归档与文件系统差异
三、辅助选项
-v, --verbose 显示详细过程-z, --gzip 使用 gzip 压缩/解压 (.gz)-j, --bzip2 使用 bzip2 压缩/解压 (.bz2)-J, --xz 使用 xz 压缩/解压 (.xz)-f, --file=FILE 指定归档文件名-C, --directory=DIR 切换到指定目录-p, --preserve-permissions 保留权限--strip-components=N 提取时去掉前 N 层目录
四、实战示例
4.1 创建归档(打包)
# 打包目录tar -cvf archive.tar /path/to/directory# 打包多个文件tar -cvf files.tar file1.txt file2.txt file3.txt# 打包并压缩(gzip)tar -czvf archive.tar.gz /path/to/directory# 打包并压缩(bzip2)tar -cjvf archive.tar.bz2 /path/to/directory# 打包并压缩(xz,最强压缩)tar -cJvf archive.tar.xz /path/to/directory
4.2 查看归档内容
# 列出归档内容tar -tvf archive.tar# 详细列出(包括权限、大小)tar -tvf archive.tar.gz# 只看文件名tar -tf archive.tar | grep ".conf$
4.3 提取归档
# 解压到当前目录tar -xvf archive.tar# 解压到指定目录tar -xvf archive.tar -C /target/directory# 解压 .tar.gztar -xzvf archive.tar.gz# 解压 .tar.bz2tar -xjvf archive.tar.bz2# 解压 .tar.xztar -xJvf archive.tar.xz# 解压单个文件tar -xvf archive.tar specific-file.txt
4.4 追加文件
# 追加文件到归档tar -rvf archive.tar newfile.txt# 追加目录tar -rvf archive.tar ./newdirectory/
4.5 常用场景
# 备份整个用户目录tar -czvf backup.tar.gz /home/username# 备份配置文件tar -czvf config.tar.gz /etc/nginx /etc/apache2# 解压软件源码tar -xzvf nginx-1.20.0.tar.gz# 打包排除某些文件tar --exclude='*.log' --exclude='node_modules' -czvf app.tar.gz ./app# 查看压缩包大小ls -lh archive.tar.gz
五、压缩格式对比
格式 压缩比 速度 文件名gzip (.gz) 中等 快 archive.tar.gzbzip2 (.bz2) 较高 较慢 archive.tar.bz2xz (.xz) 最高 最慢 archive.tar.xz# 推荐选择:# - 快速压缩/解压:用 gzip# - 节省空间:用 xz# - 兼容性:用 gzip
六、高级技巧
# 远程打包传输(一条命令)tar -czvf - /path | ssh user@host "cat > backup.tar.gz"# 增量备份tar -N "2024-01-01" -czvf backup.tar.gz /data# 排除目录tar --exclude='.git' --exclude='node_modules' -czvf code.tar.gz ./project# 保留符号链接指向的原始文件tar -chvf archive.tar /path/to/symlink# 显示归档大小(解压后)tar -czf - /directory | wc -c
七、常见问题
Q: tar 和 zip 有什么区别? A: tar 只打包不压缩,zip 既是打包又是压缩。tar 可以配合 gzip/bzip2/xz 实现更高压缩比。
Q: 解压时提示 "Cannot open: Permission denied"? A: 需要 sudo 权限,或者解压到有写权限的目录。
Q: 如何只解压某个目录中的文件? A: 使用 --wildcards,如:tar -xvf archive.tar --wildcards "path/to/*"
💡 经验总结
1. 记住主选项:c=创建、x=提取、t=列表 2. 常用组合:czvf、xzvf、tvf 3. -f 后面必须跟文件名 4. 先 t 测试,再 x 提取