linux基本功系列之tar命令实战
文章目录
- 前言
- 一. tar命令介绍
- 二. 语法格式及常用选项
- 三. 参考案例
- 3.1 仅打包不压缩
- 3.2 打包后使用调用压缩命令进行压缩
- 3.3 列出文件的内容
- 3.4 追加文件到tar命令中
- 3.5 释放文件到指定的目录
- 四 . 各种压缩方式的比较
- 总结
前言
大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第44篇文章。
专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
一. tar命令介绍
tar命令:用来压缩和解压文件。tar本身不具有压缩功能。他是调用其他具有压缩功能的命令实现的。
tar命令可以为linux的文件和目录创建档案。
利用tar,可以为某些特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。
利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,一般我们经常用于打包压缩后进行网络传输,因为这会大大节约网络带宽。
首先要弄清两个概念:打包和压缩。
-
打包是指将一大堆文件或目录变成一个总的文件;比如我们平时的快递纸箱子,我们把多个纸箱子放在一起,大箱子套在小箱子里, 这是打包。
-
压缩则是将一个大的文件通过一些压缩算法变成一个小文件,比如我们把上面打包好的纸箱子都拆开,然后叠在一起,放在袋子里,再用真空机抽真空,让体积更小
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(bzip2和gzip命令)
当然了,tar命令可以显示打包和压缩同步运行。
二. 语法格式及常用选项
依据惯例,我们还是先查看帮助,使用 tar --help
[root@mufeng ~]# tar --help
用法: tar [选项...] [FILE]...GNU ‘tar’
将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。示例tar -cf archive.tar foo bar # 从文件 foo 和 bar 创建归档文件
archive.tar。tar -tvf archive.tar # 详细列举归档文件 archive.tar
中的所有文件。tar -xf archive.tar # 展开归档文件 archive.tar
中的所有文件。主操作模式:-A, --catenate, --concatenate 追加 tar 文件至归档-c, --create 创建一个新归档-d, --diff, --compare 找出归档和文件系统的差异--delete 从归档(非磁带!)中删除-r, --append 追加文件至归档结尾-t, --list 列出归档内容--test-label 测试归档卷标并退出-u, --update 仅追加比归档中副本更新的文件-x, --extract, --get 从归档中解出文件压缩选项:-a, --auto-compress 使用归档后缀名来决定压缩程序-I, --use-compress-program=PROG通过 PROG 过滤(必须是能接受 -d选项的程序)-j, --bzip2 通过 bzip2 过滤归档-J, --xz 通过 xz 过滤归档--lzip 通过 lzip 过滤归档--lzma 通过 lzma 过滤归档--lzop--no-auto-compress 不使用归档后缀名来决定压缩程序-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档-Z, --compress, --uncompress 通过 compress 过滤归档设备选择和切换:-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备--force-local即使归档文件存在副本还是把它认为是本地归档-F, --info-script=名称, --new-volume-script=名称在每卷磁带最后运行脚本(隐含 -M)-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带-M, --multi-volume 创建/列出/解压多卷归档文件--rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh--volno-file=FILE 使用/更新 FILE 中的卷数
tar命令的帮助够长的,我这里是尽可能的缩短了,还是挺长,没办法,如果你要看详细的参数,可以向我一样,运行tar --help
为了更直观一些,我们把常用的参数用表格来展示:
参数 | 描述 |
---|---|
-c | 建立压缩档案 |
-x | 解压 |
-t | 查看内容 |
-r | 向压缩归档文件末尾追加文件 |
-u | 更新原压缩包中的文件排 |
以上这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。
参数 | 描述 |
---|---|
-z | 有gzip属性的 |
-j | 有bz2属性的 |
-Z | 有compress属性的 |
-v | 显示所有过程 |
-O | 将文件解开到标准输出 |
以上这几个参数是可选的,再压缩或者解压的时候可以选择其中任意一个。
一个特别的参数: -f
-f 后面必须接档案名
有了具体的参数之后,我们再来看实战案例:
三. 参考案例
3.1 仅打包不压缩
打包命令是-c参数
创建测试文件:
[root@mufeng ~]# mkdir test
[root@mufeng ~]# cd test
[root@mufeng test]# cp /etc/passwd /etc/hosts ./
[root@mufeng test]# ls
hosts passwd
案例一: 对文件进行打包
进行打包操作:
[root@mufeng test]# tar -cvf passwd.tar passwd
passwd
[root@mufeng test]# ls
hosts passwd passwd.tar
[root@mufeng test]# ll -h
总用量 20K
-rw-r--r--. 1 root root 182 2月 9 22:15 hosts
-rw-r--r--. 1 root root 2.3K 2月 9 22:15 passwd
-rw-r--r--. 1 root root 10K 2月 9 22:16 passwd.tar
这里你会发现一个奇怪的问题,打包完的文件居然比源文件大?
这是因为打包后的文件会多了一些额外的信息,显得文件变大了。(ps: @非妃是公主大佬 解释说:
tar算是一种文件结构,会加一些文件头,方便解包,同时还有数据校验和啥的保证数据前后一致,所以会多一些)
注意: 这里的-c 参数后面的v可以不写。 命令可以变成 tar -cf
案例二: 对目录进行打包
[root@mufeng test]# tar -cvf etc.tar /etc/
tar: 从成员名中删除开头的“/”
/etc/
/etc/fstab
这里有个提示: tar: 从成员名中删除开头的“/”
为什么要删除到开头的"/"呢? 当然是为了安全。
比如你三年前打包了centos6系统的/etc/目录,今天你想再 cenots7 上解压查看一下,结果一解压把/etc/目录给覆盖了,是不是就不好玩了。
所以去掉/ ,解压的时候是最安全的。
案例三: 对多个文件进行打包
[root@mufeng test]# tar -cvf b.tar hosts passwd
hosts
passwd
目录也是文件,你把目录写在后面进行打包也是可以的。
3.2 打包后使用调用压缩命令进行压缩
默认情况下,有三种命令:
参数 | 使用 | 调用的命令 | 打包后的文件后缀 |
---|---|---|---|
z | tar -czvf | gzip | tar.gz |
j | tar -jcvf | bzip2 | tar.bz2 |
J | tar -Jcvf | xz | tar.xz |
注意: 解压缩用 :x 参数
案例一: 打包后,用 gzip 压缩
[root@mufeng test]# tar -czvf passwd.tar.gz passwd
passwd
解压缩: tar -zxvf
案例二: 打包后,用bzip2压缩
[root@mufeng test]# tar -cjvf passwd.tar.bz2 passwd
passwd
解压缩: tar -jxvf
案例三: 打包后,调用xz压缩
[root@mufeng test]# tar -Jcvf passwd.xz passwd
passwd
解压缩: tar - Jxvf
这里有个疑问: 后缀可以不用类似tar.bz2 这种形式吗?
答案是可以的,之所以用这种形式是为了我们自己好区分,再解压的时候可以使用相同的方式解压。
但如果我们不用tar.bz2这种形式,比如三种方式都test.tar 。
我们其实可以使用 file命令查看文件用的哪个压缩命令压缩的进而选择合适的参数解压,比如:
[root@mufeng test]# tar -czvf test1.tar passwd
passwd[root@mufeng test]# tar -jcvf test2.tar passwd
passwd
[root@mufeng test]# ls test1.tar test2.tar
test1.tar test2.tar
你看这两个tar包就很难区分,这时候我们用file命令
[root@mufeng test]# file test1.tar
test1.tar: gzip compressed data, from Unix, last modified: Thu Feb 9 22:57:17 2023
[root@mufeng test]# file test2.tar
test2.tar: bzip2 compressed data, block size = 900k
这样就很容易区分开,然后再选择使用 Jxvf 还是zxvf
为了简化在解压的时候,我们这里的-v参数可以省略,同样的,J,j,z 这些参数也可以省略
于是不管调用哪个命令来压缩,我们最终都可以使用tar -xf 来解压
[root@mufeng test]# tar xf passwd.tar.gz
3.3 列出文件的内容
此处使用-t参数,这个参数可以让我们不解压也能看到文件的内容
[root@mufeng test]# tar -tvf passwd.xz
-rw-r--r-- root/root 2323 2023-02-09 22:48 passwd
[root@mufeng test]#
3.4 追加文件到tar命令中
有时候我们执行完打包,发现有个目录忘记打包进去,这时候可以用-r追加文件
这里需要注意追加文件只适用于未压缩之前,也就是打包状态,无法往已经压缩好的文件里追加:
#打包
root@mufeng test]# tar cvf mufeng.tar passwd
passwd
#不解包查看内容
[root@mufeng test]# tar tvf mufeng.tar
-rw-r--r-- root/root 2323 2023-02-09 22:48 passwd
# 追加
[root@mufeng test]# tar -rvf mufeng.tar /etc/hosts
tar: 从成员名中删除开头的“/”
/etc/hosts
[root@mufeng test]# tar tvf mufeng.tar
-rw-r--r-- root/root 2323 2023-02-09 22:48 passwd
-rw-r--r-- root/root 182 2022-12-08 20:24 etc/hosts
[root@mufeng test]#
3.5 释放文件到指定的目录
解压文件使用的是 tar -xf
到指定目录使用的是 -C参数
例如: 我们把mufeng目录释放到/tmp目录下:
[root@mufeng test]# tar xf mufeng.tar -C /tmp
四 . 各种压缩方式的比较
我们用不同的方式对同一个文件进行压缩,然后对压缩命令进行对比:
[root@mufeng test]# tar zcf etc.tar.gz /etc/
tar: 从成员名中删除开头的“/”
[root@mufeng test]# tar jcf etc.tar.bz2 /etc/
tar: 从成员名中删除开头的“/”
[root@mufeng test]# tar Jcf etc.tar.xz /etc/
tar: 从成员名中删除开头的“/”
[root@mufeng test]# ll -h
总用量 28M
-rw-r--r--. 1 root root 9.4M 2月 9 23:14 etc.tar.bz2
-rw-r--r--. 1 root root 11M 2月 9 23:14 etc.tar.gz
-rw-r--r--. 1 root root 7.6M 2月 9 23:14 etc.tar.xz
[root@mufeng test]#
通过对比我们发现 tar -zxvf 的形式 压缩的比例最高。
使用time命令对三者的运行时间进行统计:
[root@mufeng test]# time tar zcf etc.tar.gz /etc/
tar: 从成员名中删除开头的“/”real 0m0.910s
user 0m0.495s
sys 0m0.522s
[root@mufeng test]# time tar jcf etc.tar.bz2 /etc/
tar: 从成员名中删除开头的“/”real 0m2.271s
user 0m2.133s
sys 0m0.267s
[root@mufeng test]# time tar Jcf etc.tar.xz /etc/
tar: 从成员名中删除开头的“/”real 0m10.291s
user 0m8.544s
sys 0m2.166s
我们发现时间最长的就是 xz ,所以他的压缩比率也最高。
通过上面的例子我们发现:
gzip压缩速度最快;
bzip2压缩生成的文件比gzip小,但使用不如gzip广;
xz压缩工具相对较新,但是会提供最佳的压缩率,压缩时间也最长
总结
sort命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
相关文章:

