linux压缩、解压缩命令
压缩文件介绍
在系统中,如果需要有大量的文件进行复制和保存,那么把它们打成压缩包是不错的选择。打包压缩作为常规操作,在 Windows 和 Linux 中都比较常见。Windows 中常见的压缩包格式主要有“.zip”、“.rar”和“.7z”等,但是你了解这些不同压缩格式的区别吗?其实,普通用户并不用理解这些压缩格式的算法有什么区别、压缩比有哪些不同,只要在碰到这些压缩包时会正确地解压缩,在想要压缩时可以正确地操作,目的就达到了。
在 Limux 中也是一样的,可以识别的常见压缩格式有十几种,比如 “.zip”、“.gz”、“.bz2”、“.tar”、“.tar.gz” 压缩等。我们也不需要知道这些压缩格式的具体区别,只要对应的压缩包会解压缩、想要压缩的时候会操作即可。
还有一件事,之前一直强调“Linux 不靠扩展名区分文件类型,而是靠权限”,那压缩包也不应该医分扩展名啊?为什么还要区分是“.gz”还是“.bz2”的扩展名呢?这是因为,在 Linux 中,不同的压缩方法对应的解压缩方法也是不同的,这里的扩展名并不是 Linux 系统一定需要的(Linux 不区分扩展名),而是用来给用户标识压缩格式的。只有知道了正确的压缩格式,才能采用正确的解压缩命令。
大家可以想象一下,如果你压缩了一个文件,起了一个名字“abc”,今天你知道这是一个压缩包,可以解压缩,那半年之后呢?而如果你将它命名为“etc_bak.tar.gz”,那无论什么时 候、无论哪个用户都知道这是/etc/
目录的备份压缩包。所以压缩文件一定要严格区分扩展名,这不是系统必需的,而是用来让管理员区分文件类型的。
.zip
格式
“.zip”是 Windows 中最常用的压缩格式,Linux 也可以正确识别“.zip”格式,这可以方便地和 Windows 系统通用压缩文件。
压缩命令 zip
压缩命令就是 zip
, 命令格式如下:
[root@localhost ~]# zip [选项] 压缩包名 源文件或源目录
选项:
-r :压缩目录
zip
压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以方便解压缩时使用。举个例子:
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
adding: anaconda-ks.cfg (deflated 37%)
#压缩
[root@localhost ~]# ll ana.zip
-rw-r--r-- 1 root root 935 6月 17 16:00 ana.zip
#压缩文件生成
所有的压缩命令都可以同时压缩多个文件,例如:
[rootelocalhost ~]# zip test.zip install.log install.log.syslog
adding: install.log (deflated 72%)
adding: install.log.syslog (deflated 85%)
#同时压缩多个文件到 test.zip 压缩包中
[root@localhost ~]# ll test.zip
-rw-r--r-- 1 root root 8368 6月 17 16:03 test.zip
#压缩文件生成
如果想要压缩目录,则需要使用“-r”选项,例如:
[root@localhost ~]# mkdir dir1
#建立测试目录
[root@localhost ~]# zip -r dir1.zip dir1
adding: dir1/(stored 0g)
#压缩目录
[root@localhost ~]# ls -dl dir1.zip
-rw-r--r-- 1 root root 160 6月 17 16:22 dir1.zip
#压缩文件生成
解压缩命令 unzip
“.zip”格式的解压缩命令是 unzip
,命令格式如下:
[root@localhost ~]# unzip [选项] 压缩包名
选项:
-d :指定解压缩位置
不论是文件压缩包,还是目录压缩包,都可以直接解压缩,例如:
[root@localhost ~]# unzip dir1.zip
Archive: dir1.zip creating: dir1/
#解压缩
也可以手工指定解压缩位置,例如:
[root@localhost ~]# unzip -d /tmp/ ana.zip
Archive: ana.zip inflating:/tmp/anaconda-ks.cfg
#把压缩包解压到指定位置
.gz
格式
“.gz”格式是 Linux 中最常用的压缩格式。
压缩命令 gzip
使用 gzip
命令进行压缩,命令的格式如下:
[root@localhost ~]# gzip [选项] 源文件
选项:
-c :将压缩数据输出到标准输出中,可以用于保留源文件
-d :解压缩
-r :压缩目录
-v :显示压缩文件的信息
-数字 :用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6
- 基本压缩
gzip
压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可。 我们来试试:
[root@localhost ~]# gzip install.log
#压缩 install.log 文件
[root@localhost ~]# ls
anaconda-ks.cfg install.log.gz install.log.syslog
#压缩文件生成,但是源文件也消失了
- 保留源文件压缩
在使用 gzip
命令压缩文件时,源文件会消失,从而生成压缩文件。这时有些人会有强迫症,就会问:能不能在压缩文件的时候,不让源文件消失?好吧,也是可以的,不过很别扭。
[root@localhost ~]# gzip -c anaconda-ks.cfg > anaconda-ks.cfg.gz
#使用 -c 选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中
#这样可以在压缩文件的同时不删除源文件
[root@localhost ~]# ls
#可以看到压缩文件和源文件都存在 anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog
- 压缩目录
我们可能会想当然地认为 gzip
命令可以压缩目录。(其实是分别压缩目录里的所有文件)我们来试试:
[root@localhost ~]# mkdir test
[root@localhost ~]# touch test/test1
[root@localhost ~]# touch test/test2
[root@localhost ~]# touch test/test3
#建立测试目录,并在里面建立几个测试文件
[root@localhost ~]# gzip -r test/
#压缩目录,并没有报错
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog test
#但是查看发现 test 目录依然存在,并没有变为压缩文件
[root@localhost ~]# ls test/
test1.gz test2.gz test3.gz
#原来 gzip 命令不会打包目录,而是把目录下所有的子文件分别压缩
在 Linux 中,打包和压缩是分开处理的。而 gzip
命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况。
解压缩命令 gunzip 或 gzip -d
如果要解压缩“.gz”格式,那么使用 gzip -d 压缩包
和 gunzip 压缩包
命令都可以。
gunzip
命令,格式如下:
[root@localhost ~]# gunzip [选项] 压缩文件
选项:
-r :解压缩目录
常规用法就是直接解压缩文件,例如:
[root@localhost ~]# gunzip install.log.gz
如果要解压缩目录下的内容,则依然使用“-r”选项,例如:
[root@Localhost ~]# gunzip -r test/
当然,gunzip -r
依然只会解压缩目录下的文件,而不会解打包。
gzip -d
命令,例如:
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz
查看压缩的文本文件内容 zcat
如果我们压缩的是一个纯文本文件,则可以直接使用 zcat
命令在不解压缩的情况下查看这个文本文件中的内容。其命令格式如下:
[root@localhost ~]# zcat 压缩文件
例如:
[root@Localhost ~]# zcat anaconda-ks.cfg.gz
.bz2
格式
“.bz2”格式是 Linux 的另一种压缩格式,从理论上来讲,“.bz2”格式的算法更先进、压 缩比更好;而“.gz”格式相对来讲压缩的时间更快。
压缩命令 bzip2
“.bz2”格式的压缩命令是 bzip2
,命令的格式:
[root@Localhost ~]# bzip2 [选项] 源文件
选项:
-d :解压缩
-k :压缩时,保留源文件
-v :显示压缩的详细信息
-数字 :这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低, 压缩比最差;-9 压缩比最高
大家注意,gzip
只是不会打包目录,但是如果使用“-r”选项,则可以分别压缩目录下的每个文件;而 bzip2
命令则根本不支持压缩目录,也没有“-r”选项。
- 基本压缩命令
在压缩文件命令后面直接指定源文件即可,例如:
[root@localhost ~]# bzip2 anaconda-ks.cfg
#压缩成“.bz2”格式
这个压缩命令依然会在压缩的同时删除源文件。
- 压缩的同时保留源文件
bzip2
命令可以直接使用“-k”选项来保留源文件,而不用像 gzip
命令一样使用输出重定向来保留源文件。例如:
[root@localhost ~]# bzip2 -k install.log.syslog
#压缩
[root@localhost ~]# ls
anaconda-ks.cfg.bz2 install.log install.log.syslog install.log.syslog.bz2
#压缩文件和源文件都存在
解压缩命令 bunzip2 或 bzip2 -d
“.bz2”格式可以使用 bzip2 -d 压缩包
命令来进行解压缩,也可以使用 bunzip2 压缩包
命令来进行解压缩。
bunzip2
命令,格式如下:
[root@localhost ~]# bunzip2 [选项] 源文件
选项:
-k :解压缩时,保留源文件
先试试使用 bunzip2
命令来进行解压缩,例如:
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
bzip2 -d 压缩包
命令,例如:
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
查看压缩的文本文件内容 bzcat
和“.gz”格式一样,“.bz2”格式压缩的纯文本文件也可以不解压缩直接查看,使用的命令是 bzcat
。例如:
[root@localhost ~]# bzcat install.log.syslog.bz2
.xz
格式
“.xz”格式是一个压缩率非常高的压缩格式,xz
命令是绝大数 Linux 默认就带的一个压缩工具,压缩率很高。只能压缩文件,不能压缩目录。现在大部分的系统镜像文件都是用此格式压缩。
压缩命令 xz
“.xz”格式的压缩命令是 xz
,命令的格式:
[root@localhost ~]# xz [选项] 文件名
选项:
-d :解压缩
-k :压缩时保留源文件
-t :测试压缩文件的完整性
-数字 :指定压缩比。默认是6,数字越大压缩比就越大(1-9)
例子:
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# cp /var/log/messages ./
#复制 /var/log/messages 文件到当前 /tmp/ 目录下
[root@localhost tmp]# xz messages
# xz 命令压缩 messages 文件
[root@localhost tmp]# ll -h
total 4.0K
-rw------- 1 root root 3.6K Feb 25 17:00 messages.xz
#生成压缩文件 messages.xz
再比如:
[root@localhost tmp]# xz -k messages
# xz -k 命令压缩 messages 文件
[root@localhost tmp]# ll -h
total 100K
-rw------- 1 root root 95K Feb 25 17:00 messages
-rw------- 1 root root 3.6K Feb 25 17:00 messages.xz
#生成压缩文件 messages.xz,且源文件仍存在
# 95K大小的文件,压缩后仅有3.6K,压缩高的不敢相信,但这是真的
解压缩命令 xz -d
“.xz”格式的解压缩没有单独的命令,还是 xz
,命令的格式:xz -d 压缩文件
,看个例子:
[root@localhost tmp]# xz -d messages.xz
# xz -d 解压缩
[root@localhost tmp]# ll -h
total 96K
-rw------- 1 root root 95K Feb 25 17:00 messages
#xz 解压后,直接删除原压缩文件
.tar
格式
通过前面的学习,我们发现,不论是 gzip
命令还是 bzip2
命令,好像都比较笨,gzip
命令不能打包目录,而只能单独压缩目录下的子文件;bzip2
命令干脆就不支持目录的压缩。 在 Limux 中,对打包和压缩是区别对待的。也就是说,在 Linux 中,如果想把多个文件或 目录打包到一个文件包中,则使用的是 tar
命令;而压缩才使用 gzip
或 bzip2
命令。
打包命令 tar -cvf
“.tar”格式的打包和解打包都使用 tar
命令,区别只是选项不同。我们先看看 tar
命令的格式:
[root@localhost tmp]# tar [选项] [-f 压缩包名] 源文件或目录
选项:
-c :打包
-f :指定压缩包的文件名。建议一定要指定正确的指定扩展名。
-v :显示打包文件过程
- 基本用法
我们先打包一个文件练练手。
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
#把 anaconda-ks.ctg 打包为 anaconda-ks.cfg.tar 文件包
选项“-cvf”一般是习惯用法,记住打包时需要指定打包之后的文件名,而且要用“.tar” 作为扩展名。那打包目录呢?我们也试试:
[root@localhost ~]# ll -d test/
drwxr-xr-x 2 root root 4096 6月 17 21:09 test/
#test 是我们之前的测试目录
[root@localhost ~]# tar -cvf test.tar test/
test/
test/test3
test/test2
test/testl
#把目录打包为 test.tar 文件包
tar
命令也可以打包多个文件或目录,只要用空格分开即可。例如:
[root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/
#把 anaconda-ks.cfg 文件和 /tmp 目录打包成 ana.tar 文件包
- 打包压缩目录
我们已经解释过了,压缩命令不能直接压缩目录,我们就先用 tar
命令把目录打成数据包,然后再用 gzip
命令或 bzip2
命令压缩。例如:
[root@localhost ~]# ll -d test test.tar
drwxr-xr-x 2 root root 4096 6月 17 21:09 test
-rw-r--r-- 1 root root 10240 6月 18 01:06 test.tar
#我们之前已经把 test 目录打包成 test.tar 文件包
[root@localhost ~]# gzip test.tar
[root@localhost ~]# ll test.tar.gz
-rw-r--r-- 1 root root 176 6月 18 01:06 test.tar.gz
# gzip 命令会把 test.tar 压缩成 test.tar.gz
[root@localhost ~]# gzip -d test.tar.gz
#解压缩,把 test.tar.gz 解压为 test.tar
[root@localhost ~]# bzip2 test.tar
[root@localhost ~]# ll test.tar.bz2
-rw-r--r-- 1 root root 164 6月 18 01:06 teat.tar.bz2
#bzip2命令会把 test.tar 压缩为 test.tar.bz2 格式
解打包命令 tar -xvf
“.tar”格式的解打包也需要使用 tar
命令,但是选项不太一样。命令格式如下:
[root@localhost ~]# tar [选项] 压缩包
选项:
-x :解打包
-f :指定压缩包的文件名
-v :显示解打包文件过程
-t :测试,不是解打包,只是查看包中有哪些文件
-C 目录 :指定解打包位置
其实解打包和打包相比,只是把打包选项“-cvf”更换为“-xvf”。我们来试试:
[root@localhost ~]# tar -xvf anaconda-ks.cfg.tar
#解打包到当前目录下
如果使用“-xvf”选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用“-C(大写)”选项。例如:
[root@localhost ~1# tar -xvf test.tar -C /tmp
#把文件包 test.tar 解打包到 /tmp/ 目录下
如果只想查看文件包中有哪些文件,则可以把解打包选项“-x”更换为测试选项“-t”。例如:
[root@localhost -]# tar -tvf test.tar
drwxr-xr-x root/root 0 2016-06-17 21:09 test/
-rw-r--r-- root/root 0 2016-06-17 17:51 test/test3
-rw-r--r-- root/root 0 2016-06-17 17:51 test/test2
_rw-r--r-- root/root 0 2016-06-17 17:51 test/testi
#会用长格式显示 test.tar 文得包中文件的详網信息
.tar.gz
、 .tar.bz2
、.tar.xz
格式
你可能会觉得 Linux 实在太不智能了,一个打包压缩,居然还要先打包成“.tar”格式,再压缩成“.tar.gz”或“.tar.bz2”格式。其实 tar
命令是可以同时打包压缩的,前面的讲解之所以把打包和压缩分开,是为了让大家了解在 Linux 中打包和压缩的不同。
使用 tar
命令直接打包压缩。命令格式如下:
[root@localhost -]# tar [选项] 压缩包 源文件或目录
选项:
-z :压缩和解压缩 “.tar.gz” 格式
-j :压缩和解压缩 “.tar.bz2” 格式
-J :压缩和解压缩 “.tar.xz” 格式
.tar.gz
格式
压缩与解压缩 我们先来看看如何压缩“.tar.gz”格式。
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#把 /tmp/ 目录直接打包压缩为“.tar.gz”格式,通过“-z”来识别格式,“-cvf”和打包选项一致
解压缩也只是在解打包选项“-xvf”前面加了一个“-z”选项。
[root@localhost ~]# tar -zxvf tmp.tar.gz
#解压缩与解打包“.tar.gz”格式
前面讲的选项“-C”用于指定解压位置、“-t”用于查看压缩包内容,在这里同样适用。
.tar.bz2
格式
压缩与解压缩 和“.tar.gz”格式唯一的不同就是“-z”选项换成了“-j”。
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
#打包压缩为“.tar.bz2”格式,注意压缩包文件名
[root@localhost ~]# tar -jxvf tmp.tar.bz2
#解压缩与解打包“.tar.bz2”格式
.tar.xz
格式
压缩与解压缩 和“.tar.gz”格式唯一的不同就是“-z”选项换成了“-J”(大写的 J ,与“.tar.bz2”的小写的 j 不要混淆)。
[root@localhost ~]# tar -Jcvf tmp.tar.xz /tmp/
#打包压缩为“.tar.xz”格式,注意压缩包文件名
[root@localhost ~]# tar -Jxvf tmp.tar.xz
#解压缩与解打包“.tar.bz2”格式
把文件直接压缩成“.tar.gz”、“.tar.bz2”和“.tar.xz”格式,才是 Linux 中最常用的压缩方式,这是大家一定要掌握的压缩和解压缩方法。