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
相关推荐
17(无规则自律)10 分钟前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
liu****24 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
中二病码农不会遇见C++学姐26 分钟前
Linux下的.run文件
linux
予枫的编程笔记28 分钟前
【Linux入门篇】摆脱权限混乱困境:Linux用户组管理+sudo提权,一步到位
linux·linux运维·后端开发·linux用户管理·linux权限配置·chmod命令·sudo配置
starfire_hit28 分钟前
JAVAWEB根据前台请求获取用户IP
java·服务器·网络
一个人旅程~35 分钟前
Dell n4020双系统分区步骤和linux优化操作
linux·windows·电脑
池央36 分钟前
CANN 诊断工具链深度解析:oam-tools 的自动化故障信息收集、软硬件状态快照与 AI Core 错误溯源机制
运维·人工智能·自动化
忆~遂愿38 分钟前
CANN metadef 深度解析:动态形状元数据管理、图编译器接口规范与序列化执行机制
大数据·linux
予枫的编程笔记39 分钟前
【Linux入门篇】Linux文件操作不用记满屏命令,掌握touch/cp/mv核心用法就够了
linux·tar·linux命令·tail·cat·linux文件管理·linux新手教程
learning-striving1 小时前
kali连不上网解决方法
linux·开发语言·网络·php·kali