博客地址:http://www.moonxy.com

一、前言

在 Linux 系统中,文件的后缀名没有实际的意义,加或者不加都无所谓。但是为了便于区分,我们习惯在定义文件名时加一个后缀名,比如常见的归档文件 .gz,归档压缩文件 .tar.gz 等,特别对于压缩文件,最好加上后缀名,这样方便判断压缩文件是由那种压缩工具所压缩,而后才能去正确地解压缩这个文件。打包和压缩虽然经常同时出现,但是两者却各不相同,打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

二、打包归档

tar 是一个打包工具,可以把目录或文件打包成一个文件,它将所有文件归档成一个大文件整体,方便复制或者移动。命令格式为:tar [-zjxcvfpP] filename 目录或文件,此命令选项前的"-"可以省略。tar 命令可以用来压缩打包单文件、多个文件、单个目录、多个目录,使用 tar 命令打包后原文件不会删除

-z:表示同时使用 gzip 压缩;
-j:表示同时使用 bzip2 压缩;
-J:表示同时使用 xz 压缩;
-x:表示解包或者解压缩;
-t:表示查看 tar 包里的文件;
-c:表示建立一个 tar 包或者压缩包;
-v:表示可视化,即显示打包的内容;
-f:表示后面需要跟文件名,即 "-f filename",表示归档后的文件名为 filename,或者解包文件名为 filename。如果使用了多个参数时,-f 参数一定要写到参数列表的最后;
-p:使用原文件的原来属性(属性不会依据使用者而变),恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 加了 -p 之后,tar 进行解压后,生成的文件的权限,是直接取自 tar 包里面文件的权限(不会再使用该用户的 umask 值进行运算),那么不加 -p 参数,将还要再减去 umask 的值(位运算的减),但是如果使用 root 用户进行操作,加不加 -p 参数都一样;
-P:不剥离起始路径的“/”目录,可以使用绝对路径来压缩。一般情况下,待压缩的目录如果是一个绝对路径,压缩后会将根目录符号/去掉,这样,在解压时,得到的目录结构是以当前目录为基础目录的,如果在压缩时加上-P,则解压时还是以根目录为基础目录;
-r:向压缩归档文件末尾追加文件;
-u:更新原压缩包中的文件;
--exclude file:在打包或压缩的过程中,不要将 file 打包在内。
不管是打包还是解包,原来的文件是不会删除的,而且它会覆盖当前已经存在的文件或者目录。

打包:tar -cvf filename 文件或目录

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
[root@ryan linux]# tar -cvf test1.tar test1
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar

解包:tar -xvf filename

[root@ryan linux]# tar -tf test1.tar
test1/
test1/cp1.txt
[root@ryan linux]# rm -rf test1
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
-rw-r--r--. root root Mar : test1.tar
[root@ryan linux]# tar -xvf test1.tar
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar

三、压缩工具

Linux 中 compress 命令是一个相当古老的 Unix 档案压缩命令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,所以现在通常改用 gzip 为档案压缩工具。

3.1 gzip 压缩工具

