共计 4655 个字符,预计需要花费 12 分钟才能阅读完成。
在这篇文章中,咱们将通过理论例子学习 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 命令示例
我的开源我的项目
- course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
- course-tencent-cloud(酷瓜云课堂 – github 仓库)