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 …...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...