Linux 下 tar 命令归档与压缩完整指南

 更新时间:2025年11月04日 15:02:15   作者:手搓DesignPattern  
文章介绍了存档文件的概念、Linux系统中常用的tar命令及其基础操作,包括创建、列出、提取存档文件,以及使用压缩算法压缩和解压缩存档文件,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

什么是存档文件?

存档文件是包含多个文件的单个常规文件或设备文件,可用于创建可管理的个人备份,或者在其他方法(如 rsync)不可用时简化通过网络传输文件的任务。在 Linux 系统中,tar 实用程序是用于创建、管理和提取存档的常用命令。

存档文件可以使用或不使用压缩:

  • 不使用压缩:仅将多个文件打包成一个文件,大小基本不变
  • 使用压缩:通过压缩算法减小存档文件体积

tar 命令基础操作

必需的操作选项

执行 tar 操作需要以下命令操作之一:

  • -c 或 --create:创建存档文件
  • -t 或 --list:列出存档的内容
  • -x 或 --extract:提取存档

常用选项

  • -v 或 --verbose:显示在 tar 操作期间存档或提取的文件
  • -f 或 --file:指定要创建或打开的存档文件名
  • -p 或 --preserve-permissions:提取时保留原始文件权限
  • --xattrs:启用扩展属性支持,存储扩展的文件属性
  • --selinux:启用 SELinux 上下文支持,存储 SELinux 文件上下文

创建存档文件

基本创建命令

要使用 tar 命令创建存档,使用 create 和 file 选项,并将存档文件名作为第一个参数,后跟要纳入存档的文件和目录列表。

tar -cf mybackup.tar myapp1.log myapp2.log myapp3.log

重要特性

  • tar 命令可识别绝对和相对文件名语法
  • 默认情况下,tar 从绝对文件名中删除前导正斜杠 (/) 字符,使用相对路径名在内部存储文件
  • 这种技术更为安全,因为使用相对路径名存档文件时,可以将文件提取到新目录而不会覆盖现有文件

权限要求

用户必须具有被归档的目标文件的读取权限。例如,在 /etc 目录中创建归档需要 root 特权,因为只有特权用户才能读取所有 /etc 文件。

查看存档内容

使用 tar 命令的 t 选项可列出通过 f 选项指定的存档中的文件名:

tar -tf /root/etc.tar

文件是使用相对名称语法列出的,因为在存档创建期间删除了前导的正斜杠。

提取存档内容

基本提取命令

tar -xf /root/etc.tar

最佳实践:将 tar 存档提取到空白目录中,以免覆盖现有的文件。

权限处理

  • 当 root 用户提取存档时,提取的文件会保留原始的用户和组所有权
  • 如果是常规用户提取文件,则该用户将成为所提取文件的所有者
  • 从存档中提取文件时,当前的 umask 用于修改提取的每个文件的权限
  • 使用 tar 命令的 p 选项可保留提取的文件的原始存档权限
tar -xpf /home/user/myscripts.tar

压缩存档

支持的压缩算法

