Linux --- tar命令常见用法

Linux tar 命令


1.分卷压缩与解压

Linux 下最通用的分卷压缩方式是结合 tar(打包/压缩)与 split(切割)命令使用管道流处理。

1.1 分卷压缩

将目录打包并分割成指定大小的多个文件。

bash 复制代码
# 语法
tar -czvf - <要打包的目录> | split -b <分卷大小> -d - <输出文件前缀>

# 示例:将 logs 目录压缩,每卷 500MB,命名为 logs.tar.gz.00, logs.tar.gz.01...
tar -czvf - logs/ | split -b 500M -d - logs.tar.gz.

参数解析:

  • tar -czvf -: 最后面的 - 代表输出到标准输出(Stdout),不写入磁盘文件。
  • split -b 500M: 设置切割大小(单位:k, M, G)。
  • split -d: 使用数字后缀(00, 01...)而非默认的字母(aa, ab...)。
  • split -: 最后面的 - 代表从标准输入(Stdin)读取数据。

1.2 分卷解压

将多个分卷文件合并还原。

bash 复制代码
# 语法
cat <分卷前缀>* | tar -xzvf -

# 示例:解压上述 logs.tar.gz.00 等文件
cat logs.tar.gz.* | tar -xzvf -

原理: cat 利用通配符读取所有分卷流,通过管道传回给 tar 进行解压。


2. 常用基础命令速查

2.1 压缩 (打包)

根据需求选择不同的压缩算法(压缩率:xz > bzip2 > gzip;速度则反之)。

  • .tar.gz (最常用,速度快)

    bash 复制代码
    tar -czvf archive.tar.gz /path/to/folder
  • .tar.bz2 (压缩率较高)

    bash 复制代码
    tar -cjvf archive.tar.bz2 /path/to/folder
  • .tar.xz (压缩率最高,耗时久)

    bash 复制代码
    tar -cJvf archive.tar.xz /path/to/folder

2.2 解压 (解包)

现代 tar 通常能自动识别压缩格式,只需记住 -xvf 即可,但显式指定算法更保险。

  • 解压到当前目录

    bash 复制代码
    tar -xzvf archive.tar.gz
  • 解压到指定目录 (-C 参数)

    bash 复制代码
    # 目标目录必须先存在
    mkdir -p /opt/backup
    tar -xzvf archive.tar.gz -C /opt/backup

2.3 查看内容 (不解压)

在解压大文件前,先查看里面有什么。

bash 复制代码
tar -tvf archive.tar.gz

3. 参数详解表

参数 含义 备注
-c Create (创建) 建立新的归档文件
-x Extract (提取) 从归档文件中提取文件
-t List (列表) 查看归档文件内容
-v Verbose (详细) 显示处理过程(推荐使用)
-f File (文件) 指定归档文件名(必须是最后一个参数,后接文件名)
-C Change Directory 切换到指定目录进行解压
-z Gzip 处理 .tar.gz 格式
-j Bzip2 处理 .tar.bz2 格式
-J Xz 处理 .tar.xz 格式

4. 进阶技巧

4.1 排除特定文件/文件夹 (--exclude)

打包项目源码时,通常需要排除 .git 目录或编译生成文件。

bash 复制代码
# 注意:--exclude pattern 最好放在命令靠前位置,且不加前导斜杠
tar --exclude='.git' --exclude='*.o' -czvf project.tar.gz ./project_src

4.2 仅打包,不压缩

如果你只是想把一堆文件变成一个包(方便传输),但不消耗 CPU 压缩:

bash 复制代码
tar -cvf bundle.tar /path/to/files

4.3 相对路径 vs 绝对路径

警告: 尽量不要 使用绝对路径(如 /home/user/data)打包。

  • 坏处:解压时会强制覆盖绝对路径下的文件,可能导致系统文件损坏或权限问题。
  • 做法 :先 cd 到父目录,使用相对路径打包。
bash 复制代码
# 推荐做法
cd /home/user/
tar -czvf data.tar.gz ./data
相关推荐
2501_941329722 小时前
气压表智能读数检测:基于YOLOv8的指针与刻度识别实现自动化读数
运维·yolo·自动化
飞凌嵌入式2 小时前
嵌入式AI领域的主控选择
linux·arm开发·人工智能·嵌入式硬件
RisunJan2 小时前
Linux命令-ld(将目标文件连接为可执行程序)
linux·运维·服务器
猫猫的小茶馆2 小时前
【Linux 驱动开发】四. 平台总线驱动
linux·c语言·arm开发·驱动开发·嵌入式硬件·mcu·物联网
济6172 小时前
linux--Cortex-A7架构-- Ubuntu20.04
linux·运维·架构
无心水2 小时前
4、Go语言程序实体详解:变量声明与常量应用【初学者指南】
java·服务器·开发语言·人工智能·python·golang·go
运维栈记2 小时前
Claude Code 与 MCP 服务器使用指南
运维·ai
init_23612 小时前
【HCIE-08】NAT64
linux·服务器·网络
贾修行2 小时前
Kestrel:.NET 的高性能 Web 服务器探秘
服务器·前端·kestrel·.net·net core·web-server·asp.net-core