tar

创建或恢复tar 档案文件


语法格式

tar [–]c [-ahjlMPvwWzZ] [-b n] [-C dir] [-f archive] [-F script] [-H fmt]
[-I prog] [-L n] [-N date-or-file] [-T file] [-V name] [-X file]
[gnu-opts] filelist
tar [–]r [-v] [-f archive] filelist
tar [–]t [-aijklMoOpUvwzZ] [-f archive] [-X file] [filelist]
tar [–]u [-v] [-f archive] filelist
tar [–]x [-aijklMoOpUvwzZ] [-b n] [-C dir] [-f archive] [-I prog] [-K file]
[-T file] [-V name] [-X file] [gnu-opts] [filelist]
tar [-]A archive2 –f archive
tar [-]d –f archive
tar –-delete delete-file –f archive
tar [-?|--help] [--usage] [–-version]

命令简介

tar是Linux系统备份与恢复数据的基本工具之一。利用tar命令,可以把一组文件组合在一起,存储在单个磁带或磁盘等档案文件中,也可以从档案文件中恢复指定的文件或全部文件。tar具有8种不同的工作模式,可用于创建、替换、查询、更新、抽取、追加或比较档案文件,删除档案文件中的指定文件等。在运行tar命令时,指定的第一个选项必须是“-c”、“-r”、“-t”、“-u”、“-x”、“-A”、“-d”或“--delete”选项之一,用以确定tar的工作模式。然后可以根据需要,选用其他辅助选项。其中,有些辅助选项是默认的,如“--format=gnu”、“-f -”或“-b 20”等。必要时可以修改或另行指定,或增加其他辅助选项,如“-v”等。

在上述语法格式中,filelist是上述操作使用的档案文件中的成员文件列表。除了在命令行上指定文件名参数,也可以选用“-T”选项,利用指定的文件提供文件名参数列表。

在解释参数文件列表时,tar把指定的文件作为相对于当前工作目录的文件处理,不管文件的路径名是否为绝对路径,除非指定了“--absolute-names”选项。

如果指定的文件是一个目录,tar将会递归地处理目录中的所有文件与子目录。例如,在创建档案文件时,如果指定的文件名参数是“/”,意味着把文件系统中的所有文件和目录归档写到一个tar档案文件中。

在指定文件名参数时,如果文件名中含有“*”或“?”等特殊字符,必须加引号或转义符号,确保能够把文件名参数准确地传递给tar命令。

命令选项(工作模式)

-A, --catenate, --concatenate  把第二个档案文件archive2附加到“-f”选项指定的档案文件archive后面,最终形成一个合并的档案文件archive

-c, --create  创建。组合指定的文件,创建一个新的档案文件。如果同名的档案文件已经存在,在创建新的档案文件之前将会清除原有的档案文件。

-d, --diff, --compare  比较“-f”选项指定的档案文件archive与磁盘文件系统中的文件,检查两者之间是否存在差别,如文件大小和修改时间等。

-r, --append  替换。把指定的文件写到档案文件的后部。采用这个选项时,原有的同名文件将会继续保留在档案文件中,并与新的文件共存于档案文件内。当使用“-x”选项抽取文件时,最新的同名文件将会取代原有的文件而保留下来。

-t, --list  显示。显示档案文件中的文件列表。文件列表的输出格式类似于“ls -l”命令。如果使用“-t”选项时未指定文件参数,tar将会显示档案文件中的所有文件。如果指定了文件参数,tar只会列出与文件参数匹配的文件。

-u, --update  更新。如果档案文件中不存在,或指定的文件比档案文件中的同名文件更新,把指定的文件写到档案文件的后部。由于这个选项要求执行更多的检查,故其运行速度相对较慢。

-x, --extract, --get  抽取或恢复文件。从档案文件中抽取指定的文件,按照档案文件的目录结构,复制到当前工作目录中。如果使用“-x”选项时未指定文件参数,tar将会抽取档案文件中的所有文件。如果指定了文件参数,tar只会抽出与文件参数匹配的文件。如果指定的文件参数含有目录,tar除抽取匹配的目录之外,还将递归地抽取目录中的所有文件。如果档案文件中包含若干同名的文件,后抽取的文件将会覆盖先前抽取的文件。在抽取文件时,tar将会尽可能确保抽取文件的文件属主、修改时间和访问权限等属性与档案文件中的初始文件保持一致。注意,在使用“-c”选项创建档案文件时,应尽可能采用相对路径名,否则,tar命令可能无法正确地匹配文件。

--delete  从档案文件中删除指定的文件(仅适用于磁盘上的档案文件,磁带上的档案文件无效)。

命令选项(设备文件选择与读写处理)

