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 ...
随机推荐
- API - .after
.after() Insert content, specified by the parameter, after each element in the set of matched elemen ...
- golang里处理xml文件 转自https://studygolang.com/articles/5328
<?xml version="1.0" encoding="utf-8"?> <servers version="1"&g ...
- 转:区块链开发(一)搭建基于以太坊go-ethereum的私有链环境
区块链开发(一)搭建基于以太坊go-ethereum的私有链环境 wo541075754 · 2016-11-07 13:00:03 · 3730 次点击 · 预计阅读时间 3 分钟 · 约1小时前 ...
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...
- DEVC怎么建工程
1.DEVC建工程 1.1 新建项目 打开文件,选择新建-->项目-->ConsoleApplication(控制台程序),输入项目名,选择保存路径.(单独建一个文件夹存放) 项目建成功后 ...
- PHP 如何自定义函数
PHP 如何自定义函数 使用Function来自定义一个函数:格式如下:function function_name( $data ){ /** * 函数操作 */}注意:函数命名和自定义变量一样.只 ...
- 无后缀名伪静态路径在IIS7.0的网站提示 "404 - File or directory not found"
新配置服务器(windows server 2008,not sp1) 经测试情况如下: ①无后缀名伪静态路径行在IIS7.0的网站提示 ”404 - File or directory not fo ...
- 【spring boot】使用@Value映射properties文件属性
描述 使用@Value映射properties文件属性到Java字段 重点 使用@PropertySource 注解指定*.properties文件位置: 使用@Value进行注入: my.prope ...
- MySQL 服务启动y异常: 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
启动MySQL后,几秒钟后直接报错了 然后在事件查看器中发现了几条错误信息 Can't start server: Bind on TCP/IP port: No such file or direc ...
- http系列(一)
一.关于Url URI由URL和URN组成,URI即统一资源标识符,URL即统一资源定位符,URN即统一资源名称. 现在最常用的是URL. 二.http请求/响应报文 请求报文:请求行.请求头部.空行 ...