linux基本功系列之tar命令实战

news2025/3/14 23:59:28

在这里插入图片描述

文章目录

  • 前言
  • 一. 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 29 22:15 hosts
-rw-r--r--. 1 root root 2.3K 29 22:15 passwd
-rw-r--r--. 1 root root  10K 29 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 打包后使用调用压缩命令进行压缩

默认情况下,有三种命令:

参数使用调用的命令打包后的文件后缀
ztar -czvfgziptar.gz
jtar -jcvfbzip2tar.bz2
Jtar -Jcvfxztar.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 29 23:14 etc.tar.bz2
-rw-r--r--. 1 root root  11M 29 23:14 etc.tar.gz
-rw-r--r--. 1 root root 7.6M 29 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命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述

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

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

相关文章

开学季该准备哪款电容笔?2023平替电容笔推荐

如今,电容笔越来越受欢迎,性能也越来越好。所以,如何选择一款具有高性价比的电容笔就成了人们的重点关注。现在,越来越多的人开始使用电容笔,所以,人们都在寻求更好、更经济的电容笔。所以,什么…

21省人均GDP超过1万美元,北京以19.01万元继续稳居榜首

在过去的2022年,各省都交了优秀的“成绩单”,各省的经济强弱即将揭晓。广东与江苏的GDP均超过12万亿元,是31省中超过12万亿元的两个城市,GDP分别为12.91万亿元与12,18万亿元。山东省、浙江省、河南省紧随其后&#xff…

linux yum安装卸载jdk8

