在这篇文章中,我们将通过实际例子学习 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
(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 命令示例
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。