鸟哥的私房菜---学习手记五
时间:2007-02-24 来源:jxhuafs
甚是郁闷,家里的机子垮了,弄得好久没写博客了,
现在每天只能在网吧看看东西。
今天看了几个知识点:
连接的使用(硬连接,软连接),如何实现压缩和LINUX的压缩技术
什么是连结档呢?
其实连结档有点类似 Windows 底下的『快捷方式』!也就是很多的连结档案( link
file )其实都指向同一个来源档案( source file )!不过,在所有的档案类型当中,连结档算是比较难理解
的一部份了!因为连结档还分成 Hard link 与 symbolic link 两种,这两种连结档在架构上是完全不一样的咚咚,底下就来好好的谈一谈先!
Hard Link:
在前一节当中,我们提到档案的读取方式为:(1)先由一层一层的目录取得档案相关的关连数据,
(2)再到对应的 inode 取得档案的属性,以及档案内容数据所在的 Block ,(3)最后到 Block area
取得档案的资料。那么 hard link 怎么制作档案的连结呢?!很简单, Hard Link 只是在某个目
录下新增一个该档案的关连数据而已! 举个例子来说,我的 /home/vbird/crontab 为一个 hard link 的档案,他连结到 /etc/crontab 这个档
案,也就是说,其实 /home/vbird/crontab 与 /etc/crontab 是同一个档案,只是有两个目录( /etc 与
/home/vbird )记录了 crontab 这个档案的关连数据罢了!也就是说,我由 /etc 的 Block 所记录的
关连数据可知道 crontab 的 inode 放置在 A 处,而由 /home/vbird 这个目录下的关连数据,
contab 同样也指到 A 处的 inode !所以啰, crontab 这个档案的 inode 与 block 都没有改变,
有的只是有两个目录记录了关连数据。
一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变!由上面的
说明来看,我们可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据,所以当
然不会用掉 inode 与磁盘空间啰!(注:其实可能会改变的,那就是当目录的 Block 被用完时,
就可能会新加一个 block 来记录,而导致磁盘空间的变化!不过,一般 hard link 所用掉的关连
数据量很小,所以通常不会改变 inode 与磁盘空间的大小喔! )
由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:
1. 不能跨 Filesystem;
2. 不能 link 目录。
Symbolic Link:
相对于 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的档案,
而这个档案会让数据的读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的
动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』,会一直说『无法开
启某档案!』。这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给
他划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode
与 block 喔!
由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了,也没有关
系,只要有任何一个目录下存在着关连数据,那么该档案就不会不见!举上面的例子来说,我的
/etc/crontab 与 /home/vbird/crontab 指向同一个档案,如果我删除了 /etc/crontab 这个档案,该删除的动
作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没
有被变动喔!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做『目录』的 link ,所以在
用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了,说的天花乱坠,看您也差不
多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!
• ln
特别留意,底下的案例中,我们是将系统的设定文件 copy 到 /root/test 底下进行测试用的,请
不要在 /etc/ 底下做,未来我们的工作目录都会在 /root/test 底下进行,这有个好处,是可以让您
清楚的知道,这是用来 test 用的啦!
语法:
[root @test /root ]# ln [-s] [来源档] [目的档]
参数说明:
-s :提供 symbolic line 的连结!
如果直接以 ln 不加任何参数的话,那么就属于 hard link 啰!
范例:
[root @test /root]# mkdir test
[root @test /root]# cd test
[root @test test]# cp /usr/bin/passwd .
0. 原本的信息:
[root @test /test]# ll
-rw-r--r-- 1 root root 13476 Jun 26 11:31 passwd
[root @test /test]# du -k <==查看该目录下的占用硬盘空间
20
1. Hard Link 信息:
[root @test /test]# ln passwd passwd-hard
[root @test /test]# ll
total 32
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard
注意看,上面那 个数字变成 2 啰!这里说的是关连资料有两处!
[root @test /test]# du -k
20 <==注意看,容量并没有变大!因为是 link 档案呀!
2. Symbolic Link 信息:
[root @test /test]# ln -s passwd passwd-soft; ll
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard
lrwxrwxrwx 1 root root 6 Jun 26 11:37 passwd-sofe -> passwd
注意啰!该 Symbolic Link 的档案是有容量的呦!
注意啰, passwd-soft 会指到另外一个档案去,而且,最前面属性显示 l ,
此外,他是一个 独立的档案!先杀掉 passwd 后,我们分别 more 一下内容:
3. 用 more 来试试看是怎样?!
[root @test test]# rm passwd
rm: remove regular file `passwd'? y
[root @test test]# more passwd-hard
………(正常显 示)
[root @test test]# more passwd-soft
passwd-soft: No such file or directory
说明:
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同上面的情况,增
加了 hard link 之后,可以发现 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会发
生什么事情呢?呵呵! passwd-hard 的内容还是会跟原来 passwd 相同,但是 passwd-soft 就
会找不到该档案啦!就是这样!了解了吗?!还有,跟 cp 也不一样呦!因为虽然 Hard
Link 的档案看起来是有容量的,但是基本上还是指向原来的档案,所以啰,整体容量是没有
增大的啦!
而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思
( Symbolic Link,较常用! )不过,需要特别注意的是, Linux 的 link 与 Windows 的快捷
方式是不一样的东西!举个例子说,当你在 Windows 建立一个快捷方式时,你可以在这个
快捷方式内修改任何数据,而你的原始数据并不会跟着变!不过,当你修改 Linux 下的
link 档案时,则更动的其实是『原始档』,呵呵,所以不论你的这个原始档被连结到哪里去,
只要你修改了连结档,呵呵!原始档就跟着变啰!以上面为例,由于你使用 -s 的参数建立
一个名为 passwd-soft 的档案,则你修改 passwd-soft 时,其内容与 passwd 完全相同,并且,
当你按下储存之后,被改变的将是 passwd 这个档案!
此外,如果你做了底下这样的连结:
ln –s /bin /root/bin
那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你
做了连结档了!』所以,如果你进入 /root/bin 这个刚刚建立的连结目录,并且将其中的数
据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!并不是 /root 底下的资料
都是 root 的!还需要注意一下该属性才行!
基本上, Symbolic link 的用途比较广,所以您要特别留意 symbolic link 的用法呢!未来一
定还会常常用到的啦! 压缩的用途与技术:
您是否有过文件档案太大,导致无法以一片软盘将他复制完成的困扰?又,您是
否有过,发现一个软件里面有好多档案,这些档案要将他 复制与携带都很不方
便的问题?还有,您是否有过要备份某些重要数据,偏偏这些数据量太大了,耗
掉了你很多的硬盘与磁盘空间呢?这个时候,那个好用的『档案压缩』技术可就
派的上用场了!因为这些比较大型的档案透过所谓的档案压缩技术之后,可以将
他的磁盘使用量降低,可以达到减低档案容量的效果,此外,有的压缩程序还可
以进行容量限制,使一个大型档案可以分割成为数个小型档案,以方便软盘片携
带呢!
那么什么是『档案压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的
计算机系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,计算机最小
的计量单位应该是 bits 才对啊,此外,我们也知道 1 byte = 8 bits 。但是如果今
天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个
byte 可以看成底下的模样:(注:由于 1 byte = 8 bits ,所以每个 byte 当中会有 8
个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍,读者不必刻意
记忆 )
□□□□□□□□
而由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最
右边占据 1 个 bit ,而其它的 7 个 bits 将会自动的被填上 0 啰!你看看,其实
在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我
们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!而一
些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间
『丢』出来,以让档案占用的空间变小!这就是压缩的技术啦! 简单的说,你
可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,而
『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下 降!不
过,这些『压缩过的档案』并无法直接被我们的操作系统所使用的,因此,若要
使用这些被压缩过的档案数据,则必须将他『还原』回来未压缩前的模样,那
就是所谓的『解压缩』啰!而至于压缩前与压缩后的档案所占用的磁盘空间大小,
就可以被称为是『压缩比』啰!更多的技术文件或许你可以参考一下 GN U 计 划
当 中关于压缩指令 g z ip 的 说明文件。当然,我 这里 也保留一份数据,做为未
来参考之用呢!
这个『压缩』与『解压缩』的动作有什么好处呢?最大的好处就是压缩过的档案
容量变小了,所以你的硬盘容量无形之中就可以容纳更多的数据,此外,在 一
些网络数据的传输中,也会由于数据量的降低,好让网络频宽可以用来作更多的
工作!而不是老是卡在一些大型的档案上面呢!目前很多的 WWW 网站也是利
用档案压缩的技术来进行数据的传送,好让网站的可利用率上升喔!( 注:这种
技术蛮有趣的!他让您网站上面『看的到的数据』在经过网络传输时,使用的是
『压缩过的数据』,等到这些压缩过的数据到达你的计算机主机时,再进行解压
缩,由于目前的计算机运算速度相当的快速,因此其实在网页浏览的时候,时间
都是花在『数据的传输』上面,而不是 CPU 的运算啦!,如此一来,由于压缩
过的数据量降低了,自然传送的速度就会增快不少! ) Linux 压缩档案的附档名
如果您常常在网络上面捉 Linux 的数据下来玩的话,大概会晓得的是,这些供人
下载的档案通常都是『压缩』过的!为了什么?上面已经稍微提过啦!呵呵!压
缩过的档案具有节省频宽、节省磁盘空间等等的优点,并且还方便携带呢! ^_^ !
而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『 *.tar,
*.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』 等等的,为什么要订定这些压缩档案
附档名为这样的模样呢?这是因为在 Linux 上面压缩的指令相当的多,并且,这
些压缩指令可能无法针对每种压缩档案都可以解的开,毕竟目前的压缩技术五花
八门,每种压缩计算的方法都不是完全相同的, 所以啰,当你捉到某个压缩档
时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊! ^_^!也
就是说,虽然 Linux 档案的属性基本上是与文件名没有绝对关系的,能不能执行
与他的档案属性有关而已,与文件名的关系很小!但是,为了帮助我们小小的人
类脑袋瓜子,所以适当的 文件名称附档名还是必要的!因此,目前就有一些常
常见到的压缩档案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考
之用:
• *.Z compress 程序压缩的档案;
• *.bz2 bzip2 程序压缩的档案;
• *.gz gzip 程序压缩的档案;
• *.tar tar 程序打包的数据,并没有压缩过;
• *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩! 目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!最早期
的要算是 compress 这个家伙了,而后,后来的 GN U 计 划开发出新一代的压缩
指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有 bzip2
这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与
解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?,此时,那
个所谓的『打包软件』就显的很重要啦!在 Unix-Like 当中,有个软件很好玩,
他就是 tar 这支程序!这个 tar 可以将很多档案『打包』成为一个档案!甚至是
目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多档
案集结成为一个档案,事实上,他并没有提供压缩的功能,后来, G NU 计 划中,
将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的
压缩与打包功能!
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!
• compress:
语法:
[root @test /root ]# compress [-d] filename
参数说明:
-d :解压缩的参数!
范例:
先 copy /etc/man.config 到 root 底下,再将他压缩看看
[root @test /root]# cp /etc/man.config /root
[root @test /root]# compress man.config
[root @test /root]# compress -d man.config.Z
[root @test /root]# uncompress man.config.Z
这是用来压缩与解压缩附档名为 *.Z 的指令!所以看到 *.Z 的档案时,就
应该要知道他是经由 compress 这个程序压缩的呦!这是最简单的压缩指
令啰!不过,使用的时候需要特别留意的是,当你以 compress 压缩之后,
如果没有下达其它的参数,那么原本的档案就会被后来的 *.Z 所取代!以
上面的案例来说明:原本压缩的档案为 man.config ,那么当压缩完成之后,
将只会剩下 man.config.Z 这个经过压缩的档案啰!那么解压缩呢?呵呵,
则是将 man.config.Z 解压缩成 man.config !使用上很简单啦!解压缩除了
可以使用 compress –d 这个参数之外,也可以直接使用 uncompress !意思
相同啦!
• gzip, zcat:
语法:
[root @test /root ]# gzip [-d#] filename <==压缩与解压缩
[root @test /root ]# zcat filename.gz <==读取压缩档内容
参数说明:
-d :解压缩的参数!
-# :压缩等级, 1 最不好, 9 最好, 6 是默认值!
范例:
[root @test /root]# gzip man.config
会产生 man.config.gz 这个档案
[root @test /root]# zcat man.config.gz
会读取出 man.config 的内容
[root @test /root]# gzip -d man.config.gz
[root @test /root]# gunzip man.config.gz
解压缩,产生 man.config 这个档案
[root @test /root]# gzip -9 man.config
以最大压缩比压缩 testing 这个档案!
gzip 是用来压缩与解压缩附档名为 *.gz 的指令!所以看到 *.gz 的档案时,
就应该要知道他是经由 gzip 这个程序压缩的呦!另外, gzip 也提供 压缩
比的服务! -1 是最差的压缩比,但是压缩速度最快,而 -9 虽然可以达
到较佳的压缩比(经过压缩之后,档案比较小一些!),但是却会损失一
些速度!预设是 -6 这个数值! gzip 也是相当常使用的一个压缩指令呢!
至于 zcat 则是用来读取压缩文件数据内容的指令!假如我们刚刚压缩的档
案是一个文字文件,那么你还记得如何读取文字文件吗?!没错!就是使
用 cat ,那么读取压缩档呢?呵呵!就是使用 zcat 啰!由于 gzip 这个压
缩指令主要想要用来取代 compress 的,所以 compress 的压缩档案也可以
使用 gzip 来解开喔!同时, zcat 这个指令可以同时读取 compress 与
gzip 的压缩档呦!
• bzip2, bzcat:
语法:
[root @test root]# bzip2 [-dz] filename <==压缩解压缩指令
[root @test root]# bzcat filename.bz2 <==读取压缩文件内容指令
参数说明:
-d :解压缩的意思!
-z :压缩的意思!
范例:
同样的,我们以刚刚拷贝过来的 /root/man.config 这个档案为例
[root @test root]# bzip2 –z man.config
[root @test root]# bzcat man.config.bz2
[root @test root]# bzip2 –d man.config.bz2
[root @test root]# bunzip2 man.config.bz2
刚刚的 compress 附档名自动建立为 .Z ,这里的 bzip2 则是自动的将附档
名建置为 .bz2 啰!所以当我们使用具有压缩功能的 bzip2 –z 时,那么刚
刚的 man.config 就会自动的变成了 man.config.bz2 这个档名啰!好了,那
么如果我想要读取这个档案的内容呢?是否一定要解开?当然不需要啰!
可以使用简便的 bzcat 这个指令来读取内容即可!例如上面的例子中,我
们可以使用 bzcat man.config.bz2 来读取数据而不需要解开!此外,当您要
解开一个压缩档时,这个档案的名称为 .bz, .bz2, .tbz, .tbz2 等等,那么就
可以尝试使用 bzip2 来解看看啦!当然啰,也可以使用 bunzip2 这个指令
来取代 bzip2 –d 啰
• tar:
语法:
[root @test /root ]# tar [-zxcvfpP] filename
[root @test /root ]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source
参数说明:
-z :是否同时具有 gzip 的属性?
-x :解开一个压缩档案的参数指令!
-t :查看 tarfile 里面的档案!
-c :建立一个压缩档案的参数指令
-v :压缩的过程中显示档案!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原档案的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
[root @test /root]# tar -cvf directory.tar directory
只将目录整合打包成一个档案
[root @test /root]# tar -zcvf directory.tar.gz directory
除了将目录打包外,同时以 gzip 压缩
[root @test /root]# tar -zcvf filename.tar.gz /home/test/*
将 /home/test/ 这个目录下的档案全部打包并压缩成为一个 filename.tar.gz 的档案
[root @test /root]# tar -xvf directory.tar
解 tar 的封包,请注意,由于没有 gzip (.tar 而非 .tar.gz) 的作用,所以只要使用 –xvf 即可!
不需要加上 z ,否则会显示有问题!
[root @test /root]# tar -zxvf directory.tar.gz
这个就是有加上 gzip 的压缩的结果!所以需要加上 –z 呦!
[root @test /root]# tar –ztvf directory.tar.gz
这个 t 可以用来查看 tar 里面的档案信息呢!而不需要将他解开!
[root @test /root]# tar -zcvPf home.tar.gz /home
则建立起来的压缩档内档案为绝对路径
请注意,使用这个 P 的参数时,不要将 P 加在 f 后面,因为
f 之后要立即接档名才行喔!
[root @test /root]# tar -N '2002/06/25' -zcvf home.tar.gz /home
上面是说 在 /home 这个目录中,比 2002/06/25 日还要新的档案才会被打包进入 home.tar.gz 这个
档案中!
[root @test /root]# tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
上面是说,将根目录的所有数据都打包进 host.tar.gz 这个档案中,但是 /mnt 及 /proc 则不打包!
[root @test /root]# tar -cvf - /home | tar -xvf -
上面的意思是『将 /home 打包之后,直接解压缩在 /root 底下!』嘿嘿!不需要再建立一次中间档
案!不过,使用上面的语法最好使用『绝对路径』,比较不会有问题!这个方式适合不想要建立中间
档案时!
• 这是一个多用途的压缩指令!刚刚我们提到的 compress 与 gzip 是
可以适用在一个档案的压缩上面,但是如果是要压缩一个目录呢?!
这时该如何是好?!呵呵! tar 就派上用场了! tar 可以将整个目
录或者是规定的档案都整合成一个档案!例如上面的第三个范例,
他可以将 /home/test 底下的档案全部整合成一个档案!而第一个范
例中,则是将目录整合成一个档案!同时, tar 可以配合 gzip (这
个 gzip 的功能已经已经附加上 tar 里面去了),同时整合并压缩!
呵呵!很方便吧!『 tar 用来作备份是很重要的指令! 』而由于
tar 整合过后的档案我们通常会取名为 *.tar ,而如果还含有 gzip 的
压缩属性,那么就取名为 *.tar.gz 啰!取这个文件名只是为了方便
我们记忆这个档案是什么属性罢了!并没有实际的意义在!
• 另外,需要注意的是,在使用的参数方面,有还有几个有用的参数
需要来了解一番,亦即是 -p 与 -P 这两个!如果你曾经在 crontab
里面下达过一些备份的指令时,那么常常会收到 root 的信件,就是
说,系统会告诉你『我将 / 的 tar 里头的内容拿掉了!』也就是说,
原本你备份的档案是 /home/test ,但是由于担心未来你在解开压缩
的时候,会产生一些困扰,因为在 tar 里面的档案如果是具有『绝
对路径』的话,那么你解开的档案将会『一定』在该路径下也就是
/home/test,而不是绝对路径(这里请用心的想一想!),这样子的
最大困扰是,万一有人拿走了你的这个档案,并且将该档案在他的
系统上面解开!万一他的系统上面正巧也有 /home/test 这个目录,
哈哈!他的档案就会『正巧』被覆盖了!所以啰,在预设的情况中,
如果是以『绝对路径』来建立打包档案,那么将会自动的将 / 拿掉!
这是为了刚刚说明的『安全』为前提所做的默认值。好了!但是你
就是要以绝对路径来建立打包的档案!那么就加入 -P 这个参数吧
(请注意!是大写字符)!这样就可以啦!那么 -p 是什么(小写
字符)?呵呵!那个 -p 是 permission 的意思,也就是『权限』啦!
使用 -p 之后,被打包的档案将不会依据使用者的身份来改变权限
喔!
• 这里还有一个值得注意的参数呦!那就是在备份的情况中很常使用
的 -N 的这个参数!你可以参考一下上面的例子就可以知道啦!在
这个例子当中,相当重要的就是那个日期啦!在备份的情况当中,
我们都希望只要备份较新的档案就好 了,为什么呢?因为旧的档案
我们已经有备份啰!干嘛还要再备份一次,浪费时间也浪费系统资
源!这个时候此一参数就显的相当的重要了啊!
• 在上面的例子中,最后一个例子很有趣『tar cvf - /home | tar
-xvf - 』!他是直接以管线命令『 pipe 』来进行压缩、解压缩的
过程!在上面的例子中,我们想要『将 /home 底下的数据直接
copy 到目前所在的路径,也就是 /root 底下来』,但是又觉得使用
cp -r 有点麻烦,那么就直接以这个打包的方式来打包,其中,指令
里面的 - 就是表示那个被打包的档案啦!由于我们不想要让中间档
案存在,所以就以这一个方式来进行复制的行为啦!
• tar 的功能相当的多,而由于他是经由『打包』之后再处理的一个过
程,所以常常我们会听到 tarball 的档案,那就是经由 tar 打包再压
缩的档案啦!此外, tar 也可以用在备份的储存媒体上面,最常见
的就是磁带机了!假设我的磁带机代号为 /dev/st0 ,那么我要将我
的 /home 底下的数据都给他备份上去时,就是使用 tar /dev/st0
/home 就可以啦!很不错吧!
在 Linux 当中, gzip 已经被整合在 tar 里面了!但是 Sun 或者其
它较旧的 Unix 版本中, 当中的 tar 并没有整合 gzip ,所以如果你
需要解压缩的话,就需要这么做:
gzip -d testing.tar.gz
tar -xvf testing.tar
第一个步骤会将档案解压缩,第二个步骤才是将数据解出来! 与其它压缩程序不太一样的是, bzip2, gzip 与 compress 在没有加入特
殊参数的时候,原先的档案会被取代掉,但是使用 tar 则原来的与
后来的档案都会存在呦!
file )其实都指向同一个来源档案( source file )!不过,在所有的档案类型当中,连结档算是比较难理解
的一部份了!因为连结档还分成 Hard link 与 symbolic link 两种,这两种连结档在架构上是完全不一样的咚咚,底下就来好好的谈一谈先!
Hard Link:
在前一节当中,我们提到档案的读取方式为:(1)先由一层一层的目录取得档案相关的关连数据,
(2)再到对应的 inode 取得档案的属性,以及档案内容数据所在的 Block ,(3)最后到 Block area
取得档案的资料。那么 hard link 怎么制作档案的连结呢?!很简单, Hard Link 只是在某个目
录下新增一个该档案的关连数据而已! 举个例子来说,我的 /home/vbird/crontab 为一个 hard link 的档案,他连结到 /etc/crontab 这个档
案,也就是说,其实 /home/vbird/crontab 与 /etc/crontab 是同一个档案,只是有两个目录( /etc 与
/home/vbird )记录了 crontab 这个档案的关连数据罢了!也就是说,我由 /etc 的 Block 所记录的
关连数据可知道 crontab 的 inode 放置在 A 处,而由 /home/vbird 这个目录下的关连数据,
contab 同样也指到 A 处的 inode !所以啰, crontab 这个档案的 inode 与 block 都没有改变,
有的只是有两个目录记录了关连数据。
一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变!由上面的
说明来看,我们可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据,所以当
然不会用掉 inode 与磁盘空间啰!(注:其实可能会改变的,那就是当目录的 Block 被用完时,
就可能会新加一个 block 来记录,而导致磁盘空间的变化!不过,一般 hard link 所用掉的关连
数据量很小,所以通常不会改变 inode 与磁盘空间的大小喔! )
由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:
1. 不能跨 Filesystem;
2. 不能 link 目录。
Symbolic Link:
相对于 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的档案,
而这个档案会让数据的读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的
动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』,会一直说『无法开
启某档案!』。这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给
他划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode
与 block 喔!
由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了,也没有关
系,只要有任何一个目录下存在着关连数据,那么该档案就不会不见!举上面的例子来说,我的
/etc/crontab 与 /home/vbird/crontab 指向同一个档案,如果我删除了 /etc/crontab 这个档案,该删除的动
作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没
有被变动喔!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做『目录』的 link ,所以在
用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了,说的天花乱坠,看您也差不
多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!
• ln
特别留意,底下的案例中,我们是将系统的设定文件 copy 到 /root/test 底下进行测试用的,请
不要在 /etc/ 底下做,未来我们的工作目录都会在 /root/test 底下进行,这有个好处,是可以让您
清楚的知道,这是用来 test 用的啦!
语法:
[root @test /root ]# ln [-s] [来源档] [目的档]
参数说明:
-s :提供 symbolic line 的连结!
如果直接以 ln 不加任何参数的话,那么就属于 hard link 啰!
范例:
[root @test /root]# mkdir test
[root @test /root]# cd test
[root @test test]# cp /usr/bin/passwd .
0. 原本的信息:
[root @test /test]# ll
-rw-r--r-- 1 root root 13476 Jun 26 11:31 passwd
[root @test /test]# du -k <==查看该目录下的占用硬盘空间
20
1. Hard Link 信息:
[root @test /test]# ln passwd passwd-hard
[root @test /test]# ll
total 32
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard
注意看,上面那 个数字变成 2 啰!这里说的是关连资料有两处!
[root @test /test]# du -k
20 <==注意看,容量并没有变大!因为是 link 档案呀!
2. Symbolic Link 信息:
[root @test /test]# ln -s passwd passwd-soft; ll
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard
lrwxrwxrwx 1 root root 6 Jun 26 11:37 passwd-sofe -> passwd
注意啰!该 Symbolic Link 的档案是有容量的呦!
注意啰, passwd-soft 会指到另外一个档案去,而且,最前面属性显示 l ,
此外,他是一个 独立的档案!先杀掉 passwd 后,我们分别 more 一下内容:
3. 用 more 来试试看是怎样?!
[root @test test]# rm passwd
rm: remove regular file `passwd'? y
[root @test test]# more passwd-hard
………(正常显 示)
[root @test test]# more passwd-soft
passwd-soft: No such file or directory
说明:
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同上面的情况,增
加了 hard link 之后,可以发现 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会发
生什么事情呢?呵呵! passwd-hard 的内容还是会跟原来 passwd 相同,但是 passwd-soft 就
会找不到该档案啦!就是这样!了解了吗?!还有,跟 cp 也不一样呦!因为虽然 Hard
Link 的档案看起来是有容量的,但是基本上还是指向原来的档案,所以啰,整体容量是没有
增大的啦!
而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思
( Symbolic Link,较常用! )不过,需要特别注意的是, Linux 的 link 与 Windows 的快捷
方式是不一样的东西!举个例子说,当你在 Windows 建立一个快捷方式时,你可以在这个
快捷方式内修改任何数据,而你的原始数据并不会跟着变!不过,当你修改 Linux 下的
link 档案时,则更动的其实是『原始档』,呵呵,所以不论你的这个原始档被连结到哪里去,
只要你修改了连结档,呵呵!原始档就跟着变啰!以上面为例,由于你使用 -s 的参数建立
一个名为 passwd-soft 的档案,则你修改 passwd-soft 时,其内容与 passwd 完全相同,并且,
当你按下储存之后,被改变的将是 passwd 这个档案!
此外,如果你做了底下这样的连结:
ln –s /bin /root/bin
那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你
做了连结档了!』所以,如果你进入 /root/bin 这个刚刚建立的连结目录,并且将其中的数
据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!并不是 /root 底下的资料
都是 root 的!还需要注意一下该属性才行!
基本上, Symbolic link 的用途比较广,所以您要特别留意 symbolic link 的用法呢!未来一
定还会常常用到的啦! 压缩的用途与技术:
您是否有过文件档案太大,导致无法以一片软盘将他复制完成的困扰?又,您是
否有过,发现一个软件里面有好多档案,这些档案要将他 复制与携带都很不方
便的问题?还有,您是否有过要备份某些重要数据,偏偏这些数据量太大了,耗
掉了你很多的硬盘与磁盘空间呢?这个时候,那个好用的『档案压缩』技术可就
派的上用场了!因为这些比较大型的档案透过所谓的档案压缩技术之后,可以将
他的磁盘使用量降低,可以达到减低档案容量的效果,此外,有的压缩程序还可
以进行容量限制,使一个大型档案可以分割成为数个小型档案,以方便软盘片携
带呢!
那么什么是『档案压缩』呢?我们来稍微谈一谈他的原理好了。目前我们使用的
计算机系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,计算机最小
的计量单位应该是 bits 才对啊,此外,我们也知道 1 byte = 8 bits 。但是如果今
天我们只是记忆一个数字,亦即是 1 这个数字呢?他会如何记录?假设一个
byte 可以看成底下的模样:(注:由于 1 byte = 8 bits ,所以每个 byte 当中会有 8
个空格,而每个空格可以是 0, 1 ,这里仅是做为一个约略的介绍,读者不必刻意
记忆 )
□□□□□□□□
而由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最
右边占据 1 个 bit ,而其它的 7 个 bits 将会自动的被填上 0 啰!你看看,其实
在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我
们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!而一
些聪明的计算机工程师就利用一些复杂的计算方式,将这些没有使用到的空间
『丢』出来,以让档案占用的空间变小!这就是压缩的技术啦! 简单的说,你
可以将他想成,其实档案里面有相当多的『空间』存在,并不是完全填满的,而
『压缩』的技术就是将这些『空间』填满,以让整个档案占用的容量下 降!不
过,这些『压缩过的档案』并无法直接被我们的操作系统所使用的,因此,若要
使用这些被压缩过的档案数据,则必须将他『还原』回来未压缩前的模样,那
就是所谓的『解压缩』啰!而至于压缩前与压缩后的档案所占用的磁盘空间大小,
就可以被称为是『压缩比』啰!更多的技术文件或许你可以参考一下 GN U 计 划
当 中关于压缩指令 g z ip 的 说明文件。当然,我 这里 也保留一份数据,做为未
来参考之用呢!
这个『压缩』与『解压缩』的动作有什么好处呢?最大的好处就是压缩过的档案
容量变小了,所以你的硬盘容量无形之中就可以容纳更多的数据,此外,在 一
些网络数据的传输中,也会由于数据量的降低,好让网络频宽可以用来作更多的
工作!而不是老是卡在一些大型的档案上面呢!目前很多的 WWW 网站也是利
用档案压缩的技术来进行数据的传送,好让网站的可利用率上升喔!( 注:这种
技术蛮有趣的!他让您网站上面『看的到的数据』在经过网络传输时,使用的是
『压缩过的数据』,等到这些压缩过的数据到达你的计算机主机时,再进行解压
缩,由于目前的计算机运算速度相当的快速,因此其实在网页浏览的时候,时间
都是花在『数据的传输』上面,而不是 CPU 的运算啦!,如此一来,由于压缩
过的数据量降低了,自然传送的速度就会增快不少! ) Linux 压缩档案的附档名
如果您常常在网络上面捉 Linux 的数据下来玩的话,大概会晓得的是,这些供人
下载的档案通常都是『压缩』过的!为了什么?上面已经稍微提过啦!呵呵!压
缩过的档案具有节省频宽、节省磁盘空间等等的优点,并且还方便携带呢! ^_^ !
而,您应该也会知道,这些被压缩过的档案,通常其附档名都是『 *.tar,
*.tar.gz, *.tgz, *.gz, *.Z, *.bz2 』 等等的,为什么要订定这些压缩档案
附档名为这样的模样呢?这是因为在 Linux 上面压缩的指令相当的多,并且,这
些压缩指令可能无法针对每种压缩档案都可以解的开,毕竟目前的压缩技术五花
八门,每种压缩计算的方法都不是完全相同的, 所以啰,当你捉到某个压缩档
时,自然就需要知道压缩他的是那个指令啦,好用来对照着解压缩啊! ^_^!也
就是说,虽然 Linux 档案的属性基本上是与文件名没有绝对关系的,能不能执行
与他的档案属性有关而已,与文件名的关系很小!但是,为了帮助我们小小的人
类脑袋瓜子,所以适当的 文件名称附档名还是必要的!因此,目前就有一些常
常见到的压缩档案的附档名啦!我们仅列出常见的几样在底下,给大家权做参考
之用:
• *.Z compress 程序压缩的档案;
• *.bz2 bzip2 程序压缩的档案;
• *.gz gzip 程序压缩的档案;
• *.tar tar 程序打包的数据,并没有压缩过;
• *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩! 目前常见的压缩程序主要就是如同上面提到的附档名对应的那些指令啦!最早期
的要算是 compress 这个家伙了,而后,后来的 GN U 计 划开发出新一代的压缩
指令 gzip ( GNU zip ) 用来取代 compress 这个老牌的压缩指令,再来还有 bzip2
这个压缩比更好的压缩指令呢!不过,这些指令通常仅能针对一个档案来压缩与
解压缩,如此一来,每次压缩与解压缩都要一大堆档案,岂不烦人?,此时,那
个所谓的『打包软件』就显的很重要啦!在 Unix-Like 当中,有个软件很好玩,
他就是 tar 这支程序!这个 tar 可以将很多档案『打包』成为一个档案!甚至是
目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多档
案集结成为一个档案,事实上,他并没有提供压缩的功能,后来, G NU 计 划中,
将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的
压缩与打包功能!
底下我们就来谈一谈这些在 Linux 底下基本的压缩指令吧!
• compress:
语法:
[root @test /root ]# compress [-d] filename
参数说明:
-d :解压缩的参数!
范例:
先 copy /etc/man.config 到 root 底下,再将他压缩看看
[root @test /root]# cp /etc/man.config /root
[root @test /root]# compress man.config
[root @test /root]# compress -d man.config.Z
[root @test /root]# uncompress man.config.Z
这是用来压缩与解压缩附档名为 *.Z 的指令!所以看到 *.Z 的档案时,就
应该要知道他是经由 compress 这个程序压缩的呦!这是最简单的压缩指
令啰!不过,使用的时候需要特别留意的是,当你以 compress 压缩之后,
如果没有下达其它的参数,那么原本的档案就会被后来的 *.Z 所取代!以
上面的案例来说明:原本压缩的档案为 man.config ,那么当压缩完成之后,
将只会剩下 man.config.Z 这个经过压缩的档案啰!那么解压缩呢?呵呵,
则是将 man.config.Z 解压缩成 man.config !使用上很简单啦!解压缩除了
可以使用 compress –d 这个参数之外,也可以直接使用 uncompress !意思
相同啦!
• gzip, zcat:
语法:
[root @test /root ]# gzip [-d#] filename <==压缩与解压缩
[root @test /root ]# zcat filename.gz <==读取压缩档内容
参数说明:
-d :解压缩的参数!
-# :压缩等级, 1 最不好, 9 最好, 6 是默认值!
范例:
[root @test /root]# gzip man.config
会产生 man.config.gz 这个档案
[root @test /root]# zcat man.config.gz
会读取出 man.config 的内容
[root @test /root]# gzip -d man.config.gz
[root @test /root]# gunzip man.config.gz
解压缩,产生 man.config 这个档案
[root @test /root]# gzip -9 man.config
以最大压缩比压缩 testing 这个档案!
gzip 是用来压缩与解压缩附档名为 *.gz 的指令!所以看到 *.gz 的档案时,
就应该要知道他是经由 gzip 这个程序压缩的呦!另外, gzip 也提供 压缩
比的服务! -1 是最差的压缩比,但是压缩速度最快,而 -9 虽然可以达
到较佳的压缩比(经过压缩之后,档案比较小一些!),但是却会损失一
些速度!预设是 -6 这个数值! gzip 也是相当常使用的一个压缩指令呢!
至于 zcat 则是用来读取压缩文件数据内容的指令!假如我们刚刚压缩的档
案是一个文字文件,那么你还记得如何读取文字文件吗?!没错!就是使
用 cat ,那么读取压缩档呢?呵呵!就是使用 zcat 啰!由于 gzip 这个压
缩指令主要想要用来取代 compress 的,所以 compress 的压缩档案也可以
使用 gzip 来解开喔!同时, zcat 这个指令可以同时读取 compress 与
gzip 的压缩档呦!
• bzip2, bzcat:
语法:
[root @test root]# bzip2 [-dz] filename <==压缩解压缩指令
[root @test root]# bzcat filename.bz2 <==读取压缩文件内容指令
参数说明:
-d :解压缩的意思!
-z :压缩的意思!
范例:
同样的,我们以刚刚拷贝过来的 /root/man.config 这个档案为例
[root @test root]# bzip2 –z man.config
[root @test root]# bzcat man.config.bz2
[root @test root]# bzip2 –d man.config.bz2
[root @test root]# bunzip2 man.config.bz2
刚刚的 compress 附档名自动建立为 .Z ,这里的 bzip2 则是自动的将附档
名建置为 .bz2 啰!所以当我们使用具有压缩功能的 bzip2 –z 时,那么刚
刚的 man.config 就会自动的变成了 man.config.bz2 这个档名啰!好了,那
么如果我想要读取这个档案的内容呢?是否一定要解开?当然不需要啰!
可以使用简便的 bzcat 这个指令来读取内容即可!例如上面的例子中,我
们可以使用 bzcat man.config.bz2 来读取数据而不需要解开!此外,当您要
解开一个压缩档时,这个档案的名称为 .bz, .bz2, .tbz, .tbz2 等等,那么就
可以尝试使用 bzip2 来解看看啦!当然啰,也可以使用 bunzip2 这个指令
来取代 bzip2 –d 啰
• tar:
语法:
[root @test /root ]# tar [-zxcvfpP] filename
[root @test /root ]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source
参数说明:
-z :是否同时具有 gzip 的属性?
-x :解开一个压缩档案的参数指令!
-t :查看 tarfile 里面的档案!
-c :建立一个压缩档案的参数指令
-v :压缩的过程中显示档案!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原档案的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
[root @test /root]# tar -cvf directory.tar directory
只将目录整合打包成一个档案
[root @test /root]# tar -zcvf directory.tar.gz directory
除了将目录打包外,同时以 gzip 压缩
[root @test /root]# tar -zcvf filename.tar.gz /home/test/*
将 /home/test/ 这个目录下的档案全部打包并压缩成为一个 filename.tar.gz 的档案
[root @test /root]# tar -xvf directory.tar
解 tar 的封包,请注意,由于没有 gzip (.tar 而非 .tar.gz) 的作用,所以只要使用 –xvf 即可!
不需要加上 z ,否则会显示有问题!
[root @test /root]# tar -zxvf directory.tar.gz
这个就是有加上 gzip 的压缩的结果!所以需要加上 –z 呦!
[root @test /root]# tar –ztvf directory.tar.gz
这个 t 可以用来查看 tar 里面的档案信息呢!而不需要将他解开!
[root @test /root]# tar -zcvPf home.tar.gz /home
则建立起来的压缩档内档案为绝对路径
请注意,使用这个 P 的参数时,不要将 P 加在 f 后面,因为
f 之后要立即接档名才行喔!
[root @test /root]# tar -N '2002/06/25' -zcvf home.tar.gz /home
上面是说 在 /home 这个目录中,比 2002/06/25 日还要新的档案才会被打包进入 home.tar.gz 这个
档案中!
[root @test /root]# tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
上面是说,将根目录的所有数据都打包进 host.tar.gz 这个档案中,但是 /mnt 及 /proc 则不打包!
[root @test /root]# tar -cvf - /home | tar -xvf -
上面的意思是『将 /home 打包之后,直接解压缩在 /root 底下!』嘿嘿!不需要再建立一次中间档
案!不过,使用上面的语法最好使用『绝对路径』,比较不会有问题!这个方式适合不想要建立中间
档案时!
• 这是一个多用途的压缩指令!刚刚我们提到的 compress 与 gzip 是
可以适用在一个档案的压缩上面,但是如果是要压缩一个目录呢?!
这时该如何是好?!呵呵! tar 就派上用场了! tar 可以将整个目
录或者是规定的档案都整合成一个档案!例如上面的第三个范例,
他可以将 /home/test 底下的档案全部整合成一个档案!而第一个范
例中,则是将目录整合成一个档案!同时, tar 可以配合 gzip (这
个 gzip 的功能已经已经附加上 tar 里面去了),同时整合并压缩!
呵呵!很方便吧!『 tar 用来作备份是很重要的指令! 』而由于
tar 整合过后的档案我们通常会取名为 *.tar ,而如果还含有 gzip 的
压缩属性,那么就取名为 *.tar.gz 啰!取这个文件名只是为了方便
我们记忆这个档案是什么属性罢了!并没有实际的意义在!
• 另外,需要注意的是,在使用的参数方面,有还有几个有用的参数
需要来了解一番,亦即是 -p 与 -P 这两个!如果你曾经在 crontab
里面下达过一些备份的指令时,那么常常会收到 root 的信件,就是
说,系统会告诉你『我将 / 的 tar 里头的内容拿掉了!』也就是说,
原本你备份的档案是 /home/test ,但是由于担心未来你在解开压缩
的时候,会产生一些困扰,因为在 tar 里面的档案如果是具有『绝
对路径』的话,那么你解开的档案将会『一定』在该路径下也就是
/home/test,而不是绝对路径(这里请用心的想一想!),这样子的
最大困扰是,万一有人拿走了你的这个档案,并且将该档案在他的
系统上面解开!万一他的系统上面正巧也有 /home/test 这个目录,
哈哈!他的档案就会『正巧』被覆盖了!所以啰,在预设的情况中,
如果是以『绝对路径』来建立打包档案,那么将会自动的将 / 拿掉!
这是为了刚刚说明的『安全』为前提所做的默认值。好了!但是你
就是要以绝对路径来建立打包的档案!那么就加入 -P 这个参数吧
(请注意!是大写字符)!这样就可以啦!那么 -p 是什么(小写
字符)?呵呵!那个 -p 是 permission 的意思,也就是『权限』啦!
使用 -p 之后,被打包的档案将不会依据使用者的身份来改变权限
喔!
• 这里还有一个值得注意的参数呦!那就是在备份的情况中很常使用
的 -N 的这个参数!你可以参考一下上面的例子就可以知道啦!在
这个例子当中,相当重要的就是那个日期啦!在备份的情况当中,
我们都希望只要备份较新的档案就好 了,为什么呢?因为旧的档案
我们已经有备份啰!干嘛还要再备份一次,浪费时间也浪费系统资
源!这个时候此一参数就显的相当的重要了啊!
• 在上面的例子中,最后一个例子很有趣『tar cvf - /home | tar
-xvf - 』!他是直接以管线命令『 pipe 』来进行压缩、解压缩的
过程!在上面的例子中,我们想要『将 /home 底下的数据直接
copy 到目前所在的路径,也就是 /root 底下来』,但是又觉得使用
cp -r 有点麻烦,那么就直接以这个打包的方式来打包,其中,指令
里面的 - 就是表示那个被打包的档案啦!由于我们不想要让中间档
案存在,所以就以这一个方式来进行复制的行为啦!
• tar 的功能相当的多,而由于他是经由『打包』之后再处理的一个过
程,所以常常我们会听到 tarball 的档案,那就是经由 tar 打包再压
缩的档案啦!此外, tar 也可以用在备份的储存媒体上面,最常见
的就是磁带机了!假设我的磁带机代号为 /dev/st0 ,那么我要将我
的 /home 底下的数据都给他备份上去时,就是使用 tar /dev/st0
/home 就可以啦!很不错吧!
在 Linux 当中, gzip 已经被整合在 tar 里面了!但是 Sun 或者其
它较旧的 Unix 版本中, 当中的 tar 并没有整合 gzip ,所以如果你
需要解压缩的话,就需要这么做:
gzip -d testing.tar.gz
tar -xvf testing.tar
第一个步骤会将档案解压缩,第二个步骤才是将数据解出来! 与其它压缩程序不太一样的是, bzip2, gzip 与 compress 在没有加入特
殊参数的时候,原先的档案会被取代掉,但是使用 tar 则原来的与
后来的档案都会存在呦!
相关阅读 更多 +