【Linux】打包命令——tar

 打包和压缩

虽然打包和压缩都涉及将多个文件组合成单个实体,但它们之间存在重要差异。

打包和压缩的区别

  1. 打包是将多个文件或目录组合在一起,但不对其进行压缩。这意味着打包后的文件大小可能与原始文件相同或更大。此外,打包后的文件仍然可以直接访问其中的每个文件。
  2. 压缩是将一个或多个文件通过特定算法压缩成一个更小的文件。这通常会减小该实体的大小,并且需要特殊工具才能访问其中的内容。

在Linux中,  gzip、bzip2、xz大多仅能针对单一文件来进行压缩,虽然gzip、bzip2、xz也能够针对目录来进行压缩,不过,这三个命令对目录的压缩指的是将目录内的所有文件【分别】进行压缩的操作。

而不像在Windows的系统,可以使用类似WinRAR这一类的压缩软件来将好多数据打包成一个文件的样式

        这种将多个文件或目录包成一个大文件的命令功能,我们可以称它是一种打包命令,那Linux有没有这种打包命令?

有,那就是鼎鼎大名的tar,tar 可以将多个目录或文件打包成一个大文件,同的还可以通过gzip、bzip2、xz的支持,将该文件同时进行压缩。

        更有趣的是,由于tar的使用太广泛了,目前Windows的WinRAR也支持.tar.gz文件名的解压缩。很不错吧!所以下面我们就来玩一玩这个东西。

1.tar

tar的选项与参数非常多,我们只讲几个常用的选项,更多选项您可以自行man tar查询。

  1. 打包与压缩:tar [-z | -j | -J] [ cv ] [ -f 待建立的新文件名]  filename...       
  2. 查看文件名:tar [-z | -j | -J]  [ tv ]  [ -f 既有的 tar文件名]
  3. 解压缩:tar [-z |  -j |  -J] [ xv ] [-f   既有的 tar 文件名]   [-C 目录]

选项与参数:

  1. -c:建立打包文件,可搭配 -v 来查看过程中被打包的文件名(filename)
  2. -t:查看打包文件的内容含有哪些文件名,重点在查看【文件名】
  3. -x:解包或解压缩的功能,可以搭配-C(大写)在特定目录解压,特别留意的是,-c、-t、-x不可同时出现在一串命令行中:
  4. -z:通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz;
  5. -j:通过 bzip2的支持进行压缩/解压缩:此时文件名最好为*.tar.bz2;
  6. -J:通过xz的支持进行压缩/解压缩:此时文件名最好为*.tar.xz,特别留意,-z、-j、-J不可以同时出现在一串命令行中
  7. -v:在压缩/解压缩的过程中,将正在处理的文件名显示出来;
  8. -f filename-f 后面要立刻接着 被打包后的新文件的文件名,建议-f单独写一个选项。(比较不会忘记);
  9. -C 目录:这个选项用在解压缩、若要在特定目录解压缩、可以使用这个选项。

其他后续练习会使用到的选项介绍:

  1. -p(小写):保留备份数据的原本权限与属性、常用于备份(-c)重要的配置文件;
  2. -P(大写):保留绝对路径,亦即允许备份数据中含有根目录存在之意;
  3. --exclude=FILE:在压缩的过程中,不要将 FILE打包;

其实最简单的使用tar就只要记住下面的命令即可:

  1. 压缩:tar -jcv -f  filename.tar.bz2    要被压缩的文件或目录名称;
  2. 查询:tar -jtv -f filename.tar.bz2;
  3. 解压缩:tar -jxv -f filename.tar.bz2  -C  欲解压缩的目录。

那个filename.tar.bz2是打完包的新文件的文件名,是我们自己取的文件名,tar并不会主动的产生建立的文件名,我们要自定义,所以扩展名就显的很重要了。

  1. 如果不加[-z | -j | -J]的话,文件拓展名最好取为tar即可。
  2. 如果是-j选项,代表有bzip2的支持,因此文件拓展名最好就取为.tar.bz2,因为bzip2会产生.bz2的扩展名之故。
  3. 如果是-J选项,代表有xz的支持,文件拓展名最好取为.tar.xz
  4. 至于如果是加上了-z的gzip的支持,那文件拓展名最好为.tar.gz

