鸟哥的Linux私房菜_基础版_学习笔记5:第九章 文件与文件系统的压缩与打包

9.2 Linux 系统常见的压缩命令:

*.Z         compress 程序压缩的文件;
*.gz        gzip 程序压缩的文件;
*.bz2       bzip2 程序压缩的文件;
*.tar       tar 程序打包的数据,并没有压缩过;
*.tar.gz    tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2   tar 程序打包的文件,其中并且经过 bzip2 的压缩

9.2.1 compress 

[[email protected] ~]# apt-get install ncompress
[[email protected] ~]# compress [-rcv] 文件或目录<==这里是压缩
[[email protected] ~]# uncompress 文件.Z         <==这里是解压缩选项与参数:
-r  :可以连同目录下的文件也同时给予压缩呢!
-c  :将压缩数据输出成为 standard output (输出到萤幕)
-v  :可以秀出压缩后的文件资讯以及压缩过程中的一些档名变化。

9.2.2 gzip, zcat (只能用于单文件,不能用于文件夹)

gzip用于压缩和解压,  zcat 如果源文件是文字档,可以用zcat查看。

注意:解压时不要用gunzip命令,不好背。使用gzip -d 来进行解压缩。

gzip
可以说是应用度最广的压缩命令了!目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。 至於 gzip 所创建的压缩档为 *.gz 的档名喔!

[[email protected] ~]# gzip [-cdtv#] 档名
[[email protected] ~]# zcat 档名.gz选项与参数:
-c  :将压缩的数据输出到萤幕上,可透过数据流重导向来处理;
-d  :解压缩的参数;
-t  :可以用来检验一个压缩档的一致性~看看文件有无错误;
-v  :可以显示出原文件/压缩文件的压缩比等资讯;
-#  :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
[[email protected] tmp]# gzip -v man.config
man.config:      56.1% -- replaced with man.config.gz
范例三:将范例一的文件解压缩
[[email protected] tmp]# gzip -d man.config.gz# 不要使用 gunzip 这个命令,不好背!使用 gzip -d 来进行解压缩!
# 与 gzip 相反, gzip -d 会将原本的 .gz 删除,产生原本的 man.config 文件。范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[[email protected] tmp]# gzip -9 -c man.config > man.config.gz

其实 gzip 的压缩已经最佳化过了,所以虽然 gzip 提供 1~9 的压缩等级,不过使用默认的 6 就非常好用了! 因此上述的范例四可以不要加入那个 -9 的选项。范例四的重点在那个 -c 与 > 的使用罗!

9.2.3bzip2, bzcat 

若说 gzip 是为了取代 compress 并提供更好的压缩比而成立的,那么 bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的。 bzip2 真是很不错用的东西~这玩意的压缩比竟然比 gzip 还要好~至於 bzip2 的用法几乎与 gzip 相同! 看看底下的用法吧!

[[email protected] ~]# bzip2 [-cdkzv#] 档名
[[email protected] ~]# bzcat 档名.bz2选项与参数:
-c  :将压缩的过程产生的数据输出到萤幕上!
-d  :解压缩的参数
-k  :保留原始文件,而不会删除原始的文件喔!
-z  :压缩的参数
-v  :可以显示出原文件/压缩文件的压缩比等资讯;
-#  :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!范例一:将刚刚的 /tmp/man.config 以 bzip2 压缩
[[email protected] tmp]# bzip2 -z man.config # 此时 man.config 会变成 man.config.bz2 !范例二:将范例一的文件内容读出来!
[[email protected] tmp]# bzcat man.config.bz2# 此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容!!范例三:将范例一的文件解压缩
[[email protected] tmp]# bzip2 -d man.config.bz2范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件
[[email protected] tmp]# bzip2 -9 -c man.config > man.config.bz2

9.3 打包命令: tar

9.3.1 tar

tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗!

