Linux基本命令篇 —— tar命令
tar
命令是Linux系统中用于归档文件的常用工具,名称来源于"Tape ARchive"(磁带归档)。它可以将多个文件或目录打包成一个归档文件(通常称为tarball),并支持压缩功能,可以高效地管理和备份Linux系统中的文件。下面详细介绍tar
命令的用法。
目录
前言:
1、归档文件(Archive File)简介
2、关键特点
3、常见归档格式
4、与压缩的区别(重点)
5、总结
一、基本语法
二、常用选项
1、主要操作选项(必须选择其中一个)
补充说明:
2、压缩选项
补充说明:
3、其他常用选项
三、常用示例
1、创建归档文件
创建普通tar归档(不压缩)
创建gzip压缩的归档(.tar.gz或.tgz)
创建bzip2压缩的归档(.tar.bz2)
创建xz压缩的归档(.tar.xz)
2、查看归档内容但不解压(选项-t)
列出归档内容
列出gzip压缩归档内容
3、提取归档文件(-x:用于解包文件)
补充:默认行为为覆盖(无特殊选项)
提取普通tar归档
提取gzip压缩归档
提取到指定目录
提取特定文件(选项-C 解压到指定目录)
4、高级用法
追加文件到现有归档
更新归档中已更改的文件
创建归档时排除特定文件
使用通配符提取多个文件
四、注意事项
详解第4点:
1. 默认行为:保留相对路径
2. 绝对路径的特殊处理
3. -P选项:保留绝对路径
4. 路径处理对比表
五、压缩效率比较
前言:
1、归档文件(Archive File)简介
归档文件(Archive File)是一种将多个文件和目录打包成一个单独文件的存储方式,主要用于:
-
整理和备份(将分散的文件合并为一个文件)
-
方便传输(只需发送/接收一个文件而非多个零散文件)
-
保留文件结构(包括目录层级、权限等元数据)
2、关键特点
特性 | 说明 |
---|---|
多文件合并 | 将多个文件或目录打包成单个文件(如 archive.tar ) |
保留结构 | 保持原始目录层级、文件权限、时间戳等属性 |
可选压缩 | 可搭配压缩算法(如 gzip、bzip2)进一步减小体积(如 .tar.gz ) |
不修改内容 | 归档本身不改变文件内容,仅封装(压缩是额外操作) |
3、常见归档格式
格式 | 命令示例 | 说明 |
---|---|---|
.tar | tar -cvf file.tar dir/ | 纯归档,未压缩 |
.tar.gz | tar -czvf file.tgz dir/ | 用 gzip 压缩(速度快,通用) |
.tar.bz2 | tar -cjvf file.tbz2 dir/ | 用 bzip2 压缩(压缩率更高) |
.tar.xz | tar -cJvf file.tar.xz dir/ | 用 xz 压缩(压缩率最高,但慢) |
.zip | zip -r file.zip dir/ | 跨平台格式(Windows/Linux 通用) |
4、与压缩的区别(重点)
-
归档(Archiving):
仅将文件合并为一个包(如.tar
),体积不变。
示例:把 10 个 1MB 文件打包成一个 10MB 的.tar
文件。 -
压缩(Compression):
通过算法减小文件体积(如.tar.gz
),体积变小。(观察文件后缀,我们可以联想到意思是在归档的前提上可以再压缩)
示例:将 10MB 的.tar
压缩成 3MB 的.tar.gz
。
5、总结
归档文件相当于一个“文件容器”,用于高效管理大量零散文件。
-
需要整理/备份? → 用
.tar
-
需要减小体积? → 用
.tar.gz
或.tar.xz
-
跨平台分享? → 用
.zip
一、基本语法
tar指令可以用来打包压缩和解压文件,并且还可以实现不解开压缩包,直接查看里面内容的操作,以及只打包不压缩等操作。
tar [选项] [归档文件名] [要归档的文件或目录...]
功能: 打包/解包,不解开压缩包,直接查看里面内容。
二、常用选项
1、主要操作选项(必须选择其中一个)
短选项 | 长选项 | 功能描述 |
---|---|---|
-c | --create | 创建新的归档文件 |
-x | --extract | 从归档文件中提取文件 |
-t | --list | 列出归档文件中的内容 |
-r | --append | 向归档文件末尾追加文件 |
-u | --update | 仅添加比归档中更新的文件 |
补充说明:
-
-c
:用于打包文件(通常结合-f
指定文件名,如tar -cvf archive.tar files...
)。 -
-x
:用于解包文件(如tar -xvf archive.tar
)。 -
-t
:查看归档内容而不解压(如tar -tvf archive.tar
)。 -
-r
:向已存在的.tar
文件追加文件(注意:不能用于压缩归档如.tar.gz
)。 -
-u
:仅添加比归档内文件更新的文件(类似-r
,但会检查文件时间戳)。
2、压缩选项
短选项 | 长选项 | 压缩算法 | 典型文件扩展名 | 说明 |
---|---|---|---|---|
-z | --gzip | gzip | .tar.gz .tgz | 使用 gzip 压缩(速度较快,压缩率中等) |
-j | --bzip2 | bzip2 | .tar.bz2 .tbz2 | 使用 bzip2 压缩(压缩率较高,但较慢) |
-J | --xz | xz | .tar.xz .txz | 使用 xz 压缩(最高压缩率,但最慢) |
--lzma | --lzma | lzma | .tar.lzma | 使用 LZMA 压缩(类似 xz,但较旧) |
-Z | --compress | compress | .tar.Z | 使用 compress 压缩(较老算法,较少使用) |
补充说明:
-
-z
/--gzip
-
最常用,压缩速度较快,适合一般用途(如日志打包)。
-
示例:
tar -czvf archive.tar.gz files/
-
-
-j
/--bzip2
-
压缩率比 gzip 高,但速度较慢,适用于需要更高压缩率的场景。
-
示例:
tar -cjvf archive.tar.bz2 files/
-
-
-J
/--xz
-
压缩率最高(比 bzip2 更好),但速度最慢,适用于长期存储或大文件。
-
示例:
tar -cJvf archive.tar.xz files/
-
-
--lzma:
类似 xz,但较旧,现代系统推荐使用-J
(xz)代替。 -
-Z
/--compress:
较老的 Unix 压缩算法,现在很少使用(gzip 和 xz 更常见)。
3、其他常用选项
短选项 | 长选项 | 功能描述 |
---|---|---|
-v | --verbose | 显示详细处理过程(列出正在处理的文件) |
-f | --file=ARCHIVE | 指定归档文件名(必须选项,后接 .tar 、.tar.gz 等文件名) |
-C | --directory=DIR | 解压到指定目录(如 tar -xvf file.tar -C /target/ ) |
-p | --preserve-permissions | 保留文件权限(解压时保持原文件的权限和属性) |
--exclude=PATTERN | --exclude=PATTERN | 排除匹配 PATTERN 的文件(如 --exclude='*.log' 排除 .log 文件) |
-h | --dereference | 归档符号链接指向的实际文件(而非链接本身) |
--wildcards | --wildcards | 在提取时使用通配符匹配文件名(如 --wildcards '*.txt' ) |
三、常用示例
1、创建归档文件
-
创建普通tar归档(不压缩)
tar -cvf archive.tar file1.txt file2.txt dir1
-
创建gzip压缩的归档(.tar.gz或.tgz)
tar -czvf archive.tar.gz file1.txt file2.txt dir1
-
创建bzip2压缩的归档(.tar.bz2)
tar -cjvf archive.tar.bz2 file1.txt file2.txt dir1
-
创建xz压缩的归档(.tar.xz)
tar -cJvf archive.tar.xz file1.txt file2.txt dir1
2、查看归档内容但不解压(选项-t)
-
列出归档内容
tar -tvf archive.tar
-
列出gzip压缩归档内容
tar -tzvf archive.tar.gz
3、提取归档文件(-x
:用于解包文件)
补充:默认行为为覆盖(无特殊选项)
-
覆盖现有文件:解包时会直接覆盖同名文件(内容替换)。
-
不保留原文件属性:
-
文件内容 → 被归档中的版本覆盖
-
文件权限 → 继承归档中的权限(除非用
-p
保留原权限) -
时间戳 → 更新为解压时的时间(不会保留归档中的时间戳!)
-
更多的详细知识,可以到网上搜索相关的内容学习,毕竟博主也学不了这么多知识的!
-
提取普通tar归档
tar -xvf archive.tar
-
提取gzip压缩归档
tar -xzvf archive.tar.gz
-
提取到指定目录
tar -xzvf archive.tar.gz -C ~/path
-
提取特定文件(选项-C 解压到指定目录)
tar -xzvf archive.tar.gz -C ~/path/to
4、高级用法
-
追加文件到现有归档
tar -rvf archive.tar newfile.txt
-
更新归档中已更改的文件
tar -uvf archive.tar file1.txt
-
创建归档时排除特定文件
tar -czvf archive.tar.gz --exclude='*.tmp' dir1
-
使用通配符提取多个文件
tar -xzvf archive.tar.gz --wildcards '*.txt'
四、注意事项
-
-f
选项后面必须紧跟归档文件名,不能与其他选项合并(重点) -
现代GNU tar通常可以自动检测压缩类型,因此有时可以省略
-z
、-j
等选项 -
使用
-v
选项可以查看详细过程,但在脚本中通常省略以避免输出干扰 -
在创建归档时,相对路径会被保留。如果需要绝对路径,可以使用
-P
选项(重点)
详解第4点:
1. 默认行为:保留相对路径
当使用tar
创建归档时:
-
相对路径(如
./file.txt
或dir/file.txt
)会被完整保留在归档中 -
解压时会在当前目录还原相同的目录结构
示例:当前目录结构:./dir/file.txt
tar -cvf archive.tar dir/file.txt # 归档
tar -xvf archive.tar # 解压后会得到 ./dir/file.txt
2. 绝对路径的特殊处理
默认情况下:
-
绝对路径(如
/home/user/file.txt
)会被tar自动去掉开头的/
,变成相对路径 -
这是安全机制,防止解压时覆盖系统重要文件
示例:
tar -cvf archive.tar /etc/hosts # 归档
tar -xvf archive.tar # 解压后得到 ./etc/hosts 而非 /etc/hosts
3. -P
选项:保留绝对路径
如果需要真正保留绝对路径:
-
使用
-P
或--absolute-names
选项 -
危险操作:可能导致系统文件被覆盖!
示例:
tar -cvPf archive.tar /etc/hosts # 保留绝对路径
tar -xPf archive.tar # 解压到原始绝对路径
4. 路径处理对比表
情况 | 无-P 选项 | 使用-P 选项 |
---|---|---|
相对路径 | dir/file.txt → 保留 | 同左 |
绝对路径 | /etc/hosts → 变成etc/hosts | /etc/hosts → 保留原路径 |
安全提示 | 安全(不会覆盖系统文件) | 危险(可能覆盖系统文件) |
五、压缩效率比较
不同压缩方法的压缩效率和速度有所不同:
-
gzip (
-z
):速度较快,压缩率中等 -
bzip2 (
-j
):速度较慢,压缩率较高 -
xz (
-J
):速度最慢,压缩率最高
选择哪种压缩方式取决于你对速度和压缩率的需求。