Linux下文件的打包、解压缩指令——tar,gzip,bzip2
本文是对 鸟叔的Linux私房菜(基础学习篇) 第三版 的学习笔记,原文可参考原书中文网站 鸟叔的Linux私房菜。更多详细信息可直接参考对应Linux命令的 man 帮助( 如 man tar)。
在Linux环境下,对于文件的操作更多通过命令行指令而不是单纯的鼠标点击,而文件管理中一个重要的操作便是压缩和加压操作。通过文件的压缩和解压,可以使得文件占用更少的存储空间,也可以让文件传输更加便捷。本文主要介绍Linux下常用的打包指令和解压缩指令,并介绍不同的压缩文件拓展名的区别。
文件后缀的含义
随着压缩技术的发展,Linux环境下提供的压缩指令和格式开始变多。为了便于用户区分不同压缩文件使用的不同压缩技术,进而使用合适的指令进行操作,一般使用后缀标识文件在压缩或打包过程中所使用的压缩技术。常见的后缀有以下几种:
*.Z // compress程序压缩产生的文件(现在很少使用)
*.gz // gzip程序压缩产生的文件
*.bz2 // bzip2程序压缩产生的文件
*.zip // zip压缩文件
*.tar // tar程序打包产生的文件
*.tar.gz // 由tar程序打包并由gzip程序压缩产生的文件
*.tar.bz2 // 由tar程序打包并由bzip2程序压缩产生的文件
从后缀可以看出,gzip、bzip2、tar指令是在打包和压缩过程中较为常用的指令。
压缩命令——gzip、bzip2
gzip
gzip可以压缩产生后缀为 .gz 的压缩文件,也可以用于解压gzip、compress等程序压缩产生的文件。不带任何选项和参数使用gzip或只带有参数 - 时,gzip从标准输入读取输入,并在标准输出输出压缩结果。
gzip的常用指令选项如下:
基础格式: gzip [Options] file1 file2 file3
指令选项:(默认功能为压缩)
-c //将输出写至标准输出,并保持原文件不变
-d //进行解压操作
-v //输出压缩/解压的文件名和压缩比等信息
-digit //digit部分为数字(1-9),代表压缩速度,digit越小,则压缩速度越快,但压缩效果越差,digit越大,则压缩速度越慢,压缩效果越好。默认为6.
注意,使用 gzip 指令压缩/解压文件均会使得源文件消失,即源文件会被直接解压/压缩而不保留备份。若想要保留原文件可以使用 -c 参数结合数据流重定向操作(见下例)。
gzip exp1.txt exp2.txt //分别将exp1.txt和exp2.txt压缩,且不保留原文件。注意对于多个文件参数是将多个文件分别进行压缩,而不是压缩在一起。参考下文 tar 指令。
gzip -dv exp1.gz //将exp1.gz解压,并显示压缩比等信息。
gzip -cd exp1.gz > exp.1 //将exp1.gz解压的结果放置在文件exp.1中,并且原压缩文件exp1.gz不会消失
特别注意第三条实例, -d 指示解压缩,-c 参数是将结果输出至标准输出,通过 > 符号,将原本输出至标准输出的解压结果重定向至exp.1中,既解压了文件,原压缩文件也没有消失。
注:对应于 gzip,可以使用 gunzip 进行解压操作,效果类似gzip -d xx,同时可以使用zcat读取压缩文件的内容并显示在标准输出,功能类似于 gzip -c xx.
bzip2
bzip2是采用更好压缩算法的压缩程序,一般可以提供较之gzip更好的压缩效果。其具有与gzip相似的指令选项,压缩产生 .bz2 后缀的压缩文件。
bzip2的常用指令选项如下:
基础格式: bzip2 [Options] file1 file2 file3
指令选项:(默认功能为压缩)
-c //将输出写至标准输出
-d //进行解压操作
-v //输出压缩/解压的文件名和压缩比等信息
-k //在压缩/解压过程中保留原文件
-digit //digit部分为数字(1-9),代表压缩速度,digit越小,则压缩速度越快,但压缩效果越差,digit越大,则压缩速度越慢,压缩效果越好。默认为6.
bzip2 exp1.txt exp2.txt //分别将exp1.txt和exp2.txt压缩,且不保留原文件。
bzip2 -dv exp1.bz2 //将exp1.bz2解压,并显示压缩比等信息。
bzip2 -kd exp1.bz2 //将exp1.bz2解压,并且原压缩文件exp1.bz2不会消失
注:对应于 bzip2,可以使用 bunzip2 进行解压操作,效果类似bunzip2 -d xx,同时可以使用bzcat读取压缩文件的内容并显示在标准输出,功能类似于 bzip2 -c xx.
打包指令——tar
上文已经提到,gzip 或 bzip2 带有多个文件作为参数时,执行的操作是将各个文件独立压缩,而不是将其放在一起进行压缩。这样就无法产生类似于Windows环境下的文件夹打包压缩的效果。(gzip与bzip2也可以使用文件夹作为参数,使用 -f 选项,但也是将其中的每个文件独立压缩)。为了实现打包压缩的效果,可以使用命令 tar 进行文件的打包操作(archive),再进行压缩。
tar 指令可以将文件打包成文件档案(archive)存储在磁盘/磁带中,打包操作一般伴随压缩操作,也可以使用 tar 指令对打包压缩后的文件解压。
tar 常用命令参数如下:
基本格式:tar [Options] file_archive //注意tar的第一参数必须为命令选项,即不能直接接待处理文件
常用命令参数:
//指定tar进行的操作,以下三个选项不能出现在同一条命令中
-c //创建一个新的打包文件(archive)
-x //对打包文件(archive)进行解压操作
-t //查看打包文件(archive)的内容,主要是构成打包文件(archive)的文件名 //指定支持的压缩/解压方式,操作取决于前面的参数,若为创建(-c),则进行压缩,若为解压(-x),则进行解压,不加下列参数时,则为单纯的打包操作
-z //使用gzip进行压缩/解压,一般使用.tar.gz后缀
-j //使用bzip2进行压缩/解压,一般使用.tar.bz2后缀 //指定tar指令使用的文件,若没有压缩操作,则以.tar作为后缀
-f filename //-f后面接操作使用的文件,用空格隔开,且中间不能有其他参数,推荐放在参数集最后或单独作为参数
//文件作用取决于前面的参数,若为创建(-c),则-f后为创建的文件的名字(路径),若为(-x/t),则-f后为待解压/查看的打包压缩文件名 //其他辅助选项
-v //详细显示正在处理的文件名
-C Dir //将解压文件放置在 -C 指定的目录下
-p(小写) //保留文件的权限和属性,在备份文件时较有用
-P(大写) //保留原文件的绝对路径,即不会拿掉文件路径开始的根目录
--exclude=file //排除不进行打包的文件
常见的tar指令操作如下:
压缩: tar -cvjpf etc.tar.bz2 /etc //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具体的操作对象/etc目录
查看:
tar -tvjf etc.tar.bz2 //-t为查看操作,则-f对应所查看的文件的名称,文件后缀显示使用bzip2进行压缩,所以加入-j选项,-v会显示详细的权限信息 解压
tar -xvjf etc.tar.bz2 //-x为解压操作,则-f指定的是解压使用的文件,文件后缀显示使用bzip2进行压缩,所以加入-j选项,即使用bzip2解压
//若只解压指定打包文件中的一个文件,在上述指令的最后加上带解压文件名作为参数即可
注意:使用tar打包的文件会保存原有的文件路径,并默认取出了所有成员文件路径的根目录,如下图
这样做的目的在于,当用户在某一目录如/home/haha目录下进行解压操作时,tar会将解压出来的文件路径与当前目录拼接,即为 /home/haha/etc/emacs,从而将文件解压在当前目录下。(如果还有印象,目录名也可以使用 -C 选项指定)但若是打包压缩时不取出文件路径的根目录,则会按照存储的绝对路径如/etc/emacs解压文件,可能将/etc文件下的相应文件覆盖掉,当然在进行备份和恢复时该操作是有效的。tar提供 -P选项来保留文件路径的根目录。
zip文件相关命令 -- unzip
unzip 命令与之前的 tar 指令类似,具有对 zip 文件进行查看、测试和解压的功能。
基本格式:unzip [Options] file[.zip] //不接任何Options时,默认将指定的file文件解压至当前文件夹,可同时接受多个文件参数
常用命令参数:
//压缩文件内容查看
-Z //以形如 ls -l 的格式显示目标文件内容,实际原理是命令第一个参数为-Z时,其余参数会被视为 zipinfo 的参数,并产生对应效果
-Z1 //仅显示压缩文件内容的文件名,更多显示可查看 zipinfo 命令的 man 帮助
-l //显示压缩文件中包括时间、占用空间和文件名等信息,内容上较 -Z 更简单 //文件测试
-t //在内存中解压文件并进行文件的完整性校验(CRC校验) //解压缩参数,注意unzip默认即为解压操作
-f //注意与 tar 命令不同,unzip指定 -f 参数时,则将磁盘上已经存在且内容新于对应磁盘文件的压缩内容解压出来
-n //解压缩时不覆盖已存在的文件(而是跳过)
-q //安静模式,仅解压缩而不输出详细信息
-d dir //将文件解压至dir指定的文件夹中
可以使用unzip命令对zip文件进行相关的操作。
(1)查看压缩文件的所有文件名(注意 -Z 选项表示之后所有的参数被视为 zipinfo 的参数并输出相应结果) -> unzip -Z1 file.zip
(2)测试文件的完整性 -> unzip -t file.zip
(3)将文件解压至当前用户的主目录 -> unzip -q file.zip -d ~
Linux下文件的打包、解压缩指令——tar,gzip,bzip2的更多相关文章
- linux下文件的打包和压缩
文章来源:linux下文件的打包和压缩 目录 一.文件压缩的原理 二.linux常见的压缩指令 三.常用实例 1.tar命令 2.zip命令 3.gz命令 4.bz2命令 5.xz命令(必须分两步) ...
- Linux下文件的打包、解压缩指令——tar,gzip,bzip2,unzip,rar
本文是笔者对鸟叔的Linux私房菜(基础学习篇) 第三版(中文网站)中关于 Linux 环境下打包和解压缩指令的内容以及日常操作过程中所接触的相关指令的总结和记录,以供备忘和分享.更多详细信息可直接参 ...
- Linux下文件的压缩与打包
一.Linux下常见的文件压缩命令: 在Linux的环境中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』,为什么会有这样的扩展名呢? 这 ...
- Linux的文件的打包(tar方法)
Linux的文件的打包(tar方法) tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一 ...
- Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img.
Linux下 解包/打包 Android 映像文件 system.img, boot.img, ramdisk.img, userdata.img. 2014年10月20日 ⁄ 计算机视觉 ⁄ 共 1 ...
- Linux下的常见压缩解压缩命令
Linux常见压缩解压缩命令 常见压缩文件扩展名 .Z compress 程序压缩的文件: .zip zip 程序压缩的文件: .gz gzip 程序压缩的文件: .bz2 bzip2 程序压缩的文件 ...
- 学习笔记12—linux下文件的复制、移动与删除
查看centOS 版本 cat /etc/redhat-release 1,复制粘贴文件 cp [选项] 源文件或目录 目标文件或目录 2,剪切粘贴文件 mv [选项] 源文件或目录 ...
- linux下history命令显示历史指令记录的使用方法
Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...
- Linux下文件的权限
一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...
随机推荐
- 给大家推荐一款非常好用的表单验证插件:lr-verify.js
废话不说,直接上代码说明,1分钟学会: 例: 1.验证配置 $.extend(Verify.types, { "must" : { "verify" : fun ...
- #leetcode刷题之路21-合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4输出:1->1->2-&g ...
- armv7学习记录
ARM架构支持跨大范围性能点的实现.ARM处理器的架构简单性导致了非常小的实现,而小的实现意味着设备可以具有非常低的功耗.实现大小.性能和非常低的功耗是ARM体系结构的关键属性. ARM架构是一个精简 ...
- python基础知识你学会了多少
前言 学习是一个循序渐进的过程,不在于你学了多少,而在于你学会了多少.(装个b好吧,hhhh) 知识总结 之前一直想在网上找一个总结好的笔记,但是一直都没有找到,因此下定决心要总结一下,里面的都是在学 ...
- sourcetree的安装及使用
sourcetree下载地址:https://www.sourcetreeapp.com/ 点击安装包安装 此前需要跳转到bitbucket登录,我没有账号,所以我直接跳转到到https://bitb ...
- leetcode记录-组合两个表
表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | | Firs ...
- Oracle入门第六天(下)——高级子查询
一.概述 主要内容: 二.子查询介绍 1.简单子查询(WHERE子查询) SELECT last_name FROM employees WHERE salary > (SELECT salar ...
- HIVE-分桶表的详解和创建实例
我们学习一下分桶表,其实分区和分桶这两个概念对于初学者来说是比较难理解的.但对于理解了的人来说,发现又是如此简单. 我们先建立一个分桶表,并尝试直接上传一个数据 buckets row format ...
- sql语句-2-字符串数字日期时间
- 【LOJ4632】[PKUSC2018]真实排名
[LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...