-b n, --blocking-factor=n  使用“n * 512”字节的数据(n的默认值为20)作为一个读写记录,创建或读取档案文件。在读取档案文件时,tar通常会自动确定逻辑记录的大小。

-f archive, --file=archive  使用指定的文件作为档案文件。档案文件可以是文件系统中的一个普通文件,也可以是一个设备文件(如磁带机等)。

-F script, --info-script=script, --new-volume-script=script  在创建多卷档案文件时,每当写到存储介质(如磁带)的结尾时运行指定的脚本文件(蕴含着与“-M”选项一起使用)。

-i, --ignore-zeros  在读取档案文件时,忽略全为零(意味着文件结束)的数据块。

-L n, --tape-length=n  指定存储介质的容量或档案文件的大小,以KB为单位(即“n×1024”个字节)。如果复制的档案文件大于这个选项指定的容量,当写出n-KB的数据时,tar将会提示用户更换新的存储介质(如磁带),从而能够把档案文件分布存储到多个介质中。对于具有固定容量的存储介质(如磁带和软盘),这个选项是非常有用的,可用于创建多卷形式的档案文件。

-M, --multi-volume  创建、显示或抽取多卷档案文件。

--record-size=num  指定读写记录的字节数。注意,num必须是512的倍数。

命令选项(覆盖控制)

-k, --keep-old-files  在恢复期间,禁止使用抽取的文件覆盖现有的同名文件。

-U, --unlink-first  在从档案文件中抽取指定的文件之前,首先删除文件系统中的相应文件。

-W, --verify  创建档案文件时,要验证指定的文件已正确地写入档案文件中。

--keep-newer-files  在恢复期间,禁止使用档案文件中的老文件覆盖现有的同名新文件。

--no-overwrite-dir  在恢复期间,保持现有目录的元数据不变。

--overwrite  在恢复期间,可以使用抽取的文件或目录覆盖现有的文件或目录的元数据。

--overwrite-dir  在恢复期间,可以使用抽取的目录覆盖现有目录的元数据。这是默认的处理动作。

--recursive-unlink  在恢复期间,如果档案文件中的目录与现有的目录同名,在抽取目录之前需要递归地清空现有的目录层次,删除目的目录中的任何文件与子目录。

--remove-files  把指定的文件加入档案文件之后,从文件系统中删除源文件。

命令选项(I/O控制)

-O, --to-stdout  在恢复文件期间,把抽取的文件写到标准输出,而非文件系统。

--ignore-failed-read  在读取文件期间遇到问题时禁止中途退出,而是要继续尝试读取下一个文件。

--occurrence[=num]  当利用命令行或“-T”选项指定欲查询、恢复、比较或删除的文件参数表时,仅处理档案文件中第num个同名的文件,num的默认值为1。注意,这个选项只能与“-t”、“-x”、“-d”或“--delete”选项一起使用。

--to-command=cmd  在恢复文件期间,通过管道机制,把抽取的文件写到指定命令的标准输入。

命令选项(文件属性处理)

-m, --touch  在恢复期间,以抽取档案文件时的时间作为文件的修改时间,取代档案文件中文件原有的修改时间。如果未指定“-m”选项,tar将恢复抽取的文件在档案文件中的初始修改时间。

-o, --no-same-owner  在恢复期间,不管档案文件中文件原有的用户属性如何,抽取的文件归属于运行tar命令的用户。对于普通用户而言,这是默认的处理方式。参见“--same-owner”选项。

-p, --preserve-permissions, --same-permissions  从档案文件中抽取文件时,同时抽取文件的访问权限,用作新建文件的访问权限。对于超级用户而言,这是默认的处理方式。

--acls  把文件的ACL属性写入档案文件中。

--atime-preserve[=method]  在读取文件时保持文件的访问时间不变。这个选项仅对超级用户或处理自己拥有的文件时有效。为保持文件的访问时间不变,可选的方法是replace(默认)与system。如果指定的method参数是replace,表示在读取文件之前,首先要记住文件的访问时间,读取文件之后再恢复文件的访问时间。如果指定的method参数是system,访问时间的维持需要由系统的底层支持与文件系统配合实现。

--delay-directory-restore  在恢复期间,延迟抽取目录的修改时间与访问权限的设置,直至抽取结束。

--group=group  把文件写入档案文件时,使用指定的用户组名或用户组ID替代文件原有的用户组属性。

--mode=mode  把文件写入档案文件时,使用指定的模式(包括访问权限)替代文件的实际模式。与chmod命令相同,指定的模式可以是八进制数值,也可以是符号名。