linux基本功系列之tar命令实战
文章目录前言一. tar命令介绍二. 语法格式及常用选项三. 参考案例3.1 仅打包不压缩3.2 打包后使用调用压缩命令进行压缩3.3 列出文件的内容3.4 追加文件到tar命令中3.5 释放文件到指定的目录四 . 各种压缩方式的比较总结前言 大家好,又见面了,我是沐风晓…...

Prometheus服务发现
Prometheus服务发现介绍 Prometheus默认是采用pull的方式拉取监控数据的,每一个被抓取的目标都要暴露一个HTTP接口,prometheus通过这个接口来获取相应的指标数据,这种方式需要由prometheus-server决定采集的目标服务器有哪些,通过…...

【Spring6源码・MVC】请求处理流程源码解析
上一篇《【Spring6源码・MVC】初始化registry,完成url和controller的映射关系》我们知道,在IOC容器加载的同时,初始化了registry这个HashMap,这个HashMap中存放了请求路径和对应的方法。当我们请求进来,会通过这个regi…...
elasticsearch term match 查询
1. 准备数据 PUT h1/doc/1 {"name": "rose","gender": "female","age": 18,"tags": ["白", "漂亮", "高"] }PUT h1/doc/2 {"name": "lila","gender&quo…...

canal使用说明:MySQL、Redis实时数据同步
1. canal简介 canal是阿里开源的数据同步工具,基于bin log可以将数据库同步到其他各类数据库中,目标数据库支持mysql,postgresql,oracle,redis,MQ,ES等 canal分成服务端deployer和客户端adapter,我们可以部署多个,同时为了方便管…...

计算机视觉框架OpenMMLab开源学习(三):图像分类实战
前言:本篇主要偏向图像分类实战部分,使用MMclassification工具进行代码应用,最后对水果分类进行实战演示,本次环境和代码配置部分省略,具体内容建议参考前一篇文章:计算机视觉框架OpenMMLab开源学习&#x…...

awk命令
一.介绍 awk是专门为文本处理设计的编程语言,是一门数据驱动的编程语言。与sed类似,都是以数据驱动的行处理软件,主要用于数据扫描,过滤和汇总。数据可以来自于标准输入,管道或者文件。 二.语法 awk是一种处理文本文件…...
LocalDateTime获取时间的年、月、日、时、分、秒、纳秒
如何把String/Date转成LocalDateTime参考String、Date与LocalDate、LocalTime、LocalDateTime之间互转 String、Date、LocalDateTime、Calendar与时间戳之间互相转化参考String、Date、LocalDateTime、Calendar与时间戳之间互相转化 方法介绍 getYear() 获取日期的年 getMon…...

MoveIT Rviz和Gazebo联合仿真
文章目录环境安装概述ros_control框架ros_control数据流文件配置附加工具故障问题解决参考接前两篇:ROS MoveIT1(Noetic)安装总结 Solidworks导出为URDF用于MoveIT总结(带prismatic) MoveIT1 Assistant 总结 环境 Ubu…...
ESP32S2(12K)-DS18B20数码管显示温度
一、物料清单: NODEMCU-32-S2 (ESP32-12K)四段数码管(共阴)DS18B20(VCC/DQ/GND)Arduino-IDE 2.0.3二、实现方法及效果图: 2.1 引用库 // #include <OneWire.h> //可以不引入,因为DallasTemperature.h中已经引入了OneWire.h #include <DallasTemperature.h>#…...
linux栈溢出定位
一、编译选项定位堆栈溢出 来源:堆栈溢出检测机制 - SkrSky - 博客园 1、栈溢出可能打印 unhandled level 1 translation fault (11) at 0x7f8d0347, esr 0x92000005 2、栈溢出保护机制 gcc提供了栈保护机制stack-protector(编译选项-fstack-protec…...

CSS基础:选择器和声明样式
CSS概念 CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表,简称样式表 CSS用于HTML文档中元素样式的定义 使用css让网页具有美观一致的页面 语法 CSS 规则由两个主要的部分构成:选择器和声明样式 选择器通常…...

VS中安装gismo库
文章目录前言一、下载安装paraview直接下载压缩包安装就可以了解压后按步骤安装即可二、gismo库的安装gismo库网址第一种方法:第二种方法第三种方法:用Cmake软件直接安装首先下载cmake软件[网址](https://cmake.org/download/)安装gismo库三、gismo库的使…...

元学习方法解决CDFSL以及两篇SOTA论文讲解
来源:投稿 作者:橡皮 编辑:学姐 带你学习跨域小样本系列1-简介篇 跨域小样本系列2-常用数据集与任务设定详解 跨域小样本系列3:元学习方法解决CDFSL以及两篇SOTA论文讲解(本篇) 跨域小样本系列4…...

大数据之------------数据中台
一、什么是数据中台 **数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。**数据中台的目标是让数据持续用起来,通过数据中台提供的工具、方法和运行机制,把数据变为一种服务能力,…...
Python 中 字符串是什么?
字符串是 Python 中最常用的数据类型。我们可以使用引号 ( ’ 或 " ) 来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如: var1 ‘Hello World!’ var2 “Python Runoob” Python 访问字符串中的值 Python 不支持单字符类型&…...
OJ刷题Day1 · 一维数组的动态和 · 将数字变成 0 的操作次数 · 最富有的客户资产总量 · Fizz Buzz · 链表的中间结点 · 赎金信
一、一维数组的动态和二、将数字变成 0 的操作次数三、最富有的客户资产总量四、Fizz Buzz五、链表的中间结点六、赎金信一、一维数组的动态和 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示…...
【数据结构】栈——必做题
逆波兰表达式后缀表达式的出现是为了方便计算机处理,它的运算符是按照一定的顺序出现,所以求值过程中并不需要使用括号来指定运算顺序,也不需要考虑运算符号(比如加减乘除)的优先级。先介绍中简单的人工转化方法&#…...

LearnOpenGL 笔记 - 入门 04 你好,三角形
系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口 文章目录系列文章目录前言你好,三角形顶点输入顶点着色器(Vertex Shader)编译着色器片段着色器&…...

keepalived+mysql高可用
一.设置mysql同步信息两节点安装msyql略#配置节点11.配置权限允许远程访问mysql -u root -p grant all on *.* to root% identified by Root1212# with grant option; flush privileges;2.修改my.cnf#作为主节点配置(节点1)#作为主节点配置 server-id 1 …...

从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...

CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

使用python进行图像处理—图像变换(6)
图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切(shear)以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…...

dvwa11——XSS(Reflected)
LOW 分析源码:无过滤 和上一关一样,这一关在输入框内输入,成功回显 <script>alert(relee);</script> MEDIUM 分析源码,是把<script>替换成了空格,但没有禁用大写 改大写即可,注意函数…...
OCC笔记:TDF_Label中有多个相同类型属性
注:OCCT版本:7.9.1 TDF_Label中有多个相同类型的属性的方案 OCAF imposes the restriction that only one attribute type may be allocated to one label. It is necessary to take into account the design of the application data tree. For exampl…...