[[email protected] ~]# tar [-j|-z] [cv] [-f 创建的档名] filename...<==打包与压缩
[[email protected] ~]# tar [-j|-z] [tv] [-f 创建的档名]            <==察看档名
[[email protected] ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 目录]  <==解压缩选项与参数:
-c  :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t  :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x  :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
      特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。
-j  :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z  :透过 gzip  的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v  :在压缩/解压缩的过程中,将正在处理的档名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗!
-C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其他后续练习会使用到的选项介绍:
-p  :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档
-P  :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

其实最简单的使用 tar 就只要记忆底下的方式即可:

  • 压 缩:tar -jcv -f filename.tar.bz2 filename要被压缩的文件或目录名称
  • 查 询:tar -jtv -f filename.tar.bz2
  • 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
  • 压 缩:tar -zcv -f filename.tar.gz filename要被压缩的文件或目录名称
  • 查 询:tar -ztv -f filename.tar.gz
  • 解压缩:tar -zxv -f filename.tar.gz -C 欲解压缩的目录
    -C 目录    :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
    • 将备份的数据解压缩,并考虑特定目录的解压缩动作 (-C 选项的应用)

    那如果想要解打包呢?很简单的动作就是直接进行解打包嘛!

    [[email protected] ~]# tar -jxv -f /root/etc.tar.bz2
    [[email protected] ~]# ll....(前面省略)....
    drwxr-xr-x 105 root root    12288 Nov 11 04:02 etc
    ....(后面省略)....

    此时该打包文件会在『本目录下进行解压缩』的动作! 所以,你等一下就会在家目录底下发现一个名为 etc 的目录罗!所以罗,如果你想要将该文件在 /tmp 底下解开, 可以 cd /tmp 后,再下达上述的命令即可。不过,这样好像很麻烦呢~有没有更简单的方法可以『指定欲解开的目录』呢? 有的,可以使用 -C
    这个选项喔!举例来说:

    [[email protected] ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
    [[email protected] ~]# ll /tmp....(前面省略)....
    drwxr-xr-x 105 root root    12288 Nov 11 04:02 etc
    ....(后面省略)....

    9.4 完整备份工具:dump

    9.4.1 dump

    其实 dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级喔!什么意思啊! 假设你的 /home 是独立的一个文件系统,那你第一次进行过 dump 后,再进行第二次 dump 时, 你可以指定不同的备份等级,假如指定等级为 1 时,此时新备份的数据只会记录与第一次备份所有差异的文件而已。

    图 4.1.1、dump 运行的等级 (level)

    [[email protected] ~]# dump [-Suvj] [-level] [-f 备份档] 待备份数据
    [[email protected] ~]# dump -W选项与参数:
    -S    :仅列出后面的待备份数据需要多少磁碟空间才能够备份完毕;
    -u    :将这次 dump 的时间记录到 /etc/dumpdates 文件中;
    -v    :将 dump 的文件过程显示出来;
    -j    :加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
    -level:就是我们谈到的等级,从 -0 ~ -9 共十个等级;
    -f    :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置档名等
    -W    :列出在 /etc/fstab 里面的具有 dump 配置的 partition 是否有备份过?

    详情看原书

    9.4.2 restore

    备份档就是在急用时可以回复系统的重要数据,所以有备份当然就得要学学如何复原了! dump 的复原使用的是 restore 这个命令!这个命令的选项也非常的多~您可以自行 man restore 瞧瞧! 鸟哥在这里仅作个简单的介绍罗!

    [[email protected] ~]# restore -t [-f dumpfile] [-h]       <==用来察看 dump 档
    [[email protected] ~]# restore -C [-f dumpfile] [-D 挂载点]<==比较dump与实际文件
    [[email protected] ~]# restore -i [-f dumpfile]            <==进入互动模式
    [[email protected] ~]# restore -r [-f dumpfile]            <==还原整个文件系统选项与参数:
    相关的各种模式,各种模式无法混用喔!例如不可以写 -tC 啦!
    -t  :此模式用在察看 dump 起来的备份档中含有什么重要数据!类似 tar -t 功能;
    -C  :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,
          最终会列出『在 dump 文件内有记录的,且目前文件系统不一样』的文件;
    -i  :进入互动模式,可以仅还原部分文件,用在 dump 目录时的还原!
    -r  :将整个 filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份;
    其他较常用到的选项功能:
    -h  :察看完整备份数据中的 inode 与文件系统 label 等资讯
    -f  :后面就接你要处理的那个 dump 文件罗!
    -D  :与 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同的文件!

    9.5 光盘写入工具

    虽然 Linux 图形介面已经有不少的烧录软件可用, 但有时如果你希望系统自动在某些时刻帮你主动的进行烧录时,那么文字介面的烧录行为就有帮助啦!

    那么文字模式的烧录行为要怎么处理呢?通常的作法是这样的:

    • 先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
    • 将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。

    9.5.1 mkisofs:创建映像档

    [[email protected] ~]# mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] \
    >  -graft-point isodir=systemdir ...选项与参数:
    -o :后面接你想要产生的那个映像档档名。
    -r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的资讯;
    -v :显示建置 ISO 文件的过程
    -m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中
    -V vol  :创建 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西
    -graft-point:graft有转嫁或移植的意思,相关数据在底下文章内说明。

    9.5.2 cdrecord:光盘烧录工具

    9.6其他常见的压缩与备份工具

    9.6.1 dd

    [[email protected] ~]# dd if="input_file" of="output_file" bs="block_size" \
    > count="number"选项与参数:
    if   :就是 input file 罗~也可以是装置喔!
    of   :就是 output file 喔~也可以是装置;
    bs   :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小)
    count:多少个 bs 的意思。范例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中
    [[email protected] ~]# dd if=/etc/passwd of=/tmp/passwd.back
    3+1 records in
    3+1 records out
    1945 bytes (1.9 kB) copied, 0.000332893 seconds, 5.8 MB/s
    [[email protected] ~]# ll /etc/passwd /tmp/passwd.back
    -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd
    -rw-r--r-- 1 root root 1945 Dec 17 18:09 /tmp/passwd.back
    # 仔细的看一下,我的 /etc/passwd 文件大小为 1945 bytes,因为我没有配置 bs ,
    # 所以默认是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的
    # 512 bytes,以及未满 512 bytes 的另一个 block 的意思啦!
    # 事实上,感觉好像是 cp 这个命令啦~范例二:将自己的磁碟之第一个磁区备份下来
    [[email protected] ~]# dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1
    1+0 records in
    1+0 records out
    512 bytes (512 B) copied, 0.0104586 seconds, 49.0 kB/s
    # 第一个磁区内含有 MBR 与 partition table ,透过这个动作,
    # 我们可以一口气将这个磁碟的 MBR 与 partition table 进行备份哩!范例三:找出你系统最小的那个分割槽,并且将他备份下来:
    [[email protected] ~]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hdc2             9.5G  3.9G  5.1G  44% /
    /dev/hdc3             4.8G  651M  3.9G  15% /home
    /dev/hdc1              99M   21M   73M  23% /boot  <==就捉他好了!
    [[email protected] ~]# dd if=/dev/hdc1 of=/tmp/boot.whole.disk
    208782+0 records in
    208782+0 records out
    106896384 bytes (107 MB) copied, 6.24721 seconds, 17.1 MB/s
    [[email protected] ~]# ll -h /tmp/boot.whole.disk
    -rw-r--r-- 1 root root 102M Dec 17 18:14 /tmp/boot.whole.disk
    # 等於是将整个 /dev/hdc1 通通捉下来的意思~如果要还原呢?就反向回去!
    # dd if=/tmp/boot.whole.disk of=/dev/hdc1 即可!非常简单吧!
    # 简单的说,如果想要整个硬盘备份的话,就类似 Norton 的 ghost 软件一般,
    # 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害!

    你可以说, tar 可以用来备份关键数据,而 dd 则可以用来备份整颗 partition 或 整颗 disk ,很不错啊~不过,如果要将数据填回到 filesystem 当中, 可能需要考虑到原本的 filesystem 才能成功啊!让我们来完成底下的例题试看看:

    例题:

    你想要将你的 /dev/hdc1 进行完整的复制到另一个 partition 上,请使用你的系统上面未分割完毕的容量再创建一个与 /dev/hdc1 差不多大小的分割槽 (只能比 /dev/hdc1 大,不能比他小!),然后将之进行完整的复制 (包括需要复制 boot sector 的区块)。

    答:

    由於需要复制 boot sector 的区块,所以使用 cp 或者是 tar 这种命令是无法达成需求的! 此时那个 dd 就派的上用场了。你可以这样做:

    # 1. 先进行分割的动作
    [[email protected] ~]# fdisk -l /dev/hdc
       Device Boot   Start    End    Blocks   Id  System
    /dev/hdc1   *        1     13    104391   83  Linux
    # 上面鸟哥仅撷取重要的数据而已!我们可以看到 /dev/hdc1 仅有 13 个磁柱
    
    [[email protected] ~]# fdisk /dev/hdc
    Command (m for help): n
    First cylinder (2354-5005, default 2354): 这里按 enter
    Using default value 2354
    Last cylinder or +size or +sizeM or +sizeK (2354-5005, default 5005): 2366
    
    Command (m for help): p
       Device Boot   Start    End    Blocks   Id  System
    /dev/hdc9         2354   2366    104391   83  Linux
    
    Command (m for help): w# 为什么要使用 2366 呢?因为 /dev/hdc1 使用 13 个磁柱,因此新的 partition
    # 我们也给她 13 个磁柱,因此 2354 + 13 -1 = 2366 罗!
    
    [[email protected] ~]# partprobe# 2. 不需要格式化,直接进行 sector 表面的复制!
    [[email protected] ~]# dd if=/dev/hdc1 of=/dev/hdc9
    208782+0 records in
    208782+0 records out
    106896384 bytes (107 MB) copied, 16.8797 seconds, 6.3 MB/s
    
    [[email protected] ~]# mount /dev/hdc9 /mnt
    [[email protected] ~]# df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/hdc1               101086     21408     74459  23% /boot
    /dev/hdc9               101086     21408     74459  23% /mnt
    # 这两个玩意儿会『一模一样』喔!
    [[email protected] ~]# umount /mnt

    9.6.2 cpio

    这个命令挺有趣的,因为 cpio 可以备份任何东西,包括装置设备文件。不过 cpio 有个大问题, 那就是 cpio 不会主动的去找文件来备份!啊!那怎办?所以罗,一般来说, cpio 得要配合类似 find 等可以找到档名的命令来告知
    cpio 该被备份的数据在哪里啊! 有点小麻烦啦~

    时间: 2024-08-13 19:59:13

    鸟哥的Linux私房菜_基础版_学习笔记5:第九章 文件与文件系统的压缩与打包的相关文章

    鸟哥的Linux私房菜(基础学习,服务器架设)

    纪念下吧:2014年大连的第一场雪,12月1号,早上出门就看见漫天飘着雪花,其实,还是很漂亮的! 自学过Linux的同学应该对<鸟哥的Linux私房菜>不会陌生,鸟哥分成两个部分来写,第一本就是<鸟哥的Linux私房菜--基础学习篇>,另一本就叫做<鸟哥的Linux私房菜--服务器架设篇>,第一本的内容大多是讲一些实用命令的,非常适合Linux的初学者去学习,第二本书的主要内容是讲一些网络协议,适合喜欢搞Linux网络的同学去学习,而鸟哥本人又无私的把他的两本书放到了网

    鸟哥的linux私房菜 第三版 基础篇 part3

    第九章 档案与文件系统的压缩与打包 *.Z compress程序压缩的档案   .gz gzip程序压缩的档案  .bz2 bzip2程序压缩的档案  .tar  tar打包的数据,没压缩  .tar.gz 打包的数据,并被gzip压缩 zcat config.gz 压缩 tar -jcv -f filename.tar.bz2     rm -rf !!! 完整备份工具  dump [-S:仅列出后面的待备份数据需要多少磁盘空间  u:把dump的时间记录到/etc/dumpdates里 v:

    Linux学习笔记(四)文件与文件系统的压缩与打包

    1.压缩命令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘空间.压缩前与压缩后的文件所占用的磁盘空间比值,就可以称为"压缩比". 2.压缩的好处是可以减少磁盘空间的浪费,在www网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升. 3.压缩文件的拓展名大多是.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2. 4.常见的压缩命令有gzip与bzip2,其中bzip2的压缩比gizp还要更好,建议使用bzip2. 5.tar可以用

    鸟哥的 Linux 私房菜Shell Scripts篇(一)

    12.1 什么是 Shell scripts 什么是 shell script (程序化脚本) 呢?就字面上的意义,我们将他分为两部份. 在" shell"部分,我们在 十章的 BASH 当中已经提过了,那是一个命令行下面让我们与系统沟通的一个工具接口.那么" script "是啥? 字面上的意义, script 是"脚本.剧本"的意思.整句话是说,shell script 是针对 shell 所写的"剧本!"什么东西啊?其实

    《鸟哥的Linux私房菜》13章shel script习题答案

    因为感觉对Linux命令还没有多大的感觉,所以就专门找了鸟哥的书来看一下,折腾了几天看基础篇的shell部分,收获还是蛮大的,至少对Linux命令是有点感觉了,然后往前学习的一些知识,在理论知识方面也得到了一定的扩充了.先不多说,把习题的答案分享一下. <鸟哥的Linux私房菜>基础篇P398习题 (1)请新建一个script,当你执行该script的时候,该script可以显示你目前的身份(用whoami)和你目前所在的目录(用pwd). 这道题的答案已经直接给出了,直接上脚本: #!/bi

    【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

    最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种: -b a:表示不论是否为空行,也同样列出行号(类似cat -n): -b t:如果有空行,空的那一行不要列出行号(默认值).-n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示: -n rn:行号在自己字段的最右方显示,且不加0

    【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

    1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [-ahikHTm] 目录或文件名:列出文件系统的整理磁盘使用量.参数:-a:列出所有的文件系统,包括系统特有的/proc等文件系统:-k:以KB的容量显示各文件系统:-m:以MB的容量显示各文件系统:-h:以人们易阅读的GB.MB.KB等格式自行显示:-H:以M=1000K替代M=1024K的进位方

    【Linux】鸟哥的Linux私房菜基础学习篇整理(七)

    1. test命令的测试功能.测试的标志:(1)关于文件类型的检测 test [-efdbcSpL] filename-e:该文件名是否存在:-f:该文件名是否为文件:-d:该文件名是否为目录:-b:该文件名是否存在且为一个block device设备:-c:该文件名是否存在且为一个character device设备:-S:该文件名是否存在且为一个Socket文件:-p:该文件名是否存在且为一个FIFO文件:-L:该文件名是否存在且为一个连接文件.(2)关于文件权限的检测 test [-r]

    鸟哥的 Linux 私房菜(服务器) 第二章 网络基础概念

    鸟哥的 Linux 私房菜(服务器) @(学习笔记)[Linux|Markdown|笔记] [TOC] 第二章 网络基础概念 2.1 网络是个什么玩意儿 OSI 七层协定 分层 负责内容 Layer 1物理层Physical Layer 由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串. Layer 2数据链结层Data-Link Layer 这一层是比较特殊的一个阶层,因为