--mtime=time-or-file  把文件写入档案文件时,使用指定的时间替代文件的实际访问时间。在指定时间参数时,可以使用“yyyy-mm-dd hh:mm:ss”等格式直接指定(参见date命令),也可以指定一个参考文件(采用绝对路径名或首字符为“.”的相对路径名),以指定文件的访问时间为准,设置文件的访问时间。

--no-acls  禁止存储或从档案文件中抽取ACL属性。

--no-same-permissions  从档案文件中抽取文件时,不管档案文件及其中每个文件先前的归属如何,采用当前用户自己的用户属性与屏蔽位(umask)创建文件,恢复的文件归属运行tar命令的用户。对于普通用户而言,这是默认的处理动作。

--no-selinux  禁止存储或从档案文件中抽取SELinux属性。

--no-xattrs  禁止存储或从档案文件中抽取扩充的文件属性。指定这个选项相当于同时指定了“--no-acls”与“--no-selinux”选项。

--numeric-owner  在创建档案文件时,总是使用用户ID或用户组ID而非相应的名字设置文件的用户与用户组属性。

--owner=user  把文件写入档案文件时,使用指定的用户名或用户ID替代文件原有的文件属主。

--same-owner  在恢复期间,抽取的文件保持文件在档案文件中原有的用户属性不变。对于超级用户而言,这是默认的处理方式。参见“--no-same-owner”选项。

--selinux  在创建档案文件时,把文件的SELinux属性写入档案文件中。

--xattrs  存储或从档案文件中抽取扩充的文件属性。指定这个选项相当于同时指定了“--acls”与“--selinux”选项。

命令选项(档案文件格式选择)

-H fmt, --format=fmt  创建指定格式的档案文件。指定的格式可以是下列之一:

gnu  GNU tar 1.13.x档案文件格式。

oldgnu  GNU tar 1.12及之前的档案文件格式。

pax  POSIX 1003.1-2001档案文件格式。

posix  同上。

ustar  POSIX 1003.1-1988档案文件格式。

v7  早期的UNIX V7 tar档案文件格式。

-V name, --label=name  创建档案文件时,使用指定的名字作为卷标写入档案文件中。在恢复或查询档案文件时,可以使用指定的卷标模式选择匹配的档案文件。

--posix  等同于“--format=posix”选项。

命令选项(压缩控制选项)

-a, --auto-compress  使用档案文件的后缀选择压缩或解压程序。

-I prog, --use-compress-program=prog  使用指定的程序压缩或解压档案文件(指定的程序必须能够处理表示解压动作的“-d”选项)。

-j, --bzip2  创建和抽取档案文件时分别采用bzip2和bunzip2压缩或解压档案文件。

-z, --gzip, --gunzip, --ungzip  创建和抽取档案文件时分别采用gzip和gunzip压缩或解压档案文件。

-Z, --compress, --uncompress  创建和抽取档案文件时分别采用compress和uncompress压缩或解压档案文件。

--no-auto-compress  禁止使用档案文件的后缀选择压缩或解压程序。

命令选项(本地文件选择)

-C dir, --directory=dir  执行任何操作之前,把当前工作目录改换到指定的目录。

-h, --dereference  创建档案文件时,复制符号链接文件指向的文件,而非符号链接文件本身。

-K file, --starting-file=file  在恢复期间,跳过档案文件中前部的文件,直至遇到指定的文件,再从指定的文件开始抽取文件。

-N date-or-file, --newer=date-or-file, --after-date=date-or-file  创建档案文件时,仅把文件修改时间比指定时间或参考文件的修改时间更新的文件写入档案文件中。指定时间时可以采用yyyymmdd或yyyy-mm-dd的格式表示年月日,采用hhmm或hh:mm:ss的形式分别表示时分或时分秒。如果指定的是基准参考文件,应采用绝对路径名或首字符为“.”的相对路径名。

-P, --absolute-names  创建档案文件时,禁止删除文件名前部的“/”字符。

-T file, --files-from=file  作为命令行指定文件参数的补充,从指定的文件file中获取附加的文件名列表。

-X file, --exclude-from=file  使用指定文件中的一组文件名模式作为过滤准则,排除匹配其中任何模式的文件。

--add-file=file  把指定的文件加入档案文件中(当文件名的首字符为连字符“-”时,可以选用这个选项)。

--backup[=method]  在覆盖或删除文件之前,首先要备份文件。参数method指定了如何命名备份文件,其中none或off表示禁止备份文件,t或numbered表示总是采用编号方式命名备份文件,nil或existing表示按现有的或简单的方式处理备份文件,never或simple表示采用简单的方式命名备份文件。

--exclude=pattern  在创建或抽取档案文件时,排除匹配指定模式的文件。

