2.tar教程

2.4.常用选项

2.5.两个选项

2.6.创建档案文档

2.7.查看档案文档内容

4.tar操作

4.1.基本操作

4.2.高级操作

4.3.“-c”的选项

链接到压缩命令

2.tar教程


2.4.常用选项

===================

  三个常用选项,又叫三个常用操作模式。

常用选项
短选项 长选项 释义
-c --create 创建新的档案
-t --list 查看档案成员
-x --extract 提取档案成员

2.5.两个选项

===================

  要很好的理解三个操作模式,需要先了解“--file”和“--verbose”。因为她们很有用,使得操作更加明确,避免一些问题。

2.5.1.选项“-f”

  

  long form short form
用法 --file=ARCHIVE-NAME -f ARCHIVE-NAME

  明确指定“tar”的操作对象。如果没有使用该选项明确指定,“tar”会去寻找环境变量“TAPE”以其变量值作为操作对象的档案名。
  通过指定环境变量,查看档案成员列表。

[root@right practice]# ll
total
-rw-r--r--. root root Dec : collection.tar
-rw-r--r--. root root Dec : music.tar
[root@right practice]# export TAPE=/data/practice/music.tar
[root@right practice]# cd
[root@right ~]# tar -tf
tar: option requires an argument -- 'f'
Try `tar --help' or `tar --usage' for more information.
[root@right ~]# tar -t
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh

  通过环境变量,提取档案成员。

[root@right ~]# mkdir test
[root@right ~]# cd test/
[root@right test]# ll
total
[root@right test]# tar -x
[root@right test]# ll
total
drwxr-xr-x. root root Dec : practice

  问题来了,要是没有设定这个环境变量呢?“tar”会去使用一个默认值作为操作对象。(设定的默认值,在该程序编译时指定的。)

  看看目前程序“tar”的默认值,很明显没有设定,答案就确定了,没有就会报错。

[root@right test]# tar --show-defaults \
--format=gnu -f- -b20 --quoting-style=escape \
--rmt-command=/etc/rmt --rsh-command=/usr/bin/ssh

  正因为没有设定环境变量、没有默认值,所以建议在使用“tar”的时候,显式指定该选项及其值。

2.5.2.选项“-v”

  某些操作没有任何显示('--create',
'--append', '--update'),仅仅读取档案时会打印成员名('--list', '--extract',
'--diff')。命令行上的每个“--verbose”都会将详细程度提高一级,因此要是需要输出更多的详细信息,可以使用两次。

[root@right practice]# ll
total
-rw-r--r--. root root Dec : blues.sh
-rw-r--r--. root root Dec : folk.sh
-rw-r--r--. root root Dec : jazz.sh
[root@right practice]# tar -cf collection.tar blues.sh folk.sh jazz.sh
[root@right practice]# tar -cvf collection.tar blues.sh folk.sh jazz.sh
blues.sh
folk.sh
jazz.sh
[root@right practice]# tar -cvvf collection.tar blues.sh folk.sh jazz.sh
-rw-r--r-- root/root -- : blues.sh
-rw-r--r-- root/root -- : folk.sh
-rw-r--r-- root/root -- : jazz.sh

  依据文件类型,显示上有些特点。注意下面,最后两行显示的是硬链接、软链接的文件名。

[root@right practice]# ln -T folk.sh folk
[root@right practice]# ln -s -T jazz.sh jazz
[root@right practice]# tar -cvvf collection.tar blues.sh folk.sh jazz.sh folk jazz
-rw-r--r-- root/root -- : blues.sh
-rw-r--r-- root/root -- : folk.sh
-rw-r--r-- root/root -- : jazz.sh
hrw-r--r-- root/root -- : folk link to folk.sh
lrwxrwxrwx root/root -- : jazz -> jazz.sh
[root@right practice]# tar -tvf collection.tar
-rw-r--r-- root/root -- : blues.sh
-rw-r--r-- root/root -- : folk.sh
-rw-r--r-- root/root -- : jazz.sh
hrw-r--r-- root/root -- : folk link to folk.sh
lrwxrwxrwx root/root -- : jazz -> jazz.sh

2.6 创建档案文件

===================

  创建档案时,要是目标文件存在,会自动覆盖,不会提示。

2.6.1.把普通文件创建档案