gzip 命令的格式为:gzip [-d#] filename,其中 # 为1-9的数字。gzip 后面跟文件名,压缩后原文件会删除,但是 gzip 不支持压缩目录

-d:该参数在解压缩时使用,gzip -d 后面跟压缩文件表示解压已经压缩的文件;
-#:表示压缩等级,1 为最差,9 为最好,6 为默认值。

压缩:gzip filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar
[root@ryan linux]# gzip test1
gzip: test1 is a directory -- ignored
[root@ryan linux]# gzip install.log
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log.gz
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar

解压文件:gzip -d filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log.gz
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar
[root@ryan linux]# gzip -d install.log.gz
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar

3.2 bzip2 压缩工具

bzip2 命令的格式为:bzip2 [-dz] filename,不能压缩目录,压缩后原文件会删除。-z 表示压缩,-d 表示解压缩。其实,压缩时,-z 选项可以省略。

压缩:bzip2 [-z] filename 文件

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# bzip2 test1
bzip2: Input file test1 is a directory.
[root@ryan linux]# bzip2 file.log
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log.bz2
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz

解压缩:bzip2 -d filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log.bz2
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# bzip2 -d file.log.bz2
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz

3.3 命令 bzcat

bzcat - decompresses files to stdout,查看压缩包文档内容,tar -tf filename 可以查看归档包或者压缩包的文件列表,对于 bzip2 压缩格式的文本文档,我们可以使用 bzcat 命令查看文档内容。bzcat filename

[root@ryan linux]# bzcat file.log.bz2
安装 libgcc-4.4.-.el6.x86_64
warning: libgcc-4.4.-.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
安装 setup-2.8.-.el6_4..noarch
安装 filesystem-2.4.-.el6.x86_64
安装 xml-common-0.6.-.el6.noarch

对应的,zcat 查看 gzip 压缩格式的文本文档内容;xzcat 查看 xz 压缩格式的文本文档内容;此外还有zless、bzless、zmore、bzmore、xzless、xzmore 等命令,其实都是 cat、less、more 的延伸命令,用于查看压缩文档的内容。

3.4 使用 zip 压缩

如果没有安装 zip 命令,首先需要安装:[root@ryan linux]# yum install -y zip,zip 既可以压缩文件也可以压缩目录,且压缩后原文件不删除。

-r 选项表示递归压缩下级目录和文件,如下:zip -r filename 目录或文件

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
-rw-r--r--. root root Mar : test1.zip
drwxr-xr-x. root root Mar : test4
[root@ryan linux]# zip -r test4.zip test4
adding: test4/ (stored %)
adding: test4/cp1.txt (stored %)
adding: test4/testfolder/ (stored %)
adding: test4/testfolder/cp2.txt (stored %)
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
-rw-r--r--. root root Mar : test1.zip
drwxr-xr-x. root root Mar : test4
-rw-r--r--. root root Mar : test4.zip

3.5 解压 zip

解压 zip 压缩包,需要使用 unzip,需要安装:[root@ryan linux]# yum install -y unzip,unzip 解压缩后,原压缩包文件不删除。unzip filename

例如:将压缩文件 text.zip 在指定目录 /tmp下解压缩,如果已有相同的文件存在,要求 unzip命令 不覆盖原先的文件。

unzip -n test.zip -d /tmp

-n:解压缩时不要覆盖原有的文件;

-d<目录>:指定文件解压缩后所要存储的目录;

-v:执行时显示详细的信息;

-o:不必先询问用户,unzip 执行后覆盖原有的文件;unzip -o test.zip -d tmp/

查看压缩文件目录,但不解压。unzip -v test.zip

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
-rw-r--r--. root root Mar : test1.zip
drwxr-xr-x. root root Mar : test4
-rw-r--r--. root root Mar : test4.zip
[root@ryan linux]# rm -rf test4
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
-rw-r--r--. root root Mar : test1.zip
-rw-r--r--. root root Mar : test4.zip
[root@ryan linux]# unzip test4.zip
Archive: test4.zip
creating: test4/
extracting: test4/cp1.txt
creating: test4/testfolder/
extracting: test4/testfolder/cp2.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
-rw-r--r--. root root Mar : test1.zip
drwxr-xr-x. root root Mar : test4
-rw-r--r--. root root Mar : test4.zip
[root@ryan linux]# ls -lR test4
test4:
total
-rw-r--r--. root root Mar : cp1.txt
drwxr-xr-x. root root Mar : testfolder test4/testfolder:
total
-rw-r--r--. root root Mar : cp2.txt

3.6 xz 压缩工具

linux 默认自带 xz 压缩工具,不支持压缩目录,压缩格式为:xz -z filename,-z 可有可无,默认会删除原文件,-k 保留原文件;-0至-9调节压缩率。如果不设置,默认压缩等级是6。xz -d 待解压文件,等价于 unxz 命令;-k 保留原文件。

压缩:xz [-z] filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
drwxr-xr-x. root root Nov : test1
[root@ryan linux]# xz test1
xz: test1: Is a directory, skipping
[root@ryan linux]# xz file.log
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log.xz
drwxr-xr-x. root root Nov : test1

解压:xz -d filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log.xz
drwxr-xr-x. root root Nov : test1
[root@ryan linux]# xz -d file.log.xz
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
drwxr-xr-x. root root Nov : test1

四、打包的同时压缩

tar 命令在使用时可以直接压缩,它支持 gzip 压缩和 bzip2 压缩。

4.1 打包的同时使用 gzip 压缩

使用 -z 选项可以压缩成 gzip 格式的文件,原文件不会删除

打包并压缩:tar -czvf filename 文件或目录

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
[root@ryan linux]# tar -czvf test1.tar.gz test1
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz

解压:tar -zxvf filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# rm -rf test1
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# tar -xzvf test1.tar.gz
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz

4.2 打包的同时使用 bzip2 压缩

使用 -j 选项可以压缩成 bzip2 格式的文件,原文件不会删除

打包并压缩:tar -cjvf filename 文件或目录

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# tar -cjvf test1.tar.bz2 test1
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz

解压:tar -jxvf filename

[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz
[root@ryan linux]# tar -xjvf test1.tar.bz2
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : file.log
-rw-r--r--. root root Mar : install.log
drwxr-xr-x+ root root Dec : test
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.bz2
-rw-r--r--. root root Mar : test1.tar.gz

4.3 打包的同时使用 xz 压缩

使用 -J 选项可以压缩成 xz 格式的文件,原文件不会删除。
如果当前版本linux的tar命令参数支持使用xz压缩,则可直接使用如下命令:tar -cJvf filename.tar.xz
同理,解压的时候,如果当前版本linux的tar命令参数支持使用xz解压,则可直接使用如下命令:tar -Jxv -f filename.tar.xz
否则就要分两步,先用 xz -d 解压,变成 tar 包之后,再用 tar -xvf 解包:
xz -d finename.tar.xz
tar -xvf finename.tar

打包并压缩:tar -cJvf filename 文件或目录

[root@ryan linux]# ls -l
total
drwxr-xr-x. root root Nov : test1
[root@ryan linux]# tar -cJvf test1.tar.xz test1
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.xz

解压:tar -Jxvf filename

[root@ryan linux]# rm -rf test1
[root@ryan linux]# ls -l
total
-rw-r--r--. root root Mar : test1.tar.xz
[root@ryan linux]# tar -Jxvf test1.tar.xz
test1/
test1/cp1.txt
[root@ryan linux]# ls -l
total
drwxr-xr-x. root root Nov : test1
-rw-r--r--. root root Mar : test1.tar.xz

Linux 笔记 - 第八章 文档的打包与压缩的更多相关文章

  1. linux入门教程(十) 文档的压缩与打包

    在windows下我们接触最多的压缩文件就是.rar格式的了.但在linux下这样的格式是不能识别的,它有自己所特有的压缩工具.但有一种文件在windows和linux下都能使用那就是.zip格式的文 ...

  2. linux音频alsa-uda134x驱动文档阅读之一转自http://blog.csdn.net/wantianpei/article/details/7817293

    前言 目前,linux系统常用的音频驱动有两种形式:alsa oss alsa:现在是linux下音频驱动的主要形式,与简单的oss兼容.oss:过去的形式而我们板子上的uda1341用的就是alsa ...

  3. 在Firefox中发现一个在Linux下查看chm文档的插件

    在Firefox浏览器插件中搜索插件chmfox插件,安装后就可以在linux下通过Firefox浏览器阅读chm文档了.

  4. Linux 基础命令、文档树 和 bash

    最近发现了一个总结得更好的:bash cheatsheet 本文只是我对 linux 基础学习的一个总结,可能仅适用于复习用.算是我的 Linux 备忘录. 最基础 tab 补全 * 通配符 ctrl ...

  5. Linux下查看txt文档

    当我们在使用Window操作系统的时候,可能使用最多的文本格式就是txt了,可是当我们将Window平台下的txt文本文档复制到Linux平台下查看时,发现原来的中文所有变成了乱码. 没错, 引起这个 ...

  6. Linux内核最顶层文档

    Linux 内核文档 该文件是 Linux 内核文档树中最顶层的,会随着内核一起更新:其目的是把散乱的文档集成为一个逻辑清晰的完整版,非常欢迎改善文档,如果想做出自己的贡献,加入vger.kernel ...

  7. linux相关的帮助文档

    几乎所有linux发行版都会提供大量的有用的文档. 手册页 linux发行版包含了有关常用命令.系统调用和库函数的手册页.手册页被分成不同的章节并分别标以序号: Section      名称     ...

  8. Linux基础入门级命令文档

    Linux系统上命令的使用格式,及常用命令示例 1.命令提示符 登录系统后,第一眼看到的内容是: [root@node01 ~]# 上图就是 Linux 系统的命令提示符.那么,这个提示符的含义是什么 ...

  9. Sharepoint学习笔记—ECM系列—文档列表的Metedata Navigation与Key Filter功能的实现

    如果一个文档列表中存放了成百上千的文档,想要快速的找到你想要的还真不是件容易的事,Sharepoint提供了Metedata Navigation与Key Filter功能可以帮助我们快速的过滤和定位 ...

随机推荐

  1. 如何将自己的代码发布到Maven中央仓库?

    去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...

  2. 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

    Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能. 另外IOS的Hybrid App也完成 ...

  3. 使用Makefile构建Docker

    使用Makefile构建Docker 刚开始学习docker命令的时候,很喜欢一个字一个字敲,因为这样会记住命令.后来熟悉了之后,每次想要做一些操作的时候就不得不 重复的输入以前的命令.当切换一个项目 ...

  4. C++责任链

    #include <iostream> using namespace std; class Base{ protected: Base *next; public: Base(Base ...

  5. PicGo+GitHub:你的最佳免费图床选择!

    # PicGo介绍 这是一款图片上传的工具,目前支持SM.MS图床,微博图床,七牛图床,腾讯云COS,阿里云OSS,Imgur,又拍云,GitHub等图床,未来将支持更多图床. 所以解决问题的思路就是 ...

  6. unity_数据结构(常见数据结构及适用场景)

    常见的数据结构: 1.Array: 最简单的数据结构 特点:数组存储在连续的内存上.数组的内容都是相同类型.数组可以直接通过下标访问.优点:由于是在连续内存上存储的,所以它的索引速度非常快,访问一个元 ...

  7. Api接口文档管理工具,你知道哪些呢?

    上周看到有人在我的Github开源项目中提了个issue,说是否考虑接入swagger.那今天我就用swagger与其他接口文档工具做对比,同时说说Api接口文档工具的那点事.如今,在前后端分离开发的 ...

  8. java基础-多线程二

    java基础-多线程二 继承thread和实现Runnable的多线程每次都需要经历创建和销毁的过程,频繁的创建和销毁大大影响效率,线程池的诞生就可以很好的解决这一个问题,线程池可以充分的利用线程进行 ...

  9. JPA多条件复杂SQL动态分页查询

    概述 ORM映射为我们带来便利的同时,也失去了较大灵活性,如果SQL较复杂,要进行动态查询,那必定是一件头疼的事情(也可能是lz还没发现好的方法),记录下自己用的三种复杂查询方式. 环境 spring ...

  10. 2019DX#1

    1001 Blank 题意 有一个长度为n(n<=100)的位子,填入四种颜色,有m个限制,某个区间的颜色个数要恰好等于x个.问颜色个数的方案数. 思路 DP 四维的DP,利用滚动数组优化一维空 ...