--exclude-backups  在创建或抽取档案文件时,排除备份文件和锁文件。

--exclude-tag=file  除了指定的文件本身,排除包含指定文件的目录中的其他任何文件。

--exclude-tag-all=file  排除包含指定文件的目录。

--hard-dereference  创建档案文件时,备份每个硬链接文件。在恢复文件时能够独立地抽取每个文件。

--newer-mtime=date  在创建档案文件时,仅把指定时间后修改过的文件写入档案文件中。参见“--newer”选项。

--no-recursion  禁止自动地递归处理各级目录。

--null  与“--files-from”选项一起使用时,读取以NULL为文件名终止符的文件名列表。

--recursion  递归地逐层处理各级目录(默认的做法)。

命令选项(文件名转换)

--strip-components=num  在恢复期间,从路径名的根目录开始,删除指定数量的前置目录部分,作为文件抽取后的相对路径名。例如,如果档案文件archive.tar中含有/dir/to/file文件,运行“tar -xvf archive.tar --strip-components=2”命令时,将会把抽取的文件重新命名为tar工作目录中的文件file。

--transform=expr, --xform=expr  使用sed命令支持的替换表达式expr转换文件参数的路径名。例如,“tar -cvf archive.tar --transform='s,^\./,usr/,' .”命令将会使用“usr/”替换文件路径的“./”前缀,作为新的文件路径名的起始目录。

--anchored  从文件名的首字符开始匹配。

--ignore-case  匹配文件名时忽略大小写字母的差别。

--no-anchored  排除文件时可以使用指定的模式匹配“/”后的文件名部分。

--no-ignore-case  匹配文件名时严格区分大小写字母的差别(默认的做法)。

--no-wildcards  禁止使用通配符,仅按文字逐字进行文件名匹配。

--no-wildcards-match-slash  禁止通配符匹配斜线字符“/”。

--wildcards  指定文件名模式时,可以使用星号“*”等元字符(默认)。

--wildcards-match-slash  排除文件时通配符可以匹配斜线字符“/”。

命令选项(输出信息控制)

-l, --check-links  对于每个硬链接文件,如果读写的文件总数与硬链接文件的链接计数不符,显示一条警告信息。

-v, --verbose  显示处理过程中读写的每个文件名。与“-t”选项一起使用时,tar会显示文件的详细属性信息,如文件属主、访问权限和文件大小等,其输出结果类似于“ls -l”命令的输出。

-w, --interactive, --confirmation  当执行潜在的破坏性选项(如覆盖文件)时,在执行之前需请求用户确认。

--checkpoint[=num]  设置检测点,以便在检测点处执行指定的动作,如显示信息、暂停以及执行任何命令等,详见“--checkpoint-action”选项。默认处理动作是每当读写第num个记录时,显示一次进度信息。num 的默认值是10。

--checkpoint-action=action  在“--checkpoint”选项设置的每个检测点处执行指定的处理动作。有效的处理动作是:

bell  生成一个警示音。

dot  显示一个句点“.”。

echo  利用标准错误输出显示一条标准信息(默认的动作)。

echo=str  显示指定的字符串。

sleep=sec  暂停指定的时间(单位为秒)。

exec=cmd  执行指定的命令。

--index-file=file  把命令的详细处理过程写入指定的文件。

--show-defaults  显示tar命令的默认处理动作,包括采用的默认值。

--show-omitted-dirs  在查询或抽取文件时,显示由于不匹配选择准则而跳过或遗漏的每个目录。

--show-transformed-names, --show-stored-names  与文件名转换选项(如“--transform”选项)一起使用时,显示转换后的结果。尤其在创建档案文件时,能够了解存储的文件名是什么。

--totals[=signal]  处理档案文件后显示已经读写的字节总数。如果指定了信号参数signal,当收到指定的信号时,显示当前已经读写的字节总数。可以指定的信号是SIGHUP、SIGQUIT、SIGINT、SIGUSR1和SIGUSR2,或省略“SIG”前缀之后的缩写。

--utc  采用UTC格式显示文件的修改时间。

应用实例

1. 备份src子目录中的源代码文件,创建档案文件src.tar。

$ tar -cvf src.tar src

2. 查询指定档案文件src.tar中的文件。

$ tar -tvf src.tar

3. 恢复指定档案文件src.tar中的所有文件。

$ tar -xvf src.tar

4. 把档案文件atmhdr.tar附加到档案文件atmsrc.tar的后面。

$ tar -A /tmp/atmhdr.tar -f /tmp/atmsrc.tar
$

5. 根据磁盘中的文件,逐一比较档案文件中的文件,检查备份的档案文件是否过期。

$ tar -d -f /tmp/atmsrc.tar

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z