另外,由于 【-f filename】是紧接在一起的,

  • 过去很多文章常会写成【-jcvf filename 】,这样是对的,
  • 但由于选项的顺序理论上是可以变换的,所以很多读者会误认为【-jvfc filename】也可以,事实上这样会导致产生的文件名变成c,因为-fc嘛。

所以,建议您在学习tar时,将【-f filename】与其他选项独立出来,会比较不容易发生问题。

就像下面这样子

闲话少说,让我们来测试几个常用的tar方法。

1.1.使用tar加入-z、-j或-J的参数备份/etc/目录

有事没事备份一下/etc这个目录是件好事,备份/etc最简单的方法就是使用tar,让我们先来玩玩:

因为备份/etc 需要 root 的权限,否则会出现一堆错误.

1.1.1.-z选项

我们先看-z选项——也就是使用gzip来压缩的

下面是命令的解释:

  • tar:这是用于打包和压缩文件的命令。
  • -z:表示使用gzip进行压缩。
  • -p:保留原有文件的权限。
  • -c :创建一个新的打包文件
  • -v:显示命令执行过程中的详细信息。
  • -f :/root/etc.tar.gz:指定输出文件的路径和文件名,这里是 /root/etc.tar.gz 。
  • /etc:指定要打包的目录,这里是 /etc目录。

也就是说/etc的文件被打包到/root里面去了,叫/etc.tar.gz

执行完

 怎么样?是不是如我所说

我们回到上面那个time tar -zpcv -f /root/etc.tar.gz /etc的执行 

注意这个警告啊,我们1.2节会讲解

 多了time 会显示程序运行的时间,看 real就好了,花去了1.616s.

  1. 由于加上-v这个选项,因此正在作用中的文件名就会显示在屏幕上。
  2. 你会发现出现上面的错误信息,下面会讲解。
  3. 至于-p的选项,重点在于【保留原本文件的权限与属性】之意。

1.1.2.-j选项

我们再看看-j选项——也就是使用bzip2进行压缩的

我们执行一下

用时2.089秒啊

1.1.3.-J选项

我们看看-J选项啊,也就是使用xz进行压缩的


显示的信息会跟上面一模一样,不过时间会花比较多,使用了-J时,会花更多时间。

1.1.4.总结

我们来到/root目录下面看一下结果啊

实际目录约占有25MB的意思。
 

压缩比越好当然要花费的运算时间越多。

  1. 我们从上面可以看到,虽然使用gzip的速度相当快,总时间花费不到1秒,但是压缩率最糟糕。
  2. 如果使用xz的话,虽然压缩比最佳,不过竟然花了11秒的时间。这还仅是备份25MB的/etc而已,如果备份的数据很大,那你真的要考虑时间成本才行。

至于加上【-p】这个选项的原因是为了保存原本文件的权限与属性。我们知道权限与文件类型(例如链接文件)对复制的不同影响。

同样的,在备份重要的系统数据时,这些原本文件的权限需要做完整的备份比较好。

此时-p这个选项就派的上用场了

1.2.查看tar 文件的数据内容(可查看文件名),与备份文件名有否根目录的意义

我们在开头说了打包了可以进去看看,那现在让我们看着打包文件内有什么数据存在?

要查tar 文件内部的文件列表非常的简单,可以这样做:

我们拿我们已经打包好的/root/etc.tar.bz2来试试

………(前面省略)……

        如果加上-v这个选项时,详细的文件权限/属性都会被列出来。如果只是想要知道文件名而已那么就将-v拿掉即可。

从上面的数据我们可以发现一件很有趣的事情,那就是每个文件名都没了根目录。

这也是上一个练习中出现的那个警告信息所告知的情况。

那为什么要去掉根目录?

主要是为了安全。

        我们使用tar备份的数据可能会需要解压缩回来使用,在tar 所记录的文件名(就是我们刚刚使用tar-jtvf所查看到的文件名)那就是解压缩后的实际文件名。

        如果拿掉了根目录,假设你将备份数据在/tmp 解开,那么解压缩的文件名就会变成【/tmp/etc/xxx】,但如果没有去掉根目录,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置到/etc/xxx去,如此一来,你的原本的/etc/下面的数据,就会被备份数据所覆盖。