1>安装1 yum -y list java* 列出jdk列表2 yum install -y java-1.8.0-openjdk-demo.x86_64(安装这个java -version 正常显示,但是javac不能用,因为yum install java 只是安装了java的运行时环境,并不支持编译,安装成…

如何在线批量压缩PDF

PDF格式文档是我们日常比较常用的格式文档之一,那么有什么方法可以减小PDF大小呢?如果PDF比较多是否能批量处理呢? 首先打开浏览器搜索speedpdf就能找到这个在线压缩工具,点击进入后选择PDF压缩可以。如果需要手机和电脑端同步压…

react中Modal组件与openlayers地图实例化在feature要素绘制与清除等场景中存在的bug

在有地图的实际业务中会有一个经常的场景&#xff0c;那就是地图的初始化&#xff0c;一般如下&#xff1a; useEffect(() > {initMap();}, [visible]);我们经常利用Modal组件中open属性状态true与false来作为监听地图初始化的条件。 <Modaltitle{<div className"…

Python导入模块,Python import用法

使用 Python 进行编程时&#xff0c;有些功能没必须自己实现&#xff0c;可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说&#xff0c;在前面章节中&#xff0c;我们使用了一些数学函数&#xff0c;例如余弦函数 cos()、绝对值函数 fabs() 等&#xff0c;它们位…

git修改历史提交(commit)信息

我们在开发中使用git经常会遇到想要修改之前commit的提交信息&#xff0c;这里记录下怎么使用git修改之前已经提交的信息。一、修改最近一次commit的信息 首先通过git log查看commit信息。 我这里一共有6次commit记录。 最新的commit信息为“Merge branch ‘master’ of https:…

在线研讨会邀请 | 赋能“大”研发,助力“快”交付

在全速前进的后疫情时代&#xff0c;公司业务飞速发展&#xff0c;您&#xff0c;准备好了吗—— 您的开发、设计、美术等团队可能分布在全球各地&#xff0c;您如何帮助他们实现跨部门、跨区域的协作——让他们便捷共享、审查各种大文件&#xff08;包括二进制文件&#xff0…

【GD32F427开发板试用】+ GDLink和USART2

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;夏漳 一 GDLink下载和调试 1.1 硬件结构和试用板组成 感谢极术社区提供的GD32开发板&#xff0c;具体的板子资源和配套软件可以在极术社区官…

09笔记 IO操作

目录 一.向一个文本文件中写入数据&#xff1a; 二.从一个文本文件中读取数据&#xff0c;并对读取的数据做简单处理。 三.二进制文件的写入操作 四.对二进制文件的读取操作 五. 举例 六.IO操作的简单应用&#xff08;代码和举例都在更新和完善中&#xff09; 一.向一个文本…

软件测试工程师成神之路2023整理版

版本 更新日期 审核 备注 V0.3 2020-06-01 三丰 增加3大自动化 V1.0 2021-10-01 Nick 添加持续集成 V2.0 2023-01-31 三丰 完整性能版本 我看到迄今为止最完整的软件测试技术路线梳理 Python 编程语言 自动化之Python 编程语言 编程语言介绍/编程概念讲解/环…

大数据技术架构(组件)29——Spark:Memory Model(2)

2.1.8.5、Memory addressing以上小节介绍了spark对堆的划分&#xff0c;根据使用目的不同&#xff0c;对堆进行了区域划分,并说明了spark1.6之前和之后使用的两种不同内存模型管理以及之间的区别&#xff0c;那么这里继续逐步分析&#xff0c;说到内存管理&#xff0c;spark是如…

CTFshow菜狗杯-misc-wp(详解 脚本 过程 全)

首先感谢ctf平台和各位出题的大佬其次感谢各位读者&#xff0c;对我的支持( •̀ ω •́ )y 有什么问题和建议可以私聊我废话不多话开启你们的旅程吧 这个也是我这几天才看 一些见解和思路分享给你们希望你们在旅途中玩的开心&#xff0c;学的开心✌( •̀ ω •́ )y杂项签到…

opencv+python物体检测【03-模仿学习】

仿照练习&#xff1a;原文链接 步骤一&#xff1a;准备图片 正样本集&#xff1a;正样本集为包含“识别物体”的灰度图&#xff0c;一般大于等于2000张&#xff0c;尺寸不能太大&#xff0c;尺寸太大会导致训练时间过长。 负样本集&#xff1a;负样本集为不含“识别物体”的…

无公网IP环境快解析实现医美ERP外网访问

现阶段&#xff0c;借助医学手段让人们变美逐渐成为时尚&#xff0c;医美走进公众生活的步伐也在不停加快&#xff0c;整个医美行业总体处于蓬勃发展之势&#xff0c;因此医美行业ERP需求量也不断增加。医美管理软件系统涵盖HIS、进销存、CRM、CallCenter、经营报表等模块&…

【王道数据结构】第七章| 查找 | 树

目录 一、查找 1、查找概念 2、顺序查找 3、折半查找 4、分块查找 二、树 1、B树 2、B树的基本操作 3、B树 4、散列查找及其性能分析 5、散列查找及性能分析 一、查找 1、查找概念 查找&#xff1a;在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找…

当ChatGPT遇到前端开发

目录 一、ChatGPT是什么&#xff1f; 二、怎么注册使用ChatGPT&#xff1f; 1、注册账号 2.完成 ChatGPT 手机号码验证 3、登录 ChatGPT 账号并开始使用 三、当ChatGPT遇到前端开发 四、深思总结 AIGC 作画带给人们的惊艳感觉还未散去&#xff0c;ChatGPT 又来刺激人类脆…

leetcode 困难 —— N 皇后, N皇后 II,八皇后(简单递归)

&#xff08;不知道为啥总是给这种简单的递归设为困难题&#xff0c;虽然优化部分很不错&#xff0c;但是题目太好过了&#xff09; 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个…

java 自定义json解析注解 复杂json解析 工具类

java 自定义json解析注解 复杂json解析 工具类 目录java 自定义json解析注解 复杂json解析 工具类1.背景2、需求-各式各样的json一、一星难度json【json对象中不分层】二、二星难度json【json对象中出现层级】三、三星难度json【json对象中存在数组】四、四星难度json【json对象…

【Selenium学习】Selenium 八大定位法

1.1 ID定位HTML Tag 的 id 属性值是唯一的&#xff0c;故不存在根据 id 定位多个元素的情况。下面以在百度首页搜索框输入文本“python”为例。搜索框的 id 属性值为“kw”&#xff0c;如图1.1所示&#xff1a;代码如下&#xff0c;“find_element_by_id”方法已废弃&#xff0…