您的位置:首页 > 运维架构 > Linux

Linux tar 命令

2016-01-20 23:43 561 查看

1、概述

         【抄录过来的   嘿嘿……】

         通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小,五脏俱全,功能强大。

         tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

         首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

         为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

         linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

 

2、命令格式

         tar[OPTION...] [FILE]...

 

3、常用命令参数

Main operation mode:

主运行方式:

         -c, --create  创建一个新的归档文件

         --delete  从归档文件中删除

         -r,--append  追加文件到归档文件的最后

         -t, --list  列出归档文件的内容

         -x, --extract, --get  从归档文件中提取文件

         -C, --directory=DIR  将归档文件放在什么目录

         -f, --file=ARCHIVE  使用归档文件或者设备档案【对文件操作】

         -j, --bzip2  通过bzip2进行过滤归档【另外一种压缩、解压方式】

         -J,--xz  通过xz进行过滤归档

         -p, --preserve-permissions  保留归档文件的属性

         -v, --verbose  处理过程中输出相关信息

         -z, --gzip  通过gzip进行过滤归档

Operation modifiers:

         略

Overwrite control:

         略

Select output stream:

         略

Device selection and switching:

         略

Device blocking:

         略

Archive format selection:

         略

 

Local file selection:

         --exclude=PATTERN  排除那些文件【匹配模式,通配符】

         -P, --absolute-names  绝对路径打包时没有提示信息

[oldboy@zhangtemp_tar]$ tar zcvf day03.tar.gz /home/oldboy/temp_tar/day03/
tar: Removing leading `/' from member names
/home/oldboy/temp_tar/day03/
/home/oldboy/temp_tar/day03/test1
[oldboy@zhangtemp_tar]$ tar zcvfP day03_1.tar.gz /home/oldboy/temp_tar/day03/   #
加了 -P

# 没有提示信息了
/home/oldboy/temp_tar/day03/
/home/oldboy/temp_tar/day03/test1
         -X, --exclude-from=FILE  要排除的文件在FILE中列出【支持通配符】

File name transformations:

         略

Informative output:

         略

4、常用示例

使用规范

         最好不要直接通过绝对路径打包,这样容易产生一系列问题。

[oldboy@zhangtemp_tar]$ tar zcvf day03.tar.gz /home/oldboy/temp_tar/day03/ #绝对路径打包
tar: Removing leading `/' from member names
/home/oldboy/temp_tar/day03/
/home/oldboy/temp_tar/day03/test1
[oldboy@zhangtemp_tar]$ tar -tf day03.tar.gz  
home/oldboy/temp_tar/day03/              #
把路径也打包进入了,但是我们不需要这些路径

home/oldboy/temp_tar/day03/test1
         规范的方式是:进入要打包目录或文件的路径,然后再打包

 

文档示例:

         tar -cf archive.tar foo bar  对文件foo 和 bar 创建归档文件archive.tar【多个文件或目录归档为一个文件】

[oldboy@zhang~]$ ll
total 4328
drwxrwxr-x 2 oldboy oldboy    4096 Oct 9 20:37day03
drwxrwxr-x 2 oldboy oldboy    4096 Oct 21 20:23day07
drwxrwxr-x 4 oldboy oldboy    4096 Dec 1 10:33day09
[oldboy@zhang~]$ tar -cfarchive.tar day03  day07  day09 

[oldboy@zhang~]$ ll
total 4560
-rw-rw-r-- 1oldboy oldboy  235520 Jan 20 21:15
archive.tar
drwxrwxr-x 2oldboy oldboy    4096 Oct  9 20:37 day03
drwxrwxr-x 2oldboy oldboy    4096 Oct 21 20:23 day07
drwxrwxr-x 4oldboy oldboy    4096 Dec  1 10:33 day09
         tar -tvf archive.tar  以长格式列出归档文件中文件

[oldboy@zhang~]$ tar tvf archive.tar
drwxrwxr-xoldboy/oldboy     0 2015-10-09 20:37day03/
-rw-rw-r--oldboy/oldboy     0 2015-10-09 20:37day03/test1
drwxrwxr-xoldboy/oldboy     0 2015-10-21 20:23 day07/
-rw-r--r--oldboy/oldboy 24536 2015-10-21 15:19 day07/2015-10-21_151857.png
drwxrwxr-xoldboy/oldboy      0 2015-12-01 10:33day09/
-r-xr-xr-xoldboy/oldboy     24 2015-12-01 10:33day09/aa
[oldboy@zhang~]$
[oldboy@zhang~]$ tar tf archive.tar #没有v
day03/
day03/test1
day07/
day07/2015-10-21_151857.png
day09/
day09/aa
         tar -xf archive.tar  从archive.tar提取出所有的文件

[oldboy@zhangtemp_tar]$ ll
total 240
-rw-rw-r-- 1oldboy oldboy 235520 Jan 20 21:15 archive.tar
[oldboy@zhangtemp_tar]$ tar xf archive.tar
[oldboy@zhangtemp_tar]$ ll
total 248
-rw-rw-r-- 1oldboy oldboy 235520 Jan 20 21:15 archive.tar
drwxrwxr-x 2oldboy oldboy   4096 Oct  9 20:37 day03
drwxrwxr-x 2oldboy oldboy   4096 Oct 21 20:23 day07
drwxrwxr-x 4oldboy oldboy   4096 Dec  1 10:33 day09

个人示例

       注意事项

[oldboy@zhangtemp_tar]$ tar zcvf day07.tar.gz day07/  #压缩
day07/
day07/2015-10-12_115401.png
day07/aaa/
day07/aaa/2015-10-12_115937.png
[oldboy@zhangtemp_tar]$ tar zcvf day07_1.tar.gz ./day07/  #压缩
./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
 
