• linux基础知识-17


    一、标准压缩命令:gzip

    gzip是常用的压缩工具,生成.gz的压缩文件,gzip压缩可以用gunzip解压。

    [linux@ccloves exercises]$ gzip Alan Walker - Fade.mp3 
    [linux@ccloves exercises]$ ls 
    Alan Walker - Fade.mp3.gz  
    

    gzip后面跟上要压缩的文件,老陌发现压缩之后的扩展名是.gz,压缩之后源文件没有了。

    解压文件用gunzip:

    [linux@ccloves exercises]$ gunzip Alan Walker - Fade.mp3.gz 
    [linux@ccloves exercises]$ ls -l
    total 4236
    -rw-r--r--   1 linux linux 4323034 Jul 18 13:41 Alan Walker - Fade.mp3
    

    gzip命令有一些选项:

    -c 将输出重定向到标准输出。
    -d 解压文件
    -r 对目录递归,将里面的文件分别压缩
    -1... -9 指定压缩比

    老陌测试-c 会把压缩的数据写到标准输出中,你会看到一些乱码,这是二进制格式。 压缩完发现原文件并没有删除,所以我们可以利用这个特点,创建压缩而保留源文件。

    [linux@ccloves exercises]$ gzip -c Alan Walker - Fade.mp3  > Alan Walker - Fade.mp3.gz
    [linux@ccloves exercises]$ ls -l
    total 8444
    -rw-r--r--   1 linux linux 4323034 Jul 18 13:41 Alan Walker - Fade.mp3
    -rw-r--r--   1 linux linux 4301908 Jul 18 13:48 Alan Walker - Fade.mp3.gz
    

    注意:后面通过重定向运算符 “>” 把重压缩后的数据流写到 Alan Walker - Fade.mp3.gz 文件中。

    gzip -d 解压缩文件和 gunzip 压缩文件功能一样。

    我们发现gzip不能压缩目录,为了做测试,老陌把/etc/目录复制过来,之后删除链接文件,之后压缩:

    [linux@ccloves exercises]$ cp -r /etc . 2> /dev/null
    [linux@ccloves exercises]$ find . -type l -exec rm {} ;
    [linux@ccloves exercises]$ ls
    Alan Walker - Fade.mp3  etc
    [linux@ccloves exercises]$ gzip etc
    gzip: etc is a directory -- ignored
    

    cp和find命令我们都学过,其中2>这个重定向未接触过,他是把错误信息重定向到一个位置,这里是/dev/null。虽然不能压缩目录,但我们可以递归压缩目录中的文件:

    gzip -r etc
    

    压缩完之后,你进目录里看源文件都没有了,全是压缩后的,所以我们很少用。 如果想解压 gunzip -r etc 就可以了。

    二、标准压缩命令:bzip2

    bzip2生成.bz2格式的压缩文件,bzip2相对较新,压缩比更高。用bzip2压缩可以用bunzip2解压。

    [linux@ccloves exercises]$ bzip2 Alan Walker - Fade.mp3 
    [linux@ccloves exercises]$ ls -l
    total 4208
    -rw-r--r--   1 linux linux 4296076 Jul 18 13:48 Alan Walker - Fade.mp3.bz2
    drwxr-xr-x 134 linux linux   12288 Jul 18 13:56 etc
    

    我们发现和gzip一样,压缩完之后原文件没有了,但好在bzip2也有-c选项,可以把压缩的数据重定向到其它文件中,从而保留源文件。
    bzip2不能压缩目录,也不能递归压缩。但我们之前学过find,可以查找之后压缩,实际上也能够完成对一个目录递归压缩:

    find etc -not -type d -exec bzip2 {} ;
    

    linux下还有很多压缩工具,比如: zip等,还可以安装windows下常用的rar, unrar命令,但linux下常用的就是bzip2和gzip两种。

    三、文件归档tar命令

    虽然bzip2,gzip不能对目录压缩,但可以通过tar命令把目录树保存在一个文件中,之后再压缩。tar命令早期用于把磁盘文件转换成一个文件进行磁带备份,tar就是tape archive(磁带归档)的缩写。

    tar命令的常用选项:

    • -c 用于创建归档文件
    • -x 用于释放归档文件
    • -t 用于列出归档文件内容
    • -f 用于指定归档文件名

    下面我们把etc目录归档到一个文件中。

    [linux@ccloves exercises]$ tar -c -f etc.tar etc
    [linux@ccloves exercises]$ ls -l
    total 51668
    -rw-r--r--   1 linux linux  4323034 Jul 18 13:48 Alan Walker - Fade.mp3
    drwxr-xr-x 134 linux linux    12288 Jul 18 14:05 etc
    -rw-r--r--   1 linux linux 48568320 Jul 18 14:13 etc.tar
    

    这条命令的意思是对etc目录进行归档,归档的文件名是etc.tar,也就是说tar命令生成的文件扩展名是.tar,其中-f指定归档名是etc.tar,这个随意起。

    我们想要看看tar档案里的文件,不用释放归档文件,用-t就可以查看归档文件里的文件列表。

    [linux@ccloves exercises]$ tar -t -f etc.tar
    etc/
    etc/lightdm/
    etc/lightdm/lightdm.conf
    etc/lightdm/keys.conf
    

    如果想要释放档案文件,可以用-x选项,这里要注意释放归档文件时,会释放到当前目录。如果我想释放到/tmp/etc目录中,则先要进入这个目录,之后再释放:

    [linux@ccloves exercises]$ pwd
    /home/linux/exercises
    [linux@ccloves exercises]$ cd /tmp
    [linux@ccloves tmp]$ tar -x -f /home/linux/exercises/etc.tar
    [linux@ccloves tmp]$ ls -ld etc
    drwxr-xr-x 134 linux linux 4096 Jul 18 14:05 etc
    

    还有一种方法用一个参数 -C dir 或 --directory=dir 指定进入的目录(作用相当于 cd dir),之后再释放。 注意这个C是大写的,如果怕与创建弄混可以记住长命令选项 --directory=dir

    tar -xf etc.tar  --directory=/tmp
    

    这条命令表示把etc.tar释放到/tmp目录中,至于用哪种方式用户自己喜好 。另外还要注意,比如我想归档 /etc/network目录,我想表达的意思是归档network目录,而不带etc路径

    [linux@ccloves exercises]$ tar -c -f network.tar /etc/network
    [linux@ccloves exercises]$ tar -t -f network.tar
    etc/network/
    etc/network/interfaces
    etc/network/if-post-down.d/
    

    我们会发现,归档里带etc目录,此时我们就先要切换到 /etc/目录里,之后再tar就可以了,或用-C来处理。

    [linux@ccloves exercises]$ tar -c -f network.tar -C /etc  network
    [linux@ccloves exercises]$ tar -t -f network.tar
    network/
    network/interfaces
    network/if-post-down.d/
    network/if-post-down.d/avahi-daemon
    

    我们发现,这回不带etc路径了,此时老陌明白-C的含义了。 注意上面的命令 -C /etc 后面有空格,之后是network目录名,相录于已经进入到etc目录了。

    当我们把目录归档之后,就变成一个文件了,此时可以用gzip, bzip2进行压缩就可以了。如果想要一步到位,tar命令里面有-z, -j参数可以直接压缩。

    • -z 表示调用gzip压缩和解压缩
    • -j 表示调用bzip2压缩和解压缩

    注意扩展名的命名是:.tar.gz, .tar.bz2

    tar -czf etc.tar.gz  etc
    tar -cjf etc.tar.bz2 etc
  • 相关阅读:
    [Objective-C语言教程]结构体(17)
    [Objective-C语言教程]字符串(16)
    [Swift]LeetCode827. 最大人工岛 | Making A Large Island
    [Swift]LeetCode826. 安排工作以达到最大收益 | Most Profit Assigning Work
    转 由一次磁盘告警引发的血案:du 和 ls 的区别
    Ant 参考
    转 Problem: AnyConnect was not able to establish a connection to the specified secu
    转 oracle 如何停下oracle 服务
    转: Windows如何打开和使用事件查看器管理计算机
    转: oracle 存储过程 执行动态 实现sql
  • 原文地址:https://www.cnblogs.com/myccloves/p/9329202.html
Copyright © 2020-2023  润新知