tar 命令支持多种压缩方式:

  • gzip 压缩(选项:-z
    • 最快的旧方法,跨平台广泛使用
    • 生成 .tar.gz 或 .tgz 后缀
  • bzip2 压缩(选项:-j
    • 可创建较小的存档,但使用不如 gzip 广泛
    • 生成 .tar.bz2 后缀
  • xz 压缩(选项:-J
    • 更新的技术,提供的压缩率在可用方法中最好
    • 生成 .tar.xz 后缀

创建压缩存档示例

# 使用 gzip 压缩
tar -czf /root/etcbackup.tar.gz /etc
# 使用 bzip2 压缩
tar -cjf /root/logbackup.tar.bz2 /var/log
# 使用 xz 压缩
tar -cJf /root/sshconfig.tar.xz /etc/ssh

验证压缩存档内容

创建存档后,使用 tar 命令的 tf 选项来验证其内容。列出压缩存档文件时,不需要指定压缩选项,因为压缩类型是从存档标头中读取的:

tar -tf /root/etcbackup.tar.gz

提取压缩存档

tar 命令可以自动确定使用的压缩方式,因此不需要指定压缩选项:

tar -xf /root/etcbackup.tar.gz

注意:如果包含了不正确的压缩类型,tar 将报告指定的压缩类型与文件的类型不匹配。

独立压缩工具

gzipbzip2 和 xz 算法也作为独立命令实施,用于在不创建归档的前提下压缩单个文件。但这些命令不允许在创建的单个压缩文件中包含多个文件。

查看压缩文件信息

gzip 和 xz 命令提供了 -l 选项,可用于查看压缩的单个文件或归档文件的未压缩大小:

gzip -l file.tar.gz
xz -l file.xz

在解压缩或提取文件之前,使用此选项来验证是否有足够的可用空间。

常用命令总结

操作类型命令示例说明
仅归档tar -cvf glab.tar ./*创建不压缩的归档文件
查看归档tar -tf glab.tar查看归档内容(必须加f)
提取归档tar -xf glab.tar提取归档文件
gzip压缩归档tar -zcvf rhce.tar.gz *使用gzip压缩并创建归档
bzip2压缩归档tar -jcvf file.tar.bz2 *使用bzip2压缩并创建归档
xz压缩归档tar -Jcvf file.tar.xz *使用xz压缩并创建归档
解压gzip归档tar -zxf file.tar.gz解压gzip压缩的归档
解压bzip2归档tar -jxf file.tar.bz2解压bzip2压缩的归档
解压xz归档tar -Jxf file.tar.xz解压xz压缩的归档

注意事项

  • 压缩效果:任何压缩算法的效用都取决于被压缩数据的类型。之前已压缩的数据文件(如图片格式或 RPM 文件)通常不会进一步大幅压缩。
  • 文件覆盖:如果目标目录中存在与所请求存档同名的文件,则 tar 命令会覆盖这个文件。
  • 权限保留:对于超级用户,--preserve-permissions 选项默认为启用。
  • 传统语法tar 命令依旧支持不使用短划线 (-) 字符的传统选项样式,但为保持命令一致性,建议改用短选项或长选项样式。

到此这篇关于Linux 下 tar 命令归档与压缩完整指南的文章就介绍到这了,更多相关linux tar 归档与压缩命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • shell中1小于/dev/null 2大于&1的含义

    shell中1小于/dev/null 2大于&1的含义

    shell中可能经常能看到:>/dev/null 2>&1,这里简单介绍下,方便需要的朋友
    2013-01-01
  • Shell位置变量&预定义变量的实现

    Shell位置变量&预定义变量的实现

    Shell位置变量和预定义变量是Shell脚本编程中非常重要的概念,本文主要介绍了Shell位置变量&预定义变量的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 在任意目录下使用某个shell脚本的方法

    在任意目录下使用某个shell脚本的方法

    今天小编就为大家分享一篇在任意目录下使用某个shell脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Linux 下xargs命令详解及xargs与管道的区别

    Linux 下xargs命令详解及xargs与管道的区别

    在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别,本文通过实例给大家详解,需要的的朋友参考下
    2017-04-04
  • Shell脚本中判断输入变量或者参数是否为空的方法

    Shell脚本中判断输入变量或者参数是否为空的方法

    这篇文章主要介绍了Shell脚本中判断输入变量或者参数是否为空的方法,本文总结了5种方法,并分别给出了代码实例,需要的朋友可以参考下
    2014-10-10
  • Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录

    Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录

    这篇文章主要介绍了Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录,需要的朋友可以参考下
    2015-04-04
  • Linux服务器安全清理垃圾文件的命令详解

    Linux服务器安全清理垃圾文件的命令详解

    在这现代的岁月,数码世界日益发展,凡是涉及计算,必然离不开那浩如烟海的数据,庞大如巨鲸的文件,若将目光转向我们的服务器,尤其是 Linux 服务器,垃圾文件的积累便如那墙角的蛛网,本文就给大家聊聊如何在 Linux 服务器上安全地清理垃圾文件,需要的朋友可以参考下
    2024-06-06
  • 使用Systemctl列出Linux中所有服务的操作步骤

    使用Systemctl列出Linux中所有服务的操作步骤

    在 Linux 系统中,Systemctl 是一个强大的工具,用于管理系统的服务和守护进程,它可以让用户轻松地启动、停止、重启以及管理各种系统服务,本文将详细介绍如何使用 Systemctl 来列出 Linux 中的所有服务,需要的朋友可以参考下
    2024-05-05
  • shell判断变量是否含某个字符串的6种方法

    shell判断变量是否含某个字符串的6种方法

    本文主要介绍了shell判断变量是否含某个字符串的6种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Shell脚本echo指令使用小技巧

    Shell脚本echo指令使用小技巧

    这篇文章主要介绍了Shell脚本echo指令使用小技巧,包括使用echo指令输出换行、输出不换行、输出变量等技巧,需要的朋友可以参考下
    2014-07-07

最新评论