在这篇文章中,我们将通过实际例子学习 linux 下的 tar 命令。

tar 命令用于将多个文件和目录的归档文件创建为单个归档文件,归档文件的扩展名为tar。tar 可以使用 gzip 和 bzip2 技术进一步压缩归档文件。tar (tape archive) 磁带归档,用于从命令行创建和提取归档文件。Tar 还被视为命令行备份和恢复实用程序。

基础语法

# tar <options> <files>

可选参数

  • -c : create a new archive
  • -f : Archive file name
  • -t, –list : list the contents of an archive
  • -x, –extract, –get : extract files from an archive
  • -d, –diff, –compare : find differences between archive and file system
  • –delete : Delete from the archive.
  • -r, –append : append files to the end of an archive
  • -v : Verbose output
  • -u, –update : only append files newer than copy in archive
  • -X, –exclude-from=file : exclude patterns listed in file
  • -C, –directory=DIR: Change to DIR before performing any operations.
  • -j, –bzip2 : Compress and extract archive through bzip2
  • -J, –xz : Compress and extrach the archive through xz
  • -z, –gzip : Compress and extract the archive through gzip

注意:使用选项时, tar 命令中的连字符( - )是可选的。

(1) 创建归档文件

为 /etc 目录和 /var/log/syslog 文件创建一个归档文件

# tar -cvf archive.tar /etc /var/log/syslog

上面的命令将在当前文件夹中创建一个名称为 achive.tar 的 归档文件。归档文件包含 /etc 和 /var/log/syslog 目录下的所有文件和目录。

在上述命令中,-c 选项用于创建 tar 文件,-v选项用于详细输出,-f 选项用于指定存档名称。

# ls -l archive.tar
-rw-r--r-- 1 root root 12554240 Oct 7 08:25 archive.tar
#

(2) 列出归档文件的内容

使用 -t 选项可以查看 tar 文件的内容,而不提取内容。

# tar -tvf archive.tar

从 tar 文件中列出特定的文件或目录。在下面的示例中,我们试图列出 tar 文件中是否有 var/log/syslog 目录。

# tar -tvf archive.tar var/log/syslog
-rw-r----- syslog/adm 951215 2022-10-07 08:18 var/log/syslog
#

(3) 将文件追加到存档中

-r 选项用于将文件附加或添加到现有的存档文件中。让我们将 /var/log/auth.log 文件添加到 archive.tar 归档中,运行如下命令

# tar -rvf archive.tar /var/log/auth.log

验证文件是否被追加,运行如下命令

# tar -tvf archive.tar var/log/auth.log
-rw-r----- syslog/adm 52790 2022-10-07 08:30 var/log/auth.log
#

注意: 在压缩的 tar 文件中,我们不能追加文件或目录。

(4) 提取归档文件

要提取归档文件,请在 tar 命令中使用 -x 选项,如下所示。

# tar -xvf archive.tar

以上命令将解压 archive.tar 文件中的所有文件和目录到当前目录。

(5) 解压归档文件到特定的文件夹

使用 -C 选项,解压归档文件到特定的目录,后面跟着文件夹的路径。如下所示

# tar -xvf archive.tar -C /tmp/

(6) 从归档文件中提取特定文件

假设我们要从归档文件中 /tmp 文件夹中提取 /etc/netplan/01-network-manager-all.yaml 文件。

Syntax : # tar -xvf {tar-file } {file-to-be-extracted } -C {path-where-to-extract}

# tar -xvf archive.tar etc/netplan/01-network-manager-all.yaml
etc/netplan/01-network-manager-all.yaml
#
# ls -l etc/netplan/01-network-manager-all.yaml
-rw-r--r-- 1 root root 104 Aug 9 12:55 etc/netplan/01-network-manager-all.yaml
#

(7) 创建并压缩归档文件 (gzip)

假设我们要创建一个 /etc 和 /opt/opt 文件夹的归档文件,并且还希望使用 gzip 工具将其压缩。可以使用 tar 命令中的 -z 选项来实现。此类归档文件的扩展名是 tar.gz 或 tgz

# tar -zcpvf archive.tar.gz /etc/ /opt/
Or
# tar -zcpvf archive.tgz /etc/ /opt/

(8) 创建和压缩归档文件 (bzip2)

假设我们要创建一个 /etc 和 /opt/opt 文件夹的归档文件,并且还希望使用 bzip2 工具将其压缩。可以使用 tar 命令中的 -j 选项来实现。此类归档文件的扩展名是 tar.bz2 或 tbz2