你会说,既然是备份数据,那么还原回来也没有什么问题吧?

        想象一个状况,你备份的数据是两年前的旧版CentOS6.x,你只是想要了解一下过去的备份内容究竟有哪些数据而已,结果一解开该文件,却发现你目前新版的CentOS7.x下面的/etc 被旧版的备份数据覆盖。

        此时你该如何是好?大概除了哭你也不能做啥事吧?

所以,当然是拿掉根目录比较安全一些。

如果你确定你就是需要备份根目录到tar的文件中,那可以使用-P(大写)这个选项,请看下面的例子分析:

  • -P:保留绝对路径,亦是允许备份数据中含有根目录的存在

范例:将文件名中的(根)目录也备份下来,并查看一下备份文件的内容文件名。

我们先把/etc目录备份(带上根目录式的备份)到/root下面的一个叫etc.and.root.bz2

我们来查看一下这个打包文件里是什么

# 这次查看文件名不含-v选项,所以仅有文件名而已,没有详细属性/权限等参数.

有发现不同点了吧?如果加上-P选项,那么文件名内的根目录就会存在。

不过,个人建议。还是不要加上-P这个选项来备份。

        毕竟很多时候,我们备份是为了要未来追踪问题用的,倒不一定需要还原回原本的系统中。所以拿掉根目录后,备份数据的应用会比较有弹性,也比较安全。

1.3.将备份的数据解压缩,并考虑特定目录的解压缩操作(-C选项的应用)

那如果想要解打包?

很简单的操作就是直接进行解打包嘛。


………(前面省略)……

此时该打包文件会在本目录(我的是/root)下进行解压缩的操作。

所以,你等一下就会在根目录下面发现一个名为etc的目录。

所以,如果你想要将该文件在/tmp下面解开,可以cd/tmp后,再执行上述的命令即可。

不过,这样好像很麻烦,有没有更简单的方法可以指定欲解开的目录?

有,可以使用-C 这个选项

  • -C 目录:这个选项用在解压缩、若要在特定目录解压缩、可以使用这个选项。


这样一来,你就能够将该文件在不同的目录解开,鸟哥个人是认为,这个-C的选项务必要记忆
一下,好了,处理完毕后,

请记得将这两个目录删除一下。


再次强调,这个【rm-rf】是很危险的命令,执行时请务必要确认一下后面接的文件名,我们要
删除的是/root/etc与/tmp/etc,您可不要将/etc/删除了,系统会死掉的。

1.4.仅解开单一文件的方法

刚刚上面我们解压缩都是将整个打包文件的内容全部解开。

想象一个情况,如果我只想要解开打包文件内的其中一个文件而已,那该如何做?

很简单,你只要使用-jtv找到你要的文件名,然后将该文件名解开即可,我们用下面的例子来说明一下:

# 1、先找到我们要的文件名,

假设解开 shadow 文件。

先查找重要的文件名,其中那个 grep是截取关键词的功能.

这里您先有个概念即可,那个管道 | 配合grep 可以截取关键词的意思。

2.将该文件解开,语法与实际做法如下。

tar -jxv -f 打包文件.tar.bz2 待解开文件名

这个单一文件被解开到当前目录来了



很有趣。此时只会解开一个文件而已不过,重点是那个文件名,你要找到正确的文件名。
在本例中,你不能写成/etc/shadow,因为记录在etc.tar.bz2内的并没有/。

        在这个练习之前,你可能要先将前面练习所产生的/root/etc删除才行/root/etc/shadow会重复存在,而其他的前面实验的文件也会存在,那就看不出什么了。

1.5.打包某目录,但不含该目录下的某些文件之做法

        假设我们想要打包 /etc/     /root 这几个重要的目录,但却不想要打包/root/etc*开头的文件,因为该文件都是刚刚我们才建立的备份文件。

        而且假设这个新的打包文件要放置为/root/system.tar.bz2,当然这个文件自己不要打包自己(因为这个文件放置在/root 下面),此时我们可以通过-—exclude的帮忙。

  • --exclude=FILE:在压缩的过程中,不要将 FILE打包;

这个exclude就是不包含的意思,所以你可以这样做:

上面的命令其实是一整列,不过为了方便,我改成了两行输入

