Linux文件的压缩和解压
【图书推荐】《Ubuntu Linux系统管理与运维实战》_学ubuntu哪本书好-CSDN博客
【图书介绍】】几本Linux系统管理与运维图书_朱文伟 linux驱动-CSDN博客
《Ubuntu Linux系统管理与运维实战(Linux技术丛书)》(张春晓,肖志健)【摘要 书评 试读】- 京东图书
在归档文件的时候,通常是对文件进行压缩处理,以节约磁盘空间。而需要查询归档文件的时候,则是将压缩后的文件释放出来。Linux提供了非常多的压缩和解压缩工具,这些工具通常是成对出现的,每种工具都有自己的特色。本节将对常用的几种压缩/解压缩工具进行介绍。
5.8.1 压缩文件
压缩文件是按照某种特定的压缩算法将文件内容进行压缩,以减少占用的磁盘空间。Linux系统中常用的压缩命令有zip、gzip、compress、bzip2等。
1. zip命令
zip命令的基本语法如下:
zip [option] zipfile file ...
zip命令常用的选项有:
- -d:从压缩文件中删除指定的文件。
- m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
- -r:递归处理,将指定目录下的所有文件和子目录一并处理。
zipfile参数为压缩文件的名称,file参数为要压缩的文件列表,多个文件名之间用空格隔开,可以使用通配符。zip命令压缩后的文件的扩展名为.zip。
例如,下面的命令将所有.c文件压缩成src.zip文件:
liu@ubuntu:~$ zip src.zip *.c
adding: all.c (deflated 69%)
adding: file.c (deflated 32%)
adding: hello.c (deflated 13%)
使用-d选项可以将某个文件从压缩文件中删除,如下所示:
liu@ubuntu:~$ zip -d src.zip file.c
deleting: file.c
上面的命令将file.c文件从src.zip文件中删除。
使用-r选项可以实现递归压缩目录,例如,下面的命令将src目录及其子目录压缩为src.zip:
liu@ubuntu:~$ zip -r src.zip src
adding: src/ (stored 0%)
adding: src/hello1.c (deflated 20%)
adding: src/test.c (stored 0%)
adding: src/file.c (deflated 32%)
adding: src/hello.c (deflated 13%)
2. gzip命令
gzip是Linux系统中经常使用的压缩命令之一,既方便又好用。gzip不仅可以用来压缩大的文件以节省磁盘空间,还可以和tar命令一起构成Linux系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时可以减少传输的时间。gzip命令的基本语法如下:
gzip [ option ] [ name ... ]
gzip命令常用的选项有:
- -d:解压缩文件。
- -l:列出压缩文件中每个文件的信息,包括压缩后的大小、压缩前的大小、压缩比以及文件名等。
- -r:递归处理,将指定目录下的所有文件及子目录一并处理。
name参数为要压缩的文件的列表,支持通配符。gzip命令压缩后的文件的扩展名为.gz。
例如,下面的命令将当前目录中的所有日志文件压缩成.gz文件:
liu@ubuntu:~/logback$ gzip *.log
压缩完成之后,可以使用ls命令查看执行结果,如下所示:
liu@ubuntu:~/logback$ ls -l
总用量 12
-rw-r--r-- 1 liu liu 8146 9月 9 11:25 bootstrap.log.gz
-rw-r--r-- 1 liu liu 576 9月 9 11:25 fontconfig.log.gz
可以发现,默认情况下gzip命令会逐个将文件压缩,压缩文件以源文件名加上后缀.gz命名,操作完成后,原始文件被删除。
用户可以使用-l选项查看该压缩文件,如下所示:
liu@ubuntu:~/logback$ gzip -l bootstrap.log.gz
compressed uncompressed ratio uncompressed_name
8146 59400 86.3% bootstrap.log
单独的gzip命令不可以将多个文件压缩为一个文件,但是用户可以结合tar命令来实现这个操作。首先通过tar命令将所需要压缩的文件打包,然后将打包后的.tar文件压缩。这就是在Linux系统中经常见到的.tar.gz文件。
3. compress命令
compress是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出.Z的扩展名。compress命令的基本语法与gzip大同小异。例如,下面的命令将当前目录中的所有的.c文件压缩为.Z文件:
liu@ubuntu:~/src$ compress *.c
liu@ubuntu:~/src$ ls -l
总用量 16
-rwxr-xr-x 1 liu liu 273 9月 9 11:09 file.c.Z
-rwxr-xr-x 1 liu liu 171 9月 9 11:09 hello1.c.Z
-rwxr-xr-x 1 liu liu 135 9月 9 11:09 hello.c.Z
…
4. bzip2
bzip2命令用于创建和管理扩展名为.bz2的压缩包。bzip2命令常用的选项有:
- -d:执行解压缩。
- -f:在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,则使用此选项。
- -k:在执行压缩时,保留原始文件。
例如,下面的命令将当前目录中所有的.c文件压缩为.bz2文件:
liu@ubuntu:~/src$ bzip2 *.c
liu@ubuntu:~/src$ ls -l
总用量 16
-rwxr-xr-x 1 liu liu 278 9月 9 11:09 file.c.bz2
-rwxr-xr-x 1 liu liu 185 9月 9 11:09 hello1.c.bz2
-rwxr-xr-x 1 liu liu 155 9月 9 11:09 hello.c.bz2
-rw-r--r-- 1 liu liu 42 9月 9 15:30 test.c.bz2
…
注意:除zip命令外,gzip、compress以及bzip2命令都不可以将多个文件压缩为单个文件。在使用后3个命令压缩文件时,可以结合tar命令实现将多个文件压缩为单个文件。
5.8.2 解压文件
由于每个压缩命令都有自己的压缩算法,因此压缩命令和解压命令通常都是成对的。zip、gzip、compress和bzip2命令对应的解压命令分别为unzip、gunzip、uncompress和bunzip2。
例如,下面的命令列出压缩文件src.zip中的文件列表:
liu@ubuntu:~$ unzip -l src.zip
Archive: src.zip
Length Date Time Name
--------- ---------- ----- ----
0 2023-07-09 15:30 src/
183 2023-07-09 11:09 src/hello1.c
5 2023-07-09 15:30 src/test.c
331 2023-07-09 11:09 src/file.c
138 2023-07-09 11:09 src/hello.c
--------- -------
657
下面的命令将文件src.zip解压:
liu@ubuntu:~$ unzip src.zip
Archive: src.zip
inflating: src/hello1.c
extracting: src/test.c
inflating: src/file.c
inflating: src/hello.c
下面的命令将sorted1.txt.gz文件解压,并且删除压缩文件:
liu@ubuntu:~$ gunzip sorted1.txt.gz
下面的命令将all.c.gz文件解压,并且删除压缩文件:
liu@ubuntu:~$ uncompress all.c.gz
下面的命令将所有的.bz2文件解压:
liu@ubuntu:~/src$ bunzip2 *.bz2