GNU tar
2.tar教程 4.tar操作 |
链接到压缩命令
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的更多相关文章
- Linux RPM、TAR包管理
一.RPM软件包命令的使用 RPM主要有5种基本操作模式:安装.卸载.刷新.升级及查询.下面分别介绍. 1.安装软件包 命令语法: rpm -ivh [RPM包文件名称] 命令中各参数的含义如下: - ...
- linux专题一之文件归档和压缩(tar、file、zip)
本文主要从以下几个方便来说明文件的归档和压缩,同时比较几种不同压缩方法的压缩比率及特点. 文件归档命令tar,tar.gz源码包的安装管理 创建tar包-解压-查询tar包内容 zip命令的用法 为 ...
- dump、cpio、tar、dd四种备份工具比较
原文 http://blog.csdn.net/ether_lai/article/details/12656219 dump dump可执行文件系统增量备份的存储操作 ,dump 可将目录或整个文 ...
- linux下tar命令详解
linux下tar命令详解 tar是Linux环境下最常用的备份工具之一.tar(tap archive)原意为操作磁带文件,但基于Linux的文件操作机制,同样也可适用于普通的磁盘文件.ta ...
- tar命令参数笔记
是指的linux下的tar命令,该命令的用法相当多,以下的内容来自tar的info手册 --numeric-owner This option will notify 'tar' thar it sh ...
- linux 系统 tar 的用法详解
[root@localhost xu]# tar --help 用法: tar [选项...] [FILE]... GNU ‘tar’ 将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还 ...
- tar --help
pengdl@debian:~/test$ mkdir test1 pengdl@debian:~/test$ mkdir test2 pengdl@debian:~/test$ tar -xzf p ...
- GNU 项目(开源社区的由来,背后的哲学)
转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...
- 升级Linux tar &&解决某用tar解压失败的tar包
今天解压个文件,出来很多这样的: /bin/tar: Ignoring unknown extended header keyword `SCHILY.dev'/bin/tar: Ignoring u ...
随机推荐
- 如何使用Hanlp加载大字典
问题 因为需要加载一个 近 1G 的字典到Hanlp中,一开始使用了CustomDictionay.add() 方法来一条条的加载,果然到了中间,维护DoubleArraTre 的成本太高,添 ...
- 【转】Linux安装HDF5及遇到的问题总结
Linux安装HDF5及遇到的问题总结 转自: http://www.linuxdiyf.com/linux/26164.html ubuntu版本:16.04.2 64位 从HDF官网(http ...
- CentOS6.4 添加php-fpm系统服务
简介: php-fpm安装完成后默认不会注册为系统服务,所以需要手工添加系统服务脚本.在/etc/init.d目录下新建php-fpm文件,并更改权限其即可. 1.检测/usr/local/php/v ...
- java实现PC之间的udp数据单向传输
本示例包括两个客户端UDPClient和MyServer.UDPClient发送数据到MyServer,MyServer负责接收数据.可传输文本.视频.音频.图片等. 最近我在学习这一块,写个例子. ...
- 【转】[Android] NDK独立编译——独立工具链
转载地址:https://blog.csdn.net/suningning/article/details/74510125
- DS二叉树--Huffman编码与解码
题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...
- android 退出程序解决内存释放so的问题
做Android程序的时候发现一个问题,由于用到了so库,当应用程序退出了,但是手机变得很卡,点击"设置"查看应用程序,界面显示着可以点击"强制关闭". 由于这 ...
- nodeJS安装及npm设置淘宝镜像
node.js安装 下载node.js安装包:https://nodejs.org/en/download/,下载相应版本的node.js. 需注意,在window中,node的安装目录中,最好不要有 ...
- vue中使用elementUI
引入Element 因为整个项目是依赖ElementUI框架做的,所以采用了全部引入 1,在项目根目录执行命令:npm i element-ui -S进行安装 2,在main.js中引入element ...
- vue过渡
vue在插入.更新或者移除DOM时,提供了多种不同方式的应用过渡效果,下面主要总结一些常用的过渡. 单元素过渡(vue1.0) 我们常用的动画是css3的动画,在vue中依旧有效. <!DOCT ...