tarfile文件压缩、解压、归档指令教程
打包与压缩是我们在计算机系统日常使用中必备的一个工具,就如我们在使用Windows系统,也需要类似WinRAR的压缩软件来将许多数据、文件打包成一个文件,并压缩其占用空间。我们在Linux下也需要这样的工具,Linux下有类似gzip、bzip2之类的压缩工具,不过,这两个命令对目录的压缩指的是将目录内的所有文件“分别”进行压缩。
那Linux下有没有类似WinRAR一样强大的打包工具呢?那就是大名鼎鼎的tar了。tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将该文件同时进行压缩。更有趣的是,由于tar的使用太广泛了,以致于目前WinRAR也支持tar.gz文件名的解压缩。本文我将介绍tar命令的语法构成、参数说明、具体使用以及进阶操作。
一、语法构成与参数说明
1. tar
语法构成
tar的参数非常多,这里只讲几个常用参数,更多参数可通过man tar
查询。
[root@centos7-master ~]# tar [-j|-z] [cv] [-f 新建的文件名] filename... <==打包与压缩
[root@centos7-master ~]# tar [-j|-z] [tv] [-f 新建的文件名] <==查看文件名
[root@centos7-master ~]# tar [-j|-z] [xv] [-f 新建的文件名] [-C 指定目录] <==解压缩
2. tar
参数说明
-j:通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2,这种压缩方式效果比gzip压缩效果更好(压缩后的文件更小)
-z:通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz-c:新建打包文件,可搭配 -v 来查看过程中被打包的文件名(filename)
-t:查看打包文件的内容含有哪些文件名,重点在查看文件名。
-x:解打包或解压缩的功能,可以搭配 -C(大写)在特定目录解开。特别留意:-c、-t、-x 不可同时出现在一串命令行中。-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来-f filename:-f 后面要接被处理的文件名,建议 -f 单独写一个参数-C 指定目录:这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数-p:保留备份数据原本权限与属性,常用于备份(-c)重要的配置文件
-P:保留绝对路径,即允许备份数据中包含有根目录/
-exclude=FILE: 在压缩过程中,排除FILE,不要将FILE打包
3. tarfile与tarball的区别
我们知道tar
是一个打包&压缩命令,它支持仅打包而不压缩,也支持即打包又压缩。
如果仅打包,就是tar -cv -f file.tar
而已,这个文件我们称为tarfile
。
如果即打包又压缩,就是tar -jcv -f file.tar.bz2
而已,这个文件我们称为tarball
。
二、tar
的具体使用
tar最常用的三个命令形式如下:
打包:tar -cv -f filename.tar filename
压缩:tar -jcv -f filename.tar.bz2 filenametar -zcv -f filename.tar.gz filename
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 指定解压缩目录
这里说明一下,-f filename
是紧接在一起的,但很多文章会写成-jcvf filename
,这样也是对的。但由于参数的顺序理论上可调整,有些同学会写成-jvfc filename
,其实也可以运行,但是会导致产生的文件名变为x,因为f
后面紧跟的是c
,系统会将f
后面的内容识别为文件名。
所以建议还是把-f filename
与其他参数独立开来写,可以避免不必要的问题出现。
但经过在Centos7上的实验,若参数f
不写在最后(filename前面),会无法执行,说明Centos7对tar
命令做了优化处理,具体如下:
[root@centos7-master ~]# tar -jvfc test_tar.tar.bz2 ./test_tar
tar: You must specify one of the `-Acdtrux' or `--test-label' options
Try `tar --help' or `tar --usage' for more information.
三、tar
进阶
1. -p
参数:保留文件的权限与属性信息,且去掉根目录进行打包&压缩
使用tar -p
保留备份数据的原本权限与属性。下面以备份etc
目录为例:
[root@centos7-master ~]# tar -jpcv -f /root/etc.tar.bz2 /etc
tar: Removing leading `/' from member names <==注意这个警告消息
# -p参数会保留原文本文件的权限与属性
我们查阅一下刚刚备份的etc目录长什么样。
[root@centos7-master ~]# tar -jtv -f /root/etc.tar.bz2
...前面省略...
-rw-r--r-- root/root 2000 2019-08-06 21:44 etc/ntp.conf
drwxr-xr-x root/root 0 2020-05-01 20:25 etc/smartmontools/
-rw-r--r-- root/root 6774 2020-04-01 12:32 etc/smartmontools/smartd.conf
drwxr-xr-x root/root 0 2020-04-01 12:32 etc/smartmontools/smartd_warning.d/
-rwxr-xr-x root/root 5586 2020-04-01 12:32 etc/smartmontools/smartd_warning.sh
我们发现一个有趣的事情,那就是每个文件名都没了根目录。这也是上面我们在打包etc
目录时遇到的那个警告消息tar: Removing leading `/' from member names
(删除了文件名开头的`/')所告知的情况。
那为什么要去掉根目录呢?
主要是为了安全。我们知道,使用tar备份的数据可能会需要解压缩回来使用,tar -jtvf
命令所查看到的文件名就是解压缩后的实际文件名。
设想一下,如果没有去掉根目录,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置到/etc/xxx
去。如此一来,系统原本的/etc/
下面的数据就会被备份数据所覆盖掉了,这是一件很可怕的事情。
但如果我们在压缩的时候使用-p
参数,即可去掉根目录,假设我们将备份数据在/tmp
中解开,那么解压缩后文件所在的路径就会是/tmp/etc/xxx
。这样系统本身的/etc/
就不会被覆盖了~
2. -P
参数:保留根目录进行打包&压缩
如果你确实有需要备份根目录到tar文件中,那可以使用-P
(大写)参数。
[root@centos7-master ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
...省略中间过程...
[root@centos7-master ~]# tar -jtf /root/etc.and.root.tar.bz2
...省略前面的输出...
/etc/smartmontools/
/etc/smartmontools/smartd.conf
/etc/smartmontools/smartd_warning.d/
/etc/smartmontools/smartd_warning.sh
可以看到,使用-P
参数后,文件名内的根目录就会存在。
3.仅解压单一文件的方法
(1) 找到我们想要的文件名,如shadow文件
[root@centos7-master ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
---------- root/root 422 2020-05-01 20:34 etc/gshadow
---------- root/root 409 2020-05-01 20:25 etc/gshadow-
---------- root/root 786 2020-05-01 20:34 etc/shadow <==这是我们要的
---------- root/root 762 2020-05-01 20:25 etc/shadow-
(2) 将该文件解开,语法与实际方法如下:
[root@centos7-master ~]# tar -jxv -f 打包的文件.tar.bz2 待解开文件名
[root@centos7-master ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow
4. --exclede=FILE:
打包某目录,但不包含某些文件的方法
这里我们打包/etc/ /root 这几个目录,但排除/root/etc*开发的文件,排除我们本次打包新生成的文件/root/system.tar.bz2(不要打包自己),以此为例。
[root@centos7-master ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc*
> --exclude=/root/system.tar.bz2 /etc /root
5. --newer-mtime=time
仅备份比time时刻还要新的文件
(1) 先由find找出比/etc/passwd
还要新的文件
[root@centos7-master ~]# find /etc -newer /etc/passwd
...过程省略...
# 此时会显示出比/etc/passwd这个文件的mtime还要新的文件名[root@centos7-master ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1107 May 1 20:34 /etc/passwd
(2) 使用tar进行打包,日期为上面看到的2020/05/01
[root@centos7-master ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2
> --newer-mtime="2020/05/01" /etc/*
...中间省略...
/etc/X11/
/etc/X11/applnk/ <==这些是成功备份的文件
/etc/X11/fontpath.d/
...中间省略...
tar: /etc/yum.repos.d/CentOS-Vault.repo: file is unchanged; not dumped
tar: /etc/yum.repos.d/CentOS-fasttrack.repo: file is unchanged; not dumped #这些是没有被备份的文件
(3) 显示出文件
[root@centos7-master ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 |
> grep -v '/$'
#grep -v 表示排除掉符合后面所跟条件的文件
6. 使用tar将文件打包到某些特殊设备中
磁带机(tape)由于是一次性读取/写入设备,因此我们不能够使用类似cp
等命令来复制。如果想要将/home
,/etc
,/root
备份到磁带机(/dev/st0
)时,可以用以下命令:
[root@centos7-master ~]# tar -cv -f /dev/st0 /home /root /etc
7. 特殊应用:利用管道命令与数据流
tar
有一种特殊的使用方式,那就是通过标准输入输出的数据流重定向(standard input/standard output
),以及管道命令(pipe
)的方式,将待处理的文件一边打包一边解压缩到目标目录去
# 将/etc整个目录一边打包一边在/tmp中解开
[root@centos7-master ~]# cd /tmp
[root@centos7-master ~]# tar -cvf - /etc | tar -xvf -
# 要注意到,前面的压缩命令中,输入文件变成 - ;后面的解压缩命令中,输出命令也变成 - ;且中间有 | 作为管道
# 对于 - 的理解,可以将 - 想象成在内存中的一个设备(缓冲区—)
# 这种方式类似于cp -r /etc /tmp 但无需中间文件存在,可以将其看作是另一种方式进行复制的行为
作者: JasonCeng
出处:tar命令基本、进阶使用指北 - JasonCeng - 博客园
版权:本文采用「CC BY 4.0」知识共享许可协议进行许可。
tarfile文件压缩、解压、归档指令教程相关推荐
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- Linux常用文件压缩/解压命令格式大全(tar、gzip、bzip2、zip、compress、cpio、compress、dd)建议收藏
Linux常用文件压缩/解压命令格式大全 1. tar 2. gzip 3. bzip2 4. zip 5. compress 6. cpio 7.dd 1. tar 打包备份后的文件包缀:.tar ...
- linux压缩文件恢复,Linux文件压缩解压命令
Linux文件压缩解压命令QV7南京数据恢复-西数科技: 硬盘/手机/SSD数据恢复专家. 025-83608636 18913825606 tar功能:文件压缩解压QV7南京数据恢复-西数科技: 硬 ...
- linux jar和zip,Linux命令———zip和jar文件压缩解压
Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...
- Qt基于QuaZIP实现文件压缩/解压(Linux下)
Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...
- Qt基于QuaZIP实现文件压缩/解压(Win下)
Qt基于QuaZIP实现文件压缩/解压(Win下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.生成VS工程文件 3.使用VS进行编译 三.编译QuaZIP 1.下载QuaZIP源码 2 ...
- 【文件压缩解压工具类-含密码】
文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...
- Linux 系统下文件压缩解压
Linux 系统压缩&解压文件 压缩永远是针对于一个独立文件进行的,一个文件夹(某目录下文件)想要进行压缩首先要进行打包,打包成一个文件,所以在 Windows 下常说的压缩是打包与压缩的总称 ...
- 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天分享一个常用的压缩解压工具winrar. 为啥要搞这个无广告版呢(废话),总之网上 ...
- linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...
作业一: 1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt 2)将用户信息数据库文件和用户 ...
最新文章
- 黄聪:wordpress文章同步发布到网易、天涯、新浪博客、百度空间插件
- 程序员职业发展路径图:从菜鸟工程师到高级架构师
- ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
- 小菜鸟一步步打造图书馆外挂之十三:用户编辑界面的实现
- 聚类——层次聚类(Hierarchical Clustering)
- 面向对象的关键技术(多态、接口、抽象)
- 按顺序发起多次请求的loading使用
- js生成二维码 中间有logo
- MTk2503,使用移动物联网卡上线慢问题
- 国密算法(SM2)简介及SM2生成秘钥
- 小甲鱼python课后题共多少讲_小甲鱼Python第九讲课后习题--010列表
- 智齿客服网页端接入文档V2.3
- 服务器的mysql目录在哪,oracle数据库目录在哪
- SMT表面贴片工序详解
- RabbitMQ入门篇、介绍RabbitMQ常用的五种模式
- 机器学习-线性模型及广义线性模型
- 阿里Java面试必问:java多线程实例
- 将阿拉伯数字转换为中文大写数字 —— pyhton实现
- php面试题 优信二手车_怎么成为优信二手车评估师?面试问题有哪些?
- 抖音一个老人和一个机器人歌曲_抖音歌曲少年是谁唱的 最近抖音非常火的一首歌曲...