[oldboy@zhangtemp_tar]$ tar zxvf day07_1.tar.gz  
# 解压

day07/
day07/2015-10-12_115401.png
day07/aaa/
day07/aaa/2015-10-12_115937.png
[oldboy@zhangtemp_tar]$ tar zxvf day07.tar.gz     #
解压

./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
         1、归档的目录最后面加不加"/" 都是一样的

         2、根据处理时的信息输出,可知归档路径前面加不加"./" 影响很大

         3、什么路径压缩那么就什么路径解压

       0、准备数据

[oldboy@zhangtemp_tar]$ pwd 
/home/oldboy/temp_tar
[oldboy@zhangtemp_tar]$ ll
total 4
drwxrwxr-x 3oldboy oldboy 4096 Jan 20 22:24
day07
[oldboy@zhangtemp_tar]$ ll day07/
total 40
-rw-r--r-- 1oldboy oldboy 10858 Oct 12 11:54 2015-10-12_115401.png
drwxrwxr-x 2oldboy oldboy  4096 Jan 20 22:24 aaa
[oldboy@zhangtemp_tar]$ tree
.
`-- day07
    |-- 2015-10-12_115401.png
    `-- aaa
        `-- 2015-10-12_115937.png
2 directories, 3files
 

       1、两种打包方式

[oldboy@zhangtemp_tar]$ tar zcvf day07.tar.gz ./day07/ 
     # gz打包命令,如果是脚本可以去掉"v"参数
./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
[oldboy@zhangtemp_tar]$ tar jcvf day07.tar.bz ./day07 
     # bz打包命令,如果是脚本可以去掉"v"参数
./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
       2、对应上面的解压方式

[oldboy@zhangtemp_tar]$ tar zxvf day07.tar.gz 

./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
[oldboy@zhangtemp_tar]$ tar jxvf day07.tar.bz 

./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
       3、解压方式不对无法解压

[oldboy@zhangtemp_tar]$ tar zxvf day07.tar.bz 
gzip: stdin: notin gzip format
tar: Childreturned status 1
tar: Error isnot recoverable: exiting now
[oldboy@zhangtemp_tar]$ tar jxvf day07.tar.gz
bzip2: (stdin)is not a bzip2 file.
tar: Childreturned status 2
tar: Error isnot recoverable: exiting now
       4、指定解压路径

[oldboy@zhangtemp_tar]$ tar zxvf day07.tar.gz -C /tmp/    
./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
       5、tar排除打包

准备数据

[oldboy@zhang~]$ ll day07
total 216
-rw-r--r-- 1oldboy oldboy  10858 Oct 12 11:542015-10-12_115401.png
-rw-r--r-- 1oldboy oldboy   7735 Oct 12 12:00
2015-10-12_115937.png
-rw-r--r-- 1oldboy oldboy  24536 Oct 21 15:19
2015-10-21_151857.png
-rw-r--r-- 1oldboy oldboy 175938 Oct 12 11:58 QQ??图20150714113336.jpg
--exclude=PATTERN  【注意选项的位置,放在前面报错】

[oldboy@zhang~]$ tar zcvf--exclude=./day07/*7.png day07_1.tar.gz ./day07/  #
报错

tar:day07_1.tar.gz: Cannot stat: No such file or directory
./day07/
./day07/2015-10-21_151857.png
./day07/2015-10-12_115401.png
./day07/QQ\275\330图20150714113336.jpg
tar (child): --exclude=./day07/*.png: Cannot open: Nosuch file or directory
tar (child): Error is not recoverable: exiting now
[oldboy@zhang~]$ tar zcvf day07_1.tar.gz ./day07/ --exclude=./day07/*7.png   
./day07/
./day07/2015-10-12_115401.png
./day07/QQ\275\330图20150714113336.jpg
[oldboy@zhang~]$ tar zcvf day07_1.tar.gz ./day07/ --exclude=day07/*7.png #
推介使用

./day07/
./day07/2015-10-12_115401.png
./day07/QQ\275\330图20150714113336.jpg
[oldboy@zhang~]$ tar zcvfday07_1.tar.gz day07/ --exclude=./day07/*7.png #没有排除文件
day07/
day07/2015-10-21_151857.png
day07/2015-10-12_115401.png
day07/QQ\275\330图20150714113336.jpg
day07/2015-10-12_115937.png
[oldboy@zhang~]$ tar zcvf day07_1.tar.gz day07/ --exclude=day07/*7.png 
day07/
day07/2015-10-12_115401.png
day07/QQ\275\330图20150714113336.jpg
-X,--exclude-from=FILE 





其他【极简模式解压】

[oldboy@zhangtemp_tar]$ ll
total 64
drwxrwxr-x 3oldboy oldboy  4096 Jan 20 22:28 day07
-rw-rw-r-- 1oldboy oldboy 18578 Jan 20 22:35
day07.tar.bz
-rw-rw-r-- 1oldboy oldboy 17983 Jan 20 22:35
day07.tar.gz
[oldboy@zhangtemp_tar]$ tar xvf day07.tar.gz       #
没有z 选项

./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
[oldboy@zhangtemp_tar]$ tar xvf day07.tar.bz       #
没有j选项

./day07/
./day07/2015-10-12_115401.png
./day07/aaa/
./day07/aaa/2015-10-12_115937.png
 

5、命令所在位置和类型

[oldboy@zhangtemp_tar]$ which tar
/bin/tar
[oldboy@zhangtemp_tar]$ type tar
tar is hashed(/bin/tar)
 

6、另请参见

每天一个linux命令(28):tar命令

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: