Linux tar 命令(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在 Linux 系统中,文件管理是开发者日常工作中最基础也最重要的操作之一。当我们需要将多个文件或目录整合为一个单独的文件,或者需要将文件压缩以节省存储空间时,tar 命令便成为不可或缺的工具。它如同一个“数字快递员”,能够将零散的文件“打包”成一个压缩包,方便传输、备份或归档。对于编程初学者和中级开发者而言,掌握 tar 命令不仅能提升工作效率,还能为后续学习更复杂的系统管理技能打下坚实基础。

本文将从基础语法到高级技巧,结合实际案例,逐步解析 tar 命令的使用方法,并通过形象的比喻帮助读者理解其工作原理。无论是备份项目、传输文件,还是恢复归档内容,你都能在本文中找到实用解决方案。


一、tar 命令基础用法:打包、解压与查看

1.1 基本语法结构

tar 命令的核心语法如下:

tar [选项] [压缩包路径] [要操作的文件或目录]  

其中,选项决定了 tar 的具体行为,例如打包、解压、查看等。

1.2 打包(归档)文件

核心参数 -c:表示创建(create)归档文件。

tar -cvf archive.tar file1.txt file2.txt directory/  
  • -c:创建新归档。
  • -v:显示详细操作过程(verbose)。
  • -f:指定归档文件的名称(file)。

比喻:假设你将多个文件装入一个纸箱(archive.tar),-c 就是“打包”的动作,而 -v 则是“列出纸箱中的物品清单”。

1.3 解压(解包)文件

核心参数 -x:表示提取(extract)归档内容。

tar -xvf archive.tar -C /destination/directory/  
  • -x:解压归档。
  • -C:指定解压后的目标路径(可选,默认当前目录)。

案例:解压到指定目录:

tar -xvf project_backup.tar -C /home/user/projects/  

1.4 查看归档内容

核心参数 -t:查看归档中的文件列表。

tar -tvf archive.tar  
  • -t:列出归档内容。

输出示例

-rw-r--r-- user/staff    1234 2023-01-01 10:00 file1.txt  
drwxr-xr-x user/staff       0 2023-01-01 10:00 directory/  

二、常用参数详解:增强功能与效率

2.1 压缩与解压参数

tar 本身仅用于归档文件,若需压缩,需结合其他工具(如 gzip, bzip2)。以下参数可实现“打包+压缩”一步完成:

参数功能对应工具
-z使用 gzip 压缩.tar.gz 或 .tgz
-j使用 bzip2 压缩.tar.bz2
-J使用 xz 压缩.tar.xz

示例

tar -czvf project.tgz /path/to/project/  

tar -xjvf data_backup.tar.bz2 -C /backup/  

2.2 进阶参数:优化操作体验

  • -v:显示详细信息(推荐在大多数场景中使用)。
  • --exclude:排除指定文件或目录(如备份时忽略日志文件):
    tar -czvf website_backup.tar.gz --exclude=logs/* /var/www/website/  
    
  • -p:保留文件权限(权限信息会随归档保留)。

三、压缩与解压技巧:从基础到高级

3.1 压缩层级控制

使用 -z 参数时,可通过 --gzip-N 参数调整压缩级别(数值越大,压缩率越高,但耗时越长):

tar -c --gzip --fast -f small_archive.tar.gz /data/  # 快速压缩  
tar -c --gzip --best -f large_archive.tar.gz /data/  # 最高压缩率  

3.2 分卷压缩:解决大文件传输问题

当文件过大无法一次性传输时,可用 -M 参数分卷压缩:

tar -cvzf - /big_directory/ | split -b 100M - archive_part_  

解压时需合并分卷文件:

cat archive_part_* | tar -xzvf - -C /destination/  

3.3 传输文件的“黑科技”:tar 管道传输

无需中间压缩文件,可通过 tarssh 直接传输文件:

tar -czpf - /source/directory | ssh user@remote_host "tar -xzpf - -C /destination/"  

ssh user@remote_host "tar -czpf - /remote/directory" | tar -xzpf - -C /local/destination/  

四、实际案例:tar 命令的实战应用

4.1 备份与恢复项目

场景:开发者需定期备份代码仓库,并压缩以节省空间。

tar -cvjf project_backup_$(date +%Y%m%d).tar.bz2 --exclude=node_modules ./my_project/  

tar -xvjf project_backup_20230101.tar.bz2 -C /new/location/  

4.2 网站迁移:快速传输整个网站目录

tar -czf - /var/www/html/ | ssh destination_server "tar -xzpf - -C /var/www/"  

4.3 解压嵌套压缩包

若文件为双重压缩(如 .tar.gz 内部包含另一个 .tar.gz),可直接解压:

tar -xzvf outer.tar.gz --wildcards '*.tar.gz' | tar -xzvf -  

五、常见问题与解决方案

5.1 文件损坏或无法解压

现象:执行 tar -xvf file.tar 时提示“unexpected end of file”。
原因:压缩包可能因传输中断或存储损坏。
解决

  1. 使用 tar --ignore-zeros -xvf file.tar 忽略部分错误。
  2. 通过 file 命令检查文件类型:
    file damaged_file.tar  
    

5.2 权限不足导致解压失败

现象:解压时提示“Permission denied”。
解决

  • 使用 sudo 提升权限:
    sudo tar -xvf admin_files.tar -C /protected/directory/  
    
  • 或在打包时保留权限:
    tar -cpf - --same-owner /source/ | ...  
    

5.3 解压到指定子目录

需求:解压 .tar 文件到当前目录的 output/ 子目录中。
方法

tar -xvf archive.tar -C ./output/ --strip-components=1  

--strip-components=1 会去掉路径中的第一层目录,确保文件直接放入 output/


六、结论:掌握 tar 命令的核心价值

通过本文的讲解,读者已掌握了 tar 命令从基础到进阶的使用方法。无论是日常开发中的文件备份、项目迁移,还是复杂场景下的分卷压缩与远程传输,tar 都能提供高效且灵活的解决方案。

关键点回顾

  • 基础操作-c(打包)、-x(解压)、-t(查看)。
  • 压缩增强-z(gzip)、-j(bzip2)、-J(xz)。
  • 进阶技巧:排除文件、保留权限、管道传输。

建议读者通过实际操作巩固知识,例如尝试备份当前工作目录,并尝试解压到不同位置。熟练掌握 tar 命令不仅能提升工作效率,更能为后续学习 rsyncscp 等工具打下基础。

Linux 系统的精髓在于“组合工具解决问题”,而 tar 正是这一理念的典型代表。通过灵活组合参数与管道,开发者能够构建出适应各种场景的高效工作流。希望本文能成为你探索 Linux 系统管理的第一步,并在未来工作中发挥重要作用。

最新发布