linux归档是一个聚集众多文件并将它们组合为一个大文件的过程,它通常作为系统备份的一部分,而且通常也用于将旧数据从某个系统移到某些长期存储设备的情况下;tar命令可以为linux的文件和目录创建档案。
本教程操作环境:linux5.9.8系统、Dell G3电脑。
linux归档是什么意思?
归档是与压缩操作配合使用的一个常用文件管理任务。归档是一个聚集众多文件并将它们组合为一个大文件的过程,它通常作为系统备份的一部分,而且通常也用于将旧数据从某个系统移到某些长期存储设备的情况下。
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
Linux tar命令
tar命令是linux上将 多个文件打包程一个文件包。方便传输,也可以用于文件备份。我们也可以用tar来解压归档文件。
tar命令压缩格式
tar命令支持的压缩格式,一般我们在使用tar命令的时候会同时对文件压缩,以降低空间使用率。通常我们会采用以下命名规范来约定我们使用了哪种压缩方式。
.tar 默认模式,不压缩,只是将所有文件放到一个包里。
.tar.gz 常用模式,采用gzip算法压缩。压缩率一般,压缩时间中等。
.tar.bz2 不常用。采用bz2算法压缩。压缩率稍差,压缩时间较短。
.tar.xz 不常用,采用xz算法压缩。压缩率较好,压缩时间较长。
tar概要简介
tar语法介绍
tar 一般支持以下两种语法格式,第二种是旧的方式。
tar OPTION... [NAME]... tar LETTER... [ARGUMENT]... [OPTION]... [NAME]...
tar的主要参数,我们称之为【操作类型】:例如,c创建,x解压。其他的参数我们称之为【附加选项】,用来改变我们操作的进展方式例如文件名字,待归档的目标文件。
主要参数 【操作类型】一定要放在最前方。
两种语法格式中的[NAME]都是指明我们要待归档的文件名字,[NAME]可以是文件或者目录,或者是多个文件或目录。 [NAME]一定要指定明确,而且在我们执行tar命令之前一定是要已经存在与文件系统上。
tar的其他知识介绍
tar "将相对路径的文件名解释为相对目录。如果我们指定了绝对路径, tar会将首个/去掉来进行打包。这么做的目的是为了防止解压的时候替换掉系统目录。除非我们故意指定【–absolute-names】选项。
如果我们指定的是一个目录的话,tar会递归指定目录下所有的子目录和文件来进行归档,例如我们指定/,意思就是整个文件系统都将要被归档。
在使用shell通配符的时候区别文件名字和待归档成员是非常重要的。原因在于,shell只会对存在的文件使用通配符, tar自己也会对归档成员使用通配,所以我们必须保证通配符只针对tar起作用,而不是shell.通常我们可以使用反斜杠在 "*"或“?”或者放在单引号中,这样旧可以了
通常我们都会把支队的文件放在命令行上,实际上我们也可以通过读文件的方式来指定归档后的文件名。'–files-from=FILE-OF-NAMES' ('-T FILE-OF-NAMES')
如果我们不指定归档后的文件名,那么 追加,删除,等操作命令不会做任何操作。create会输出一个诊断信息,并阻止tar操作。其他的操作选项会对整个archive目录操作
除了正常成功退出,tar会因为很多原因失败。有的情况是可以恢复的,例如当tar命令不是正常组织书写时,错误会推迟到直到文件处理完会报告出来。.有的错误可能不是故意的,但是还是有危险,那么接下来,tar会立即退出。
然而所有非正常的退出,不论是立即的还是推迟的,都会有错误输出,并且会有诊断信息。
可能的tar程序退出码有:0(正常退出),1(有文件发生变化了),2(严重错误,不可恢复的错误)
tar选项风格
三种选项风格
标准tar命令一共支持8种操作模式让我们去完成多样任务。每次使用tar命令我们只能选择一种操作模式。根据实际情况,我们可能会希望指定tar操作模式的运行。例如我们可能修改outputs的输出格式。或者我们想要文件格式需要我们去特殊指定操作顺序。
tar选项是在我们指定tar操作模式后附加的选项。根据tar的操作模式,我们可以指定一个或多个选项。不同的选项有不同的作用,通常情况下,选项会修改该操作模式具体内容。例如修改归档格式,归档文件名,或者用户交互级别。
有些选项对所有操作模式都会有效,有些选项只对特定的操作模式有效。我们会经常使用一些固定的选项。其他的可能很少用到,或基本不会用到。
选项是大小写敏感的,例如-T和-t是不同的,T要求一个参数名字来指明文件名或文件列表。t则不需要参数 ,是–list的另一种书写方式。
tar选项通常支持3中不同的风格: 长命名型(–),短命名型(-),旧命名方式(没有-)。操作模式或选项都可以使用任意一种风格。3中不同的风格是在不同的时期开发出来嘚。
有些选项是需要一个参数的,在哪里放置参数,通常的时候需要根据我们使用哪种风格。这些区别可能是微妙的,但是却很重要。选项放置在错误的位置,可能会导致覆盖一些重要的文件。我们必须要注意到这些不同点。而且只使用我们所了解的选项,直到我们对其他的选项也了解了。那些需要接收参数的选项,他们可能会有最长或短的形式,而没有旧风格的对应选项。使用这些需要指定参数的选项的规则是非常严谨的。
例如–file选项需要接收一个归档文件名作为参数。如果我们不指定归档文件名,tar会使用一个默认的但另我们困惑名字,建议我们一定要指定一个具体的归档文件名字。
长命名选项风格
tar所有的参数选项都至少有一个长命名型的参数。长命名参数选项比短命名和旧参数名字类型显示更加的清晰。有的时候长名字选项会有不同的名字但是却是相同的作用,例如–compare和–dif是同一个意思。另外长命名方式,也可以使用唯一的缩写,例如–create可以用–cre来代替。因为没有其他的选项以–cre开头。
tar 长命名选项更加的明显和容易记忆,而且他们的名字也容易辨认。例如 tar –create –verbose –blocking-factor=20 –file=/dev/rmt0,全部使用的是长命名型参数,可以显而易见的看出每个参数的含义。
长命名选项必须接收参数的话,要立即在该选项后面书写, 有两种方式去指定必须的参数,一种是使用空格,另一种是使用=符号。例如–file选项我们可以使用–file archive.tar 或者–file=archive.tar两种方式来制定参数。
对应地,如果选项可以接收也可以不接收参数的话。这种情况下如果要接收参数,必须使用=符号来指定。例如 –backup 可选接收参数。如果要指定的话,必须使用'–backup=BACKUP-TYPE'.
短命名选项风格
大多数的选项也有对应的短命名选项,短命名选项使用-符号,并且紧跟一个字母。例如 -t(对应长命名选项–list),这些形式在功能上是完全相同的,可以互换。
相对于长命名选项,短命名方式一个明显的优点就是书写很方便。
短命名选项如果需要在选项后面立即接收参数的话,通常以空格来实现。 也可以省略空格,立即接着选项书写,例如指定归档名字 我们可以使用-f archive.tar(有空格) -farchive.tar(省略空格),–file=archive.tar. -f ARCHIVE-NAME和–file=ARCHIVE-NAME都表示这个选项指定了归档文件名。
有可选参数的短命名选项,如果要指定参数的时候,需要参数紧跟短选项名字,不能使用任何空格。
短命名选项可以放在一起书写,但不是要求的。当短选项以集合成片出现时,仅在选项开始使用一个-,例如tar -cvf,同时只有最后一个选项允许接收必须参数。(将许多选项集中在一起,最后一个选项有一个参数,这是一种相当不透明的写法。)
当选项分开使用时,每个选项的参数需要紧跟着该选项。 tar -c -v -b 20 -f /dev/rmt0。如果参数没有调整好,可能会导致文件被覆盖。
当我们重新调整选项时,要注意同时移动属于该选项的参数。
旧选项风格
像短命名选项一样,旧选项风格也只有一个字母。但是,旧风格选项必须将所有选项放在一起,不得有空格将他们分开,或者-连接他们。在tar命令和空格之后,比较紧跟这些字母选项的集合。旧选项不能在任意地方出现。旧选项风格的选项和短命名风格的选项含义是一样的。例如 在旧选项风格中,选项 t 和 短命名选项-t 已经长命名选项–list有一样的作用。 tar cv 命令中,选项v是c选项的额外附加内容。
在旧选项风格中,但选项需要参数的时候,这些选项要一起提供,所有的选项按选项书写顺序提供。例如 tar -c -v -b 20 -f /dev/rmt0 要写成 tar cvbf 20 /dev/rmt0这里20是b选项的参数 /dev/rmnt0是f的参数。
我们可以看出,旧风格选项,匹配选项字母和对应的参数是很困难的,而且很容易令人困惑。短命名方式逗比旧命名方式要好很多。如果要调整选项的字母,必须要同时准确地调整对应的参数位置。
旧选项风格有的时候甚至可以震惊一个熟悉的用户。
tar cfz archive.tar.gz file 这个例子中 archive.tar.gz 被认为是f的参数,z是压缩选项。
tar -cfz archive.tar.gz file 这个例子中 z会被认为是f的选项值,尽管不是我们想的。
旧选项风格是为了向下兼容而保留的。而且很多用户已经习惯了这种方式。
第二个例子我们有几种方式来修改。
tar -czf archive.tar.gz file tar -cf archive.tar.gz -z file tar cf archive.tar.gz -z file
通常tar命令的第一个选项一般都会当做包含操作模式和选项来对待处理,尽管没有用-开始。因此 tar c与tar -c一样,都是和–create一样来创建归档。
混合选项风格
三种选项风格可以同时出现在一条tar 命令中,但是旧选项必须在tar命令后 第一个出现,现代风格的选项必须在旧选项集合输入之后出现,这个是必须遵守的原则,否则可能我们输入的命令跟我们预想的结果根本不一样。可能会造成严重的错误或灾难。
tar选项
操作模式
'–concatenate' '–catenate' '-A' 将其他归档文件放在当前归档文件末尾
'–append' ' -r' 追加文件到归档文件
'–compare' '–diff' '-d' 将归档文件和文件系统上的文件进行对比
'–create' '-c' 创建一个归档文件
'–delete' 从归档文件中删除一些文件。(不能在tape上操作)
'–extract' '–get' '-x' 提取归档文件到当前文件系统
'–list' '-t' 显示归档文件的组成文件列表
'–update' '-u' 更新归档文件中的某个文件,只有在该文件有更新时。或者不存在与归档文件。
通用选项
-C, –directory=DIR 改变工作目录。
-f, –file=ARCHIVE 指定归档文件名
-j, –bzip2 使用bzip2压缩方式过滤
-J, –xz 使用xz压缩方式过滤
-p, –preserve-permissions 解压时保留文件的权限。
-v, –verbose 详细的列出处理的文件
-z, –gzip 使用gzip压缩方式过滤
提取时覆盖选项
–remove-files 提取归档后删除归档文件
-k –keep-old-files 执行的时候不覆盖已经存在的文件,会输出错误
–keep-newer-files 执行的时候不覆盖比archive里文件新的文件
–keep-directory-symlink 不把已经存在的连接替换成目录
–no-overwrite-dir 保存已经存在的目录的原信息
–overwrite 覆盖已经存在的文件
–overwrite-dir 覆盖已经存在的目录
–recursive-unlink 在提取目录文件前清除该目录结构
–skip-old-files 不替换已经存在的文件。静默方式跳过
-U, –unlink-first 在提取之前先删除所有文件
-W, –verify 校验
处理文件的属性
–atime-preserve[=METHOD] 保存文件atime到归档文件
–delay-directory-restore 直到解压完才改变目录的时间戳属性
–group=NAME 强制修改文件所属组
–mode=CHANGES 强制连接模式修改
–mtime=DATE-OR-FILE 修改文件的mtime
-m, –touch 不提取文件的 mtime
–no-delay-directory-restore 取消delay-directory-restore
–no-same-owner extract files as yourself (default for ordinary users)
–no-same-permissions apply the user's umask when extracting permissions from the archive (default for ordinary users)
–numeric-owner 使用number来表示owner和group
–owner=NAME 修改归档的文件的owner
-p, –preserve-permissions, –same-permissions 保留文件的属性
–preserve 保留文件的属性 same as both -p and -s
–same-owner 保留文件的属性
-s, –preserve-order, –same-order 保留文件的属性
本地目录文件的选择
–add-file=FILE 最加文件到归档中如果一个文件名字以-开始
–backup[=CONTROL] 删除之前先备份
-C, –directory=DIR 修改工作目录到指定目录
–exclude=PATTERN 排除一些文件
–exclude-backups 排除掉 备份和锁文件
–exclude-caches 排除掉cache(CACHEDIR.TAG)的目录其他文件,除了tagfile
–exclude-caches-all 排除掉包括CACHEDIR.TAG的目录
–exclude-caches-under 排除掉所有有tagfile的目录的其他文件,但是有目录
–exclude-tag=FILE 排除掉指定含义某文件的目录,除了该文件
exclude contents of directories containing FILE, except for FILE itself
–exclude-tag-all=FILE exclude directories containing FILE 排除掉有某文件的整个目录
–exclude-tag-under=FILE 排除掉有某文件的目录里的所有内容
–exclude-vcs 排除掉vcs版本控制的目录
-h, –dereference 保存软连 ,将目标文件也归档起来
follow symlinks; archive and dump the files they point to
–hard-dereference 保存硬软连 ,将目标文件也归档起来
-K, –starting-file=MEMBER-NAME 以目录中某个文件开始归档,前面的文件不归档
–newer-mtime=DATE 当内容修改时,对比文件的日期和时间
-P, –absolute-names 以绝对路径来打包。提取时会覆盖源文件–recursion
–suffix=STRING 删除之前先备份,以设置的前缀来覆盖
-X, –exclude-from=FILE 排除掉指定文件里的约定的文件
推荐学习:《Linux视频教程》