Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归档多个文件或目录到单个归档文件中,并且归档文件可以进一步使用 gzip 或者 bzip2 等技术进行压缩。换言之,tar 命令也可以用于备份:先是归档多个文件和目录到一个单独的 tar 文件或归档文件,然后在需要之时将 tar 文件中的文件和目录释放出来。
本文将介绍 tar 的 17 个实用示例。
tar 命令语法如下:
# tar <选项> <文件>
下面列举 tar 命令中一些常用的选项:
--delete : 从归档文件 (而非磁带) 中删除
-r, --append : 将文件追加到归档文件中
-t, --list : 列出归档文件中包含的内容
--test-label : 测试归档文件卷标并退出
-u, --update : 将已更新的文件追加到归档文件中
-x, --extract, --get : 释放归档文件中文件及目录
-C, --directory=DIR : 执行归档动作前变更工作目录到 DIR
-f, --file=ARCHIVE : 指定 (将要创建或已存在的) 归档文件名
-j, --bip2 : 对归档文件使用 bzip2 压缩
-J, --xz : 对归档文件使用 xz 压缩
-p, --preserve-permissions : 保留原文件的访问权限
-v, --verbose : 显示命令整个执行过程
-z, gzip : 对归档文件使用 gzip 压缩
注 : 在 tar 命令选项中的连接符 -
是可选的(LCTT 译注:不用 -
也没事。这在 GNU 软件里面很罕见,大概是由于 tar 命令更多受到古老的 UNIX 风格影响)。
示例 1:创建一个 tar 归档文件
现在来创建一个 tar 文件,将 /etc/ 目录和 /root/anaconda-ks.cfg 文件打包进去。
[root@linuxtechi ~]# tar -cvf myarchive.tar /etc /root/anaconda-ks.cfg
以上命令会在当前目录创建一个名为 "myarchive" 的 tar 文件,内含 /etc/ 目录和 /root/anaconda-ks.cfg 文件。
其中,-c
选项表示要创建 tar 文件,-v
选项用于输出 tar 的详细过程到屏幕上,-f
选项则是指定归档文件名称。
[root@linuxtechi ~]# ls -l myarchive.tar
-rw-r--r--. 1 root root 22947840 Sep 7 00:24 myarchive.tar
[root@linuxtechi ~]#
示例 2:列出归档文件中的内容
在 tar 命令中使用 –t
选项可以不用释放其中的文件就可以快速列出文件中包含的内容。
[root@linuxtechi ~]# tar -tvf myarchive.tar
列出 tar 文件中的指定的文件和目录。下列命令尝试查看 anaconda-ks.cfg 文件是否存在于 tar 文件中。
[root@linuxtechi ~]# tar -tvf myarchive.tar root/anaconda-ks.cfg
-rw------- root/root 953 2016-08-24 01:33 root/anaconda-ks.cfg
[root@linuxtechi ~]#
示例 3:追加文件到归档(tar)文件中
-r
选项用于向已有的 tar 文件中追加文件。下面来将 /etc/fstab 添加到 data.tar 中。
[root@linuxtechi ~]# tar -rvf data.tar /etc/fstab
注:在压缩过的 tar 文件中无法进行追加文件操作。
示例 4:从 tar 文件中释放文件以及目录
-x
选项用于释放出 tar 文件中的文件和目录。下面来释放上边创建的 tar 文件中的内容。
root@linuxtechi ~]# tar -xvf myarchive.tar
这个命令会在当前目录中释放出 myarchive.tar 文件中的内容。
示例 5:释放 tar 文件到指定目录
假如你想要释放 tar 文件中的内容到指定的文件夹或者目录,使用 -C
选项后边加上指定的文件的路径。
[root@linuxtechi ~]# tar -xvf myarchive.tar -C /tmp/
示例 6:释放 tar 文件中的指定文件或目录
假设你只要释放 tar 文件中的 anaconda-ks.cfg 到 /tmp 目录。
语法如下:
# tar –xvf {tar-file } {file-to-be-extracted } -C {path-where-to-extract}
[root@linuxtechi tmp]# tar -xvf /root/myarchive.tar root/anaconda-ks.cfg -C /tmp/
root/anaconda-ks.cfg
[root@linuxtechi tmp]# ls -l /tmp/root/anaconda-ks.cfg
-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg
[root@linuxtechi tmp]#
示例 7:创建并压缩归档文件(.tar.gz 或 .tgz)
假设我们需要打包 /etc 和 /opt 文件夹,并用 gzip 工具将其压缩。可以在 tar 命令中使用 -z
选项来实现。这种 tar 文件的扩展名可以是 .tar.gz 或者 .tgz。