[root@right practice]# tar --create --file=collection.tar blues.sh folk.sh jazz.sh

  使用"--verbose"显示压缩过程

  没有指定档案名称,tar把第一个文件名作为档案名称。这里blues.sh成了最后的档案名,覆盖原来文件。

[root@right practice]# tar -cvf blues.sh folk.sh jazz.sh
folk.sh
jazz.sh
[root@right practice]# ll
total
-rw-r--r--. root root Dec : blues.sh
-rw-r--r--. root root Dec : collection.tar
-rw-r--r--. root root Dec : folk.sh
-rw-r--r--. root root Dec : jazz.sh
[root@right practice]# file blues.sh
blues.sh: POSIX tar archive (GNU)
[root@right practice]# tar -tf blues.sh
folk.sh
jazz.sh

  使用短选项时“-cfv”,最后生成一个叫v的档案。所以得注意短选项的顺序。这样使用,最后得到的结果就不是预想的。

[root@right practice]# tar -cfv *.sh
[root@right practice]# ll
total
-rw-r--r--. root root Dec : blues.sh
-rw-r--r--. root root Dec : collection.tar
-rw-r--r--. root root Dec : folk.sh
-rw-r--r--. root root Dec : jazz.sh
-rw-r--r--. root root Dec : v
[root@right practice]# tar -tf v
blues.sh
folk.sh
jazz.sh

  在不使用“-f”选项时,也可能出现意外。建议显式指定档案名称

[root@right practice]# ll
total
-rw-r--r--. root root Dec : blues.sh
-rw-r--r--. root root Dec : folk.sh
-rw-r--r--. root root Dec : jazz.sh
[root@right practice]# tar -cf *.sh
[root@right practice]# ll
total
-rw-r--r--. root root Dec : blues.sh
-rw-r--r--. root root Dec : folk.sh
-rw-r--r--. root root Dec : jazz.sh
[root@right practice]# file *
blues.sh: POSIX tar archive (GNU)
folk.sh: empty
jazz.sh: empty
[root@right practice]# tar -tf blues.sh
folk.sh
jazz.sh

2.6.2.把目录创建成档案

  归档目录时,把目录名称作为参数。

[root@right data]# tar --create --verbose --file=music.tar practice
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh

  要是指定档案名称时少了一点,打成“-file”;档案名称就变成“ile=hihi.tar”。

[root@right data]# tar --create --verbose -file=hihi.tar practice
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh
[root@right data]# ll
total
-rw-r--r--. root root Dec : ile=hihi.tar
drwxr-xr-x. root root Dec : mag
drwxr-xr-x. root root Dec : practice
drwxr-xr-x. root root Dec : zhaocai

2.6.3.把普通文件创建档案

  打包压缩时,可以跳过某些文件不打包。使用选项“exclude”:

$ tar --exclude=/data/tomcat_cb/logs/* -zcvf  tom.tgz /data/tomcat_cb/

  或者使用选项“-X”:

$ tar -X /data/tomcat_cb/logs/* -zcvf  tom.tgz /data/tomcat_cb/

2.7 查看档案文件内容

===================

  查看档案成员列表,以及档案成员属性。

[root@right data]# tar --list --file=music.tar
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh

  查看详细内容,包括……

[root@right data]# tar --list --verbose --file=music.tar
drwxr-xr-x root/root -- : practice/
-rw-r--r-- root/root -- : practice/folk.sh
-rw-r--r-- root/root -- : practice/jazz.sh
-rw-r--r-- root/root -- : practice/blues.sh

  查看档案中文件家成员的列表

[root@right data]# tar --verbose --list --file=music.tar practice

  查看部分指定成员

[root@right data]# tar --list --file=music.tar practice/jazz.sh
practice/jazz.sh
[root@right data]# tar --list --file=music.tar *jazz.sh
practice/jazz.sh
[root@right data]# tar --list --file=music.tar *s.*
practice/blues.sh

  指定名称时,常常需要使用正则表达式,标准动作:

[root@right data]# tar --list --file=music.tar --wildcards '*s.*'
practice/blues.sh
 

2.8 档案成员提取

===================

2.8.1.提取整个档案,只需要指定档案名称即可。

tar -xvf collection.tar

2.8.2.提取档案中某个成员

  成员名称可通过“--list”(“-t”)获取。这里的成员名是一行显示的内容。

[root@right practice]# tar --list --file=music.tar
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh

  提取文件时,遇到同名文件,直接覆盖没有任何提示。

[root@right practice]# tar --extract --file=collection.tar jazz.sh
[root@right practice]# ll
total
-rw-r--r--. root root Dec : collection.tar
-rw-r--r--. root root Dec : jazz.sh

  成员名称问题,报错;因为上边查看时,成员实在文件夹下面的。

[root@right practice]# tar --extract --file=music.tar folk.sh
tar: folk.sh: Not found in archive
tar: Exiting with failure status due to previous errors

  所以提取文件时连同创建时的目录路径名称一同指定,要不就得使用正则表达式来匹配名称。而且,提取后,文件是位于原始目录下的(*)。 提取文件时,遇到同名文件夹,要是解压在某个同名目录下,也是直接覆盖没有任何提示。 所以从一个不信任的源获取的档案,提取文件时需要另外建立目录,独立于已存在的工作目录操作。

2.8.3.提取目录

  提取目录“practice”时,目录必须是档案里存在的成员。

[root@right practice]# tar -tf music.tar
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh
[root@right practice]# tar -xf music.tar practice
[root@right practice]# tar -xf music.tar practices
tar: practices: Not found in archive
tar: Exiting with failure status due to previous errors

  提取目录(档案成员),与提取某个成员类似。都存在覆盖而不提示的情况,这时可以使用选项改变()。

4 tar操作


4.1 GNU 'tar' 基本操作

===================

  基本操作(-c, -t, -x),之前有过解释,这里是些补充说明。

  '--create'    '-c'

  可以创建一个空的档案,而后用“--append”('-r')增加档案成员。这个用法有个问题,可能会导致两个严重的错误诞生(误操作下的文件覆盖)。

  ①当需要提取一个文档的全部成员时,把“-x”选项错误写成“-c”,无疑档案被覆盖了。②创建文件时,本来使用“--file”指定一个档案名称;而代替使用了“-f”选项同事忘记了给选项输入一个参数,那么一样覆盖了未来的档案成员(变成了一个空的档案)。

  由于这两个风险,这个操作(创建一个空档案)有必要被限制一下。

  所以,为了避免以上两个失误,同时还可以创建一个空档案。引入一个选项“--files-from”('-T'),没有该选项,将会阻止生成一个空档案。 创建一个空档案“hello.tar”,如下:

[root@right practice]# ll
total
-rw-r--r--. root root Jan : jazz.sh
[root@right practice]# tar -cf hello.tar
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
[root@right practice]# tar -cf jazz.sh
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
[root@right practice]# tar -cf hello.tar -T /dev/null
[root@right practice]# tar cfT hello.tar /dev/null
[root@right practice]# ll
total
-rw-r--r--. root root Jan : hello.tar
-rw-r--r--. root root Jan : jazz.sh

4.2 GNU 'tar' 高级操作

===================

  这里看一下‘tar’提供的五个更加专业的功能。

4.2.1.append

  '--append'    '-r'

  往已存在的档案添加成员。 要是增加的新成员与老成员同名,不会覆盖,而是同时保留她们(属主、修改时间不同、也可以相同……)

[root@right practice]# tar -rvf music.tar practice/folk.sh
practice/folk.sh
[root@right practice]# tar -tvf music.tar
drwxr-xr-x root/root -- : practice/
-rw-r--r-- root/root -- : practice/folk.sh
-rw-r--r-- root/root -- : practice/jazz.sh
-rw-r--r-- root/root -- : practice/blues.sh
-rw-r--r-- root/root -- : practice/folk.sh
[root@right practice]# tar -tf music.tar
practice/
practice/folk.sh
practice/jazz.sh
practice/blues.sh
practice/folk.sh

  这时,提取的是同名文件中最新的(修改时间

[root@right practice]# ll
total
-rw-r--r--. root root Jan : music.tar
[root@right practice]# tar -xf music.tar prac*folk*
[root@right practice]# ls -l practice/folk.sh
-rw-r--r--. root root Jan : practice/folk.sh

  这里提取的最新成员并不是“--extract”的设计目标。而是因为提取的顺序,所有同名档案成员都被提取出来了,最后出来的那个覆盖了前面的(还没有任何提示)。

  同样,当有了不可控的行为时,一定会出现(将来会出现)一个控制方法。如下边的情况,档案中有四个文件。上边三个文件内容不同,修改时间相同;下边两个文件修改时间不同,内容相同。

[root@right practice]# tar -tvf hello.tar
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello

  使用选项,不带参数提取了最早的成员;带上参数就厉害了……(顺序从上往下)

[root@right practice]# tar -xf hello.tar --occurrence hello && ll hello && cat hello
-rw-r--r--. root root Jan : hello
first
[root@right practice]# tar -xf hello.tar --occurrence= hello && ll hello && cat hello
-rw-r--r--. root root Jan : hello
second
[root@right practice]# tar -xf hello.tar --occurrence= hello && ll hello && cat hello
-rw-r--r--. root root Jan : hello
third
[root@right practice]# tar -xf hello.tar --occurrence= hello && ll hello && cat hello
-rw-r--r--. root root Jan : hello
third

4.2.2.update

  '--update'    '-u'

  用“更新”的文件替换档案中已存在的成员;使用时必须有“--file”选项。 跟“-r”一个效果,都是添加新成员到档案的末尾(而不会覆盖老文件)。

[root@right practice]# ll
total
-rw-r--r--. root root Jan : hello
-rw-r--r--. root root Jan : hello.tar
[root@right practice]# tar -uf hello.tar hello
[root@right practice]# tar -tvf hello.tar
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello
-rw-r--r-- root/root -- : hello

  这个选项不适合备份资料,最终生成一个冗长的档案文件,‘tar’有专门的备份选项。

4.2.3.concatenate

  '----concatenate'    '--catenate'    '-A'

  把多个档案放在另一个档案里(磁带不支持)。 源和目标档案,必须是已存在的。

[root@right practice]# tar -tvf blues.tar
-rw-r--r-- root/root -- : blues.sh
[root@right practice]# tar -tvf folk.tar
-rw-r--r-- root/root -- : folk.sh
[root@right practice]# tar -tvf jazz.tar
-rw-r--r-- root/root -- : jazz.sh
[root@right practice]# tar -cf hi.tar -T /dev/null
[root@right practice]# tar -tf hi.tar
[root@right practice]# tar -A -f hi.tar blues.tar
[root@right practice]# tar -tf hi.tar
blues.sh
[root@right practice]# tar -A -f hi.tar folk.tar
[root@right practice]# tar -tf hi.tar
blues.sh
folk.sh
[root@right practice]# tar -A -f hi.tar jazz.tar
[root@right practice]# tar -tf hi.tar
blues.sh
folk.sh
jazz.sh

4.2.4.delete

  '--delete'

  删除档案成员(磁盘不支持), 删除所有版本的成员:

[root@right practice]# tar -tvf hi.tar
-rw-r--r-- root/root -- : blues.sh
-rw-r--r-- root/root -- : folk.sh
-rw-r--r-- root/root -- : jazz.sh
-rw-r--r-- root/root -- : jazz.sh
-rw-r--r-- root/root -- : jazz.sh
[root@right practice]# tar --delete --file=hi.tar jazz.sh
[root@right practice]# tar -tvf hi.tar
-rw-r--r-- root/root -- : blues.sh
-rw-r--r-- root/root -- : folk.sh

  

4.2.5.compare

  '--compare'    '--diff'    '-d'

  比较档案成员与“文件系统中的她们”

[root@right practice]# ll
total
-rw-r--r--. root root Jan : hi.tar
[root@right practice]# tar -xf hi.tar
[root@right practice]# tar -d -f hi.tar
[root@right practice]# tar -d -f hi.tar blues.sh folk.sh
[root@right practice]# touch blues.sh
[root@right practice]# echo "hello folk" > folk.sh
[root@right practice]# tar -d -f hi.tar blues.sh folk.sh
blues.sh: Mod time differs
folk.sh: Mod time differs
folk.sh: Size differs
[root@right practice]# tar -d -f hi.tar
blues.sh: Mod time differs
folk.sh: Mod time differs
folk.sh: Size differs

4.3 '-c'的选项

===================

4.3.1.覆盖文件元数据

  '--mode=PERM'

  为档案添加的成员重新指定权限(chmod);可以接受8进制、字母

$ tar -c -f arch.tar --mode='g+wx' dona

  '--mtime=DATE'

  修改成员的修改时间;

  ……

  '--owner=USER'

  '--group=GROUP'

  可以接受id、字符名称

  ……

4.3.2.修改返回值

  '--ignore-failed-read'

  跳过无法读取的文件(、目录)时,返回值为零。

4.4 '-x'的选项

===================

4.5备份选项

===================

4.6 值得注意的用法

===================

5 备份和恢复


常用用法


  解压到指定目录,使用大写的“C”

# tar -xf apache-tomcat-7.4..tar.bz2 -C /data01/tomcat/

GNU tar的更多相关文章

  1. Linux RPM、TAR包管理

    一.RPM软件包命令的使用 RPM主要有5种基本操作模式:安装.卸载.刷新.升级及查询.下面分别介绍. 1.安装软件包 命令语法: rpm -ivh [RPM包文件名称] 命令中各参数的含义如下: - ...

  2. linux专题一之文件归档和压缩(tar、file、zip)

     本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...

  3. dump、cpio、tar、dd四种备份工具比较

    原文  http://blog.csdn.net/ether_lai/article/details/12656219 dump dump可执行文件系统增量备份的存储操作 ,dump 可将目录或整个文 ...

  4. linux下tar命令详解

     linux下tar命令详解    tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...

  5. tar命令参数笔记

    是指的linux下的tar命令,该命令的用法相当多,以下的内容来自tar的info手册 --numeric-owner This option will notify 'tar' thar it sh ...

  6. linux 系统 tar 的用法详解

    [root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...

  7. tar --help

    pengdl@debian:~/test$ mkdir test1 pengdl@debian:~/test$ mkdir test2 pengdl@debian:~/test$ tar -xzf p ...

  8. GNU 项目(开源社区的由来,背后的哲学)

    转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...

  9. 升级Linux tar &&解决某用tar解压失败的tar包

    今天解压个文件,出来很多这样的: /bin/tar: Ignoring unknown extended header keyword `SCHILY.dev'/bin/tar: Ignoring u ...

随机推荐

  1. java类加载与static

    一.类加载 当jvm去运行一个类时,会先加载该类,把该类在硬盘上字节码加载到jvm的内存.java HelloWorld>字节码会被加载到代码段中>加载过程中会有一些静态的常量,这部分会事 ...

  2. SSH框架搭建demo

    1.新建Java Web工程 2.添加Struts2.1框架支持 去除冲突包:antlr-2.7.2.jar 一般项目加上这三个包足够,后期可以视项目需求增加支持包: 2.1配置web.xml文件 增 ...

  3. RC4被JDK8默认禁用导致腾讯QQ邮箱无法访问

    7月29日开始,腾讯修改了邮箱的加密方式,导致我们线上的所有的腾讯代收.代发邮件的功能全部失效.解决方法在最后,如果需要可直接跳转至解决方法一节 问题出现 7月29日开始,线上的所有的腾讯代收.代发邮 ...

  4. DelphiXE5如何获取Android手机SIM卡串号[转]

    手机号不是存在SIM卡上的,SIM卡只有一个串号.在运营商的服务器上有手机号和序号对应的一张表.所以你SIM卡办理遗失,运营商只要把新SIM卡的串号和你原来的手机号绑定即可. 获取手机号的唯一办法是收 ...

  5. 解决Windows远程桌面连接每次都提示输入密码的问题,远程桌面记不住密码

    FROM:http://www.veryhuo.com/a/view/80444.html Windows 远程桌面连接几乎每天都用,所以使用的方便性非常重要.如果你经常用,也许会发现在某些系统中,每 ...

  6. WPF Demo12 布局

    1 <Window x:Class="布局.DockPanel1" xmlns="http://schemas.microsoft.com/winfx/2006/x ...

  7. 黄聪:jquery+Datatables出现数据过长,表格不自动换行,columns设置width失效的办法

    添加下面的CSS代码即可: table.dataTable.nowrap th, table.dataTable.nowrap td{white-space: normal !important;}

  8. googletest--测试控制

    有时候如果某个测试出现了异常,但是我们想继续其他的测试怎么办. 最简单的方法就是,在测试的名字前加上"DISABLED_",如下面的例子所示: // Test with fixtu ...

  9. 问题 B: 【例9.3】求最长不下降序列(基础dp)

    问题 B: [例9.3]求最长不下降序列 时间限制: 1 Sec  内存限制: 128 MB提交: 318  解决: 118[提交][状态][讨论版][命题人:quanxing] 题目描述 设有由n( ...

  10. IDC:电源系统

    ylbtech-IDC:电源系统 电源系统(Power System)是由整流设备.直流配电设备.蓄电池组.直流变换器.机架电源设备等和相关的配电线路组成的总体.电源系统为各种电机提供各种高.低频交. ...