如果想要两行输入时,最后面加上反斜杠(\)并立刻按下[Enter],就能够到第二行继续输入了

通过这个--exclude="file"的操作,我们可以将几个特殊的文件或目录排除在打包之列,让打包的操作变的更简便。

1.6.仅备份比某个时刻还要新的文件

某些情况下你会想要备份新的文件而已,并不想要备份旧文件,此时--newer-mtime 这个选项就很重要。

其实有两个选项,一个是【--newer 】,另一个就是【--newer-mtime】,这两个选项有何不同?

我们在touch介绍中谈到过三种不同的时间参数,

  • 当使用--newer时,表示后续的日期包含mtime与ctime,
  • 而--newer-mtime 则仅是mtime而已

这样知道了吧!那就让我们来尝试处理一下。

1.先由find找出比/etc/passwd还要新的文件。

 #此时会显示出比/etc/passwd这个文件的mtime还要新的文件名
#这个结果在每台主机都不相同,您先自行查看自己的主机即可,不会跟我的一样。


好了,那么使用tar 来进行打包吧!日期为上面看到的2024/07/07

 最后行显示的是【没有被备份的】,亦即not dumped的意思

3.显示出文件即可


通过这个命令可以调用出tar.bz2内的结尾非/的文件名,就是我们要的。

        现在你知道这个命令的好用了吧!

        甚至可以进行差异文件的记录与备份,这样的备份就会显得更容易。你可以这样想象,如果我在一个月前才进行过一次完整的数据备份,那么这个月想要备份时,当然可以仅备份上个月进行备份的那个时间点之后的更新的文件即可。

为什么?

因为原本的文件已经有备份了,干嘛还要进行一次?只要备份新数据即可,这样可以降低备份的容量。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化精益生产系统--APS 排程管理系统

APS(Advanced Planning and Scheduling)排程管理系统,即高级生产计划与排程系统,是一种高度智能化的计划和排程系统。它通过整合各种生产和供应链数据,运用先进的算法和数据模型,根据各种约束条件&#xff…

MySQL篇三:数据类型

文章目录 前言1. 数值类型1.1 tinyint类型1.2 bit类型1.3 小数类型1.3.1 float1.3.2 decimal 2. 字符串类型2.1 char2.2 varchar2.3 char和varchar比较 3. 日期类型4. enum和set 前言 数据类型分类: 1. 数值类型 1.1 tinyint类型 在MySQL中,整型可以指…

【Java13】包

“包”这个机制,类似于分组。主要作用是区分不同组内的同名类。例如,高三三班有一个“王五”,高二八班也有一个“王五”。高三三班和高三八班就是两个不同的包。 Java中的包(package)机制主要提供了类的多层命名空间&…

HTTP长连接

长连接优点 HTTP为什么要开启长连接呢? 主要是为了节省建立的时间,请求可以复用同一条TCP链路,不用重复进行三握+四挥 如果没有长连接,每次请求都做三握+四挥 如果有长链接,在一个 TCP 连接中可以持续发送多份数据而不会断开连接,即请求可以复用TCP链路 长连接缺点 …

第六十八回 东平府误陷九纹龙 宋公明义释双枪将-文心大模型ernie-speed免费使用方法

宋江和卢俊义抓阄儿,宋江打东平府,卢俊义打东昌府,谁先打下谁做梁山泊主。宋江带领林冲、花荣、刘唐等二十八人,卢俊义带领吴用、公孙胜、关胜等二十八人。 宋江等人到了东平府外安山镇,郁保四和王定六自告奋勇去下战…

代码随想录第45天|动态规划

300.最长递增子序列 参考 dp[i] 表示以 i 为结尾的最长递增子序列长度递推公式: 使用 i 和 j 判断 dp[i] max(dp[j] 1, dp[i])每次 j 都需要从头遍历 初始化: dp[i] 1 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums…

国产化新标杆:TiDB 助力广发银行新一代总账系统投产上线

随着全球金融市场的快速发展和数字化转型的深入推进&#xff0c;金融科技已成为推动银行业创新的核心力量。特别是在当前复杂多变的经济环境下&#xff0c;银行业务的高效运作和风险管理能力显得尤为重要。总账系统作为银行会计信息系统的核心&#xff0c;承载着记录、处理和汇…