# tar -jcpvf archive.tar.bz2 /etc/ /opt/
Or
# tar -jcpvf archive.tbz2 /etc/ /opt/

(9) 在创建归档时排除特定的文件类型

在 tar 命令中使用 --exclude 选项可以在创建归档文件时排除特定的文件类型。假设在创建压缩 tar 文件时要排除 html 文件类型

# tar -zcpvf archive.tgz /var/ /opt/ --exclude=*.html

(10)列出压缩归档文件的内容 (tar.gz或tgz)

使用 -t 选项列出扩展名为 tar.gz 或 tgz 的压缩归档文件的内容,如下所示

# tar -tvf archive.tgz | more

List-Content-Compressed-Archive-file

(11) 列出压缩归档文件的内容 (tar.bz2或tbz2)

使用 -t 选项列出扩展名为 tar.bz2 或 tbz2 的压缩归档文件的内容,如下所示

# tar -tvf archive.tbz2 | more
or 
# tar -tvf archive.tar.bz2 | more

(12) 提取压缩归档文件 (tar.gz或.tgz)

使用 -x-z 选项提取扩展名为 tar.gz 或 tgz 的压缩归档文件的内容,如下所示

# tar -zxpvf archive.tgz -C /tmp/

上面的命令将把归档文件提取到 /tmp 目录

注意: tar 命令会自动分析压缩文件类型,这意味着 tar 命令中指定压缩类型是可选的。示例如下所示:

# tar -xpvf archive.tgz -C /tmp/

(13) 提取压缩归档文件 (tar.bz2 或 .tbz2)

使用 -x-j 选项提取扩展名为 tar.bz2 或 tbz2 的压缩归档文件的内容,如下所示

# tar -jxpvf archive.tbz2 -C /tmp/
Or
# tar xpvf archive.tbz2 -C /tmp/

(14) 使用 tar 命令计划备份

在某些场景中,我们必须每天创建特定文件和目录的归档文件。假设我们必须每天备份整个 /opt 文件夹,这可以通过 tar 命令 + 计划任务来实现。示例如下所示:

# tar -zcvf optbackup-$(date +%Y-%m-%d).tgz /opt/

然后为上述命令创建一个计划任务

扩展阅读: 如何在 Linux 中使用 Crontab 自动化任务

(15) 用 -T 和 -X 选项创建压缩归档文件

在日常活动中,系统管理员可能需要在使用 tar 命令创建归档时排除和包含文件。这可以通过在 tar 命令中使用 include (-T) 和 exclude (-X) 文件来实现。

假设我们要存档和压缩 /etc,/opt 和 /home 之类的目录,并希望排除文件 /etc/sysconfig/kdump 和 etc/etc/sysconfig/foreman

首先,创建一个文本文件 /root/tar-conclude 和 /root/tar-exclude,并将以下内容放入相应的文件中。

# cat /root/tar-include
/etc
/opt
/home
#

# cat /root/tar-exclude
/etc/sysconfig/kdump
/etc/sysconfig/foreman
#

现在,运行以下命令

# tar zcpvf mybackup-$(date +%Y-%m-%d).tgz -T /root/tar-include -X /root/tar-exclude

(16)查看.tar,.tgz 和.tbz2 文件的大小

使用以下 tar 命令查看压缩归档文件的大小

# tar -czf - data.tar | wc -c
427
# tar -czf - archive.tgz | wc -c
1450527
#
# tar -czf - archive.tbz2 | wc -c
1206287

(17) 将大 tar 文件拆分为小文件

在类 Linux 操作系统中,可以使用 split 命令 将大文件拆分为较小的文件,大归档文件也可以使用 Split 命令将其拆分为较小的部分。

Let’s assume we want to split ‘bigarchive.tgz‘ file into smaller parts of each 6 MB.

假设我们想要把 bigarchive.tgz 文件拆分成更小的部分,每个 6 MB。

Syntax :  split -b <Size-in-MB> <tar-file-name>.<extension> “prefix-name”
# split -b 6M bigarchive.tgz bigarchive-parts
# ls -l bigarchive-parts*
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsaa
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsab
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsac
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsad
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsae
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsaf
-rw-r--r-- 1 root root 6291456 Oct 7 10:43 bigarchive-partsag
#

我们可以通过网络将这些文件转移到其它服务器上,然后使用下面的 cat 命令将所有文件合并到一个 tar 压缩文件中

# cat bigarchive-parts* > bigarchive.tgz

扩展阅读: Linux中16个 CAT 命令示例

我的开源项目

酷瓜云课堂-开源在线教育解决方案


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。