鸟哥的Linux私房菜_基础版_学习笔记5:第九章 文件与文件系统的压缩与打包
*.Z compress 程序压缩的文件; *.gz gzip 程序压缩的文件; *.bz2 bzip2 程序压缩的文件; *.tar tar 程序打包的数据,并没有压缩过; *.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩 *.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩9.2.1 compress
[root@www ~]# apt-get install ncompress
|
[root@www ~]# compress [-rcv] 文件或目录<==这里是压缩 [root@www ~]# uncompress 文件.Z <==这里是解压缩选项与参数: -r :可以连同目录下的文件也同时给予压缩呢! -c :将压缩数据输出成为 standard output (输出到萤幕) -v :可以秀出压缩后的文件资讯以及压缩过程中的一些档名变化。9.2.2 gzip, zcat (只能用于单文件,不能用于文件夹)
[root@www ~]# gzip [-cdtv#] 档名 [root@www ~]# zcat 档名.gz选项与参数: -c :将压缩的数据输出到萤幕上,可透过数据流重导向来处理; -d :解压缩的参数; -t :可以用来检验一个压缩档的一致性~看看文件有无错误; -v :可以显示出原文件/压缩文件的压缩比等资讯; -# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6
[root@www tmp]# gzip -v man.config
man.config: 56.1% -- replaced with man.config.gz
范例三:将范例一的文件解压缩 [root@www tmp]# gzip -d man.config.gz# 不要使用 gunzip 这个命令,不好背!使用 gzip -d 来进行解压缩! # 与 gzip 相反, gzip -d 会将原本的 .gz 删除,产生原本的 man.config 文件。范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件 [root@www tmp]# gzip -9 -c man.config > man.config.gz
若说 gzip 是为了取代 compress 并提供更好的压缩比而成立的,那么 bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的。 bzip2 真是很不错用的东西~这玩意的压缩比竟然比 gzip 还要好~至於 bzip2 的用法几乎与 gzip 相同! 看看底下的用法吧!
[root@www ~]# bzip2 [-cdkzv#] 档名 [root@www ~]# bzcat 档名.bz2选项与参数: -c :将压缩的过程产生的数据输出到萤幕上! -d :解压缩的参数 -k :保留原始文件,而不会删除原始的文件喔! -z :压缩的参数 -v :可以显示出原文件/压缩文件的压缩比等资讯; -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!范例一:将刚刚的 /tmp/man.config 以 bzip2 压缩 [root@www tmp]# bzip2 -z man.config # 此时 man.config 会变成 man.config.bz2 !范例二:将范例一的文件内容读出来! [root@www tmp]# bzcat man.config.bz2# 此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容!!范例三:将范例一的文件解压缩 [root@www tmp]# bzip2 -d man.config.bz2范例四:将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件 [root@www tmp]# bzip2 -9 -c man.config > man.config.bz2 |
tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗!
[root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filename...<==打包与压缩 [root@www ~]# tar [-j|-z] [tv] [-f 创建的档名] <==察看档名 [root@www ~]# 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 欲解压缩的目录
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
- 将备份的数据解压缩,并考虑特定目录的解压缩动作 (-C 选项的应用)
那如果想要解打包呢?很简单的动作就是直接进行解打包嘛!
[root@www ~]# tar -jxv -f /root/etc.tar.bz2 [root@www ~]# ll....(前面省略).... drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc ....(后面省略).... |
此时该打包文件会在『本目录下进行解压缩』的动作! 所以,你等一下就会在家目录底下发现一个名为 etc 的目录罗!所以罗,如果你想要将该文件在 /tmp 底下解开, 可以 cd /tmp 后,再下达上述的命令即可。不过,这样好像很麻烦呢~有没有更简单的方法可以『指定欲解开的目录』呢? 有的,可以使用 -C 这个选项喔!举例来说:
[root@www ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp [root@www ~]# ll /tmp....(前面省略).... drwxr-xr-x 105 root root 12288 Nov 11 04:02 etc ....(后面省略).... |
其实 dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级喔!什么意思啊! 假设你的 /home 是独立的一个文件系统,那你第一次进行过 dump 后,再进行第二次 dump 时, 你可以指定不同的备份等级,假如指定等级为 1 时,此时新备份的数据只会记录与第一次备份所有差异的文件而已。
[root@www ~]# dump [-Suvj] [-level] [-f 备份档] 待备份数据 [root@www ~]# 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 是否有备份过? |
备份档就是在急用时可以回复系统的重要数据,所以有备份当然就得要学学如何复原了! dump 的复原使用的是 restore 这个命令!这个命令的选项也非常的多~您可以自行 man restore 瞧瞧! 鸟哥在这里仅作个简单的介绍罗!
[root@www ~]# restore -t [-f dumpfile] [-h] <==用来察看 dump 档 [root@www ~]# restore -C [-f dumpfile] [-D 挂载点]<==比较dump与实际文件 [root@www ~]# restore -i [-f dumpfile] <==进入互动模式 [root@www ~]# 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 内有不同的文件! |
虽然 Linux 图形介面已经有不少的烧录软件可用, 但有时如果你希望系统自动在某些时刻帮你主动的进行烧录时,那么文字介面的烧录行为就有帮助啦!
那么文字模式的烧录行为要怎么处理呢?通常的作法是这样的:
- 先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
- 将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。
[root@www ~]# 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有转嫁或移植的意思,相关数据在底下文章内说明。
[root@www ~]# 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 当中 [root@www ~]# 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 [root@www ~]# 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 这个命令啦~范例二:将自己的磁碟之第一个磁区备份下来 [root@www ~]# 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 进行备份哩!范例三:找出你系统最小的那个分割槽,并且将他备份下来: [root@www ~]# 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 <==就捉他好了! [root@www ~]# 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 [root@www ~]# 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 才能成功啊!让我们来完成底下的例题试看看:
# 1. 先进行分割的动作 [root@www ~]# fdisk -l /dev/hdc Device Boot Start End Blocks Id System /dev/hdc1 * 1 13 104391 83 Linux # 上面鸟哥仅撷取重要的数据而已!我们可以看到 /dev/hdc1 仅有 13 个磁柱 [root@www ~]# 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 罗! [root@www ~]# partprobe# 2. 不需要格式化,直接进行 sector 表面的复制! [root@www ~]# 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 [root@www ~]# mount /dev/hdc9 /mnt [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hdc1 101086 21408 74459 23% /boot /dev/hdc9 101086 21408 74459 23% /mnt # 这两个玩意儿会『一模一样』喔! [root@www ~]# umount /mnt |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。