2024年06月CCF-GESP编程能力等级认证Python编程二级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证…

云动态摘要 2024-07-07

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造,可通过对话方式生成可视化…

18_特征金字塔网络FPN结构详解

1.1 简介 在深度学习领域&#xff0c;尤其是计算机视觉和目标检测任务中&#xff0c;Feature Pyramid Networks (FPN) 是一种革命性的架构设计&#xff0c;它解决了多尺度特征检测和融合的关键问题。FPN最初由何凯明等人在2017年的论文《Feature Pyramid Networks for Object …

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

Stable Diffusion图像的脸部细节控制——采样器全解析

文章目录 艺术地掌控人物形象好易智算原因分析为什么在使用Stable Diffusion生成全身图像时&#xff0c;脸部细节往往不够精细&#xff1f; 解决策略 局部重绘采样器总结 艺术地掌控人物形象 在运用Stable Diffusion这一功能强大的AI绘图工具时&#xff0c;我们往往会发现自己…

ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验

摘要: 想让你的 ESP32 不再仅仅是控制灯光的工具吗&#xff1f; 本文将带你使用 ESP32 开发板、步进电机和简单的机械结构打造一个能够自动写字的机器人。我们将深入浅出地讲解硬件连接、软件代码以及控制逻辑&#xff0c;并提供完整的项目代码和电路图&#xff0c;即使是 Ardu…

在mac下 Vue2和Vue3并存 全局Vue2环境创建Vue3新项目(Vue cli2和Vue cli4)

全局安装vue2 npm install vue-cli -g自行在任意位置创建一个文件夹vue3&#xff0c;局部安装vue3,注意不要带-g npm install vue/cli安装完成后&#xff0c;进入目录&#xff0c;修改vue为vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 对环境变量进行配置…

Windows环境安装Redis和Redis Desktop Manager图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Redis概述 Redis是一个开源的高性能键值对数据库&#xff0c;以其卓越的读写速度而著称&#xff0c;广泛用于数据库、缓存和消息代理。它主要将数据存储在内存中&#xff0…

C++初学者指南-5.标准库(第一部分)--迭代器

C初学者指南-5.标准库(第一部分)–迭代器 Iterators 文章目录 C初学者指南-5.标准库(第一部分)--迭代器 Iterators1.默认正向迭代器2.反向迭代器3.基于迭代器的循环4.示例&#xff1a;交换相邻的一对元素5.迭代器范围6.迭代器范围中的元素数量7. 总结&#xff1a;迭代器 指向某…

护网在即,知攻善防助力每一位安服仔~

前言 是不是已经有师傅进场了呢~ 是不是有安服&#x1f412;在值守呢~ 您是不是被网上眼花缭乱的常用应急响应工具而烦恼呢&#xff1f; 何以解忧&#xff1f;唯有知攻善防&#xff01; 创作起源&#xff1a; 驻场、护网等&#xff0c;有的客户现场只允许用客户机器&…

Python网络爬虫:Scrapy框架的全面解析

Python网络爬虫&#xff1a;Scrapy框架的全面解析 一、引言 在当今互联网的时代&#xff0c;数据是最重要的资源之一。为了获取这些数据&#xff0c;我们经常需要编写网络爬虫来从各种网站上抓取信息。Python作为一种强大的编程语言&#xff0c;拥有许多用于网络爬虫的工具和库…

puppeteer 爬虫初探

1. puppeteer 和 puppeteer-core 安装 puppeteer 会默认下载一个最新版本的 chrome 浏览器&#xff1b; 安装 puppeteer-core &#xff0c;不会安装 chrome, 若要程序打开浏览器运行时&#xff0c;需手动指定电脑系统安装的 chrome 浏览器路径&#xff1b; 2. puppeteer-core …

按键控制LED流水灯模式定时器时钟

目录 1.定时器 2. STC89C52定时器资源 3.定时器框图 4. 定时器工作模式 5.中断系统 1&#xff09;介绍 2&#xff09;流程图&#xff1a;​编辑 3&#xff09;STC89C52中断资源 4&#xff09;定时器和中断系统 5&#xff09;定时器的相关寄存器 6.按键控制LED流水灯模…