改章节是一篇关于文件目录的帖子
弁言:你可能经已听说过在Linux中一切皆是文件,所以一定要打好础基,把文件和目录的管理如查找、列出、挪动、制复、包打等学踏实。本文针对LPI 101试考,当然读者也可以为了兴致来学习。
要摘:本文分析几本的文件和目录管理令命,详细有
- 举列目录中文件
- 制复、挪动或者除删文件和目录
- 迭代作操多个文件和目录
- 应用通配符
- 应用find令命,根据文件类型、巨细或者时光来查找定位文件
- 应用gzip和bizp2来压缩和解压文件
- 应用tar,cpio,dd来包打文件
举列目录中的文件
举列目录包括的项
[root@localhost lpi103-2]# pwd
/root/lpi103-2
[root@localhost lpi103-2]# ls
msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
[root@localhost lpi103-2]# ls $PWD
msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
[root@localhost lpi103-2]# ls /root/lpi103-2/
msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
可以看出,ls的参数可所以绝对路径,也可所以相对路径。
举列细详信息
[root@localhost lpi103-2]# ls -al
total 92
drwxr-xr-x 2 root root 4096 May 7 17:29 .
dr-xr-x---. 10 root root 4096 May 7 15:47 ..
-rw-r--r-- 1 root root 43851 May 7 15:38 msg
-rw-r--r-- 1 root root 8 May 7 17:14 sedtab
-rw-r--r-- 1 root root 24 May 7 14:29 text1
-rw-r--r-- 1 root root 25 May 7 14:48 text2
-rw-r--r-- 1 root root 63 May 7 16:07 text3
-rw-r--r-- 1 root root 24 May 7 16:41 text5
-rw-r--r-- 1 root root 98 May 7 17:29 text6
-rw-r--r-- 1 root root 15 May 7 15:15 xaa
-rw-r--r-- 1 root root 9 May 7 15:15 xab
-rw-r--r-- 1 root root 17 May 7 15:16 yaa
-rw-r--r-- 1 root root 8 May 7 15:16 yab
上图第一行示显了列出的全部文件所占用的block数量。接下来的行报告了个每文件的况情。
- 第一列报告了文件的类型以及权限。第一个字符示表文件的类型,其中d示表目录,-示表一般文件,-l示表符号链接,还有很多其他特别的文件类型。接下来的9个字符被分红三组,每组三个字符。三个分组别分示表文件属主、同组用户、其他用户对文件的读、写、行执权限。
- 第二列示表文件的硬链接数。我们说过,inode包括了文件的元信息。目录中的每个项都包括了一个指向inode的指针,所以每个文件至少有一个硬链接。对于目录说来,其自身又包括了示表自己的.,再加上父目录中对它的硬链接,所以至少有2个硬链接,又因为个每子目录中还有一个..来链接父目录,所以每增长一个子目录,父目录的硬链接数也就加1。如上图中/root共有10个硬链接。
- 第三列第四列别分示表文件属主和属主的主分组,在一些如RedHat的系统中,个每用户认默有一个立独的分组,但是其他系统中可能不是这样。
- 第五列是文件的长度,以字节为位单。
- 倒数第二列,示表文件最后修改时光。
- 最后一列是文件名。
[root@localhost lpi103-2]# ls -i
1839215 msg 1839209 text1 1839189 text3 1839219 text6 1839212 xab 1839214 yab
1839218 sedtab 1839210 text2 1839216 text5 1839211 xaa 1839213 yaa
同时举列多个目录或文件
ls 可以同时受接多个文件或目录作为参数。对于目录名,ls认默会读取目录的容内然后列出个每项的元信息,而不是列出目录本身的元信息。可以应用-d选项来变改种这认默方法。如下:
[root@localhost lpi103-2]# ls -ld ../lpi103-2 sedtab xaa
drwxr-xr-x 2 root root 4096 May 7 17:29 ../lpi103-2
-rw-r--r-- 1 root root 8 May 7 17:14 sedtab
-rw-r--r-- 1 root root 15 May 7 15:15 xaa
序排输出结果
认默况情下,ls按照文件名序排输出。ls供提了很多选项来制控输出的序排,例如-t 是按照修改时光(最新修改在前)序排,-lS 则按照巨细序排, -r则倒转序排后先。例如 -lrt会按照修改时光序排,并且最新修改的在最后输出。更多地选项参考man手册页。
制复、挪动、除删文件
我们经已学会了一些创立文件的方法,那么如何制复、重命名、挪动、或者除删文件呢?这要用到三个很短的令命:
- cp 于用制复一个或多个文件或者目录。必须供提源和的目参数,源或的目参数可以包括路径。如果目标是一个存在的目录,那么全部的源都将制复到这个目录下。如果目标是一个不存在的目录, 那么源也必须是目录,然后一个源目录的拷贝就会生产,称名为目标称名。(译者注:在CentOS6中验实,结果不是这样)如果目标是文件,那么源也必须是文件,然后源文件的一份拷贝就会生产,并且以目标名为新称名,如果目标文件存在,则覆盖之。与DOS和Windows不同,这里的目标参数必须供提,不存在认默的目标参数。
- mv 于用重命名或者挪动一个或多个文件及目录。其则规与cp相似。因为文件名字只是其地点目录的一个项的性属,所以更名不并会影响inode编号。但是跨文件系统挪动时,inode将会变改,因为这要靠制复然后除删来原的文件来现实。
- rm 于用除删一个或者多个文件。后面我们会探讨除删目录的问题。
[root@localhost lpi103-2]# cp text1 text1.bkp
[root@localhost lpi103-2]# mkdir backup
[root@localhost lpi103-2]# cp text1 backup/text1.bkp.2
[root@localhost lpi103-2]# ls -i text1 text1.bkp backup/
1839209 text1 1839220 text1.bkp
backup/:
1839222 text1.bkp.2
[root@localhost lpi103-2]# mv text1.bkp backup
[root@localhost lpi103-2]# mv backup/text1.bkp backup/text1.bkp.1
[root@localhost lpi103-2]# ls -i text1 text1.bkp backup
ls: cannot access text1.bkp: No such file or directory
1839209 text1
backup:
1839220 text1.bkp.1 1839222 text1.bkp.2
- 制复text1,失掉副本text1.bkp
- 应用mkdir创立了一个于用份备的子目录
- 制复了text1的另外一个副本到backup目录中,然后示显了这三份一样的文件其对应的inode编号各不同相
- 然后挪动text1.bkp到了backup目录中,并且新重命名为text1.bkp.1
- 然后核实了inode编号为1839220的text1.bkp文件经已不再存在lpi103-2中,inode编号变不,称名变改了的text1.bkp.1存到了backup目录中。
- -f 或者 --force 致使cp会试尝覆盖掉目标文件,即使目标文件不可写。
- -i 或者 --interactive 在覆盖目标之前,提示用户认确。
- -b或者 --backup 会在覆盖目标之前,把目标先份备。
[root@localhost lpi103-2]# cp text2 backup
[root@localhost lpi103-2]# cp --backup=t text2 backup
cp: overwrite `backup/text2'? y
[root@localhost lpi103-2]# ls backup/
text1.bkp.1 text1.bkp.2 text2 text2.~1~
注意rm令命也支撑-i和-f选项。当你应用rm除删了一个文件,那么文件系统将不能再问访它。有些系统认默为root用户设置了 alias rm = 'rm -i' ,来避免误除删作操。
创立和除删目录
mkdir
[root@localhost lpi103-2]# mkdir dir1 dir2
[root@localhost lpi103-2]# ls
backup dir1 dir2 msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
注意mkdir的功成行执不并会有任何的输出。当然你可以通过echo $?来认确出退码确实是0。
[root@localhost lpi103-2]# mkdir d1/d2/d3
mkdir: cannot create directory `d1/d2/d3': No such file or directory
[root@localhost lpi103-2]# echo $?
1
[root@localhost lpi103-2]# mkdir -p d1/d2/d3
[root@localhost lpi103-2]# echo $?
0
rmdir
[root@localhost lpi103-2]# cp text1 d1/d2/
[root@localhost lpi103-2]# rmdir -p d1/d2/d3 dir1 dir2
rmdir: failed to remove directory `d1/d2': Directory not empty
[root@localhost lpi103-2]# ls ./d1/d2
text1
[root@localhost lpi103-2]# rm d1/d2/text1
rm: remove regular file `d1/d2/text1'? y
[root@localhost lpi103-2]# rmdir -p d1/d2
[root@localhost lpi103-2]#
理处多个文件和目录
递归作操
- 递归举列
ls 应用-R选项来列出一个目录及其子目录。递归选项只作于用目录名。例如他不会找到全部的叫做text1的文件(译者注:没弄懂什么意思)。如下所示:
[root@localhost lpi103-2]# ls -iR
.:
1839221 backup 1839218 sedtab 1839210 text2 1839216 text5 1839211 xaa 1839213 yaa
1839215 msg 1839209 text1 1839189 text3 1839219 text6 1839212 xab 1839214 yab
./backup:
1839220 text1.bkp.1 1839222 text1.bkp.2 1839224 text2 1839223 text2.~1~
- 递归制复
[root@localhost lpi103-2]# cp -pR . copy1
cp: cannot copy a directory, `.', into itself, `copy1'
[root@localhost lpi103-2]# ls -R
.:
backup copy1 msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
./backup:
text1.bkp.1 text1.bkp.2 text2 text2.~1~
./copy1:
backup msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
./copy1/backup:
text1.bkp.1 text1.bkp.2 text2 text2.~1~
- 递归除删
[root@localhost lpi103-2]# rm -rf copy1
[root@localhost lpi103-2]# ls -R
.:
backup msg sedtab text1 text2 text3 text5 text6 xaa xab yaa yab
./backup:
text1.bkp.1 text1.bkp.2 text2 text2.~1~
[root@localhost lpi103-2]#
如果有些文件你没有写权限,你可能须要应用-f来强制除删。
通配符和文件名替换
- ? 配匹任何单个字符
- * 配匹任何字符串,括包空字符串
- [ 引入一个字符类,一个字符类是一个非空字符串,以']'尾结。配匹[]中的任何一个字符都可以。这里有一些特别况情:
[root@localhost lpi103-2]# echo odd1>'text[*?!1]'
[root@localhost lpi103-2]# echo odd2>'text[2*?!]'
[root@localhost lpi103-2]# ls
backup msg sedtab text1 text[*?!1] text2 text[2*?!] text3 text5 text6 xaa xab yaa yab
[root@localhost lpi103-2]# ls text[2-4]
text2 text3
[root@localhost lpi103-2]# ls text[!2-4]
text1 text5 text6
[root@localhost lpi103-2]# ls text*[2-4]*
text2 text[2*?!] text3
[root@localhost lpi103-2]# ls text*[!2-4]*
text1 text[*?!1] text[2*?!] text5 text6
[root@localhost lpi103-2]# ls text*[!2-4]
text1 text[*?!1] text[2*?!] text5 text6
[root@localhost lpi103-2]# echo text*>text10
[root@localhost lpi103-2]# ls *\!*
text[*?!1] text[2*?!]
[root@localhost lpi103-2]# ls tex?[[]*
text[*?!1] text[2*?!]
[root@localhost lpi103-2]# rm tex?[[]*
rm: remove regular file `text[*?!1]'? y
rm: remove regular file `text[2*?!]'? y
[root@localhost lpi103-2]# ls *b*
sedtab xab yab
backup:
text1.bkp.1 text1.bkp.2 text2 text2.~1~
[root@localhost lpi103-2]# ls backup/*2
backup/text1.bkp.2 backup/text2
[root@localhost lpi103-2]# ls -d .*
注意:
[root@localhost lpi103-2]# echo text*
text1 text10 text2 text3 text5 text6
[root@localhost lpi103-2]# echo "text*"
text*
[root@localhost lpi103-2]# echo text[[\!?]z??
text[[!?]z??
触摸文件
touch
[root@localhost lpi103-2]# echo xxx>f1; ls -l f1; sleep 60; touch f1; ls -l f1
-rw-r--r-- 1 root root 4 May 8 16:50 f1
-rw-r--r-- 1 root root 4 May 8 16:51 f1
如果为touch 指定的文件名对应的文件不存在,那么touch将会创立这个文件,除非应用-c或者--nocreate选项。如下:
[root@localhost lpi103-2]# touch f2; touch -c f3; ls -l f*
-rw-r--r-- 1 root root 4 May 8 16:51 f1
-rw-r--r-- 1 root root 0 May 8 16:53 f2
touch也可应把文件的修改时光设置为特定的时光。这通过 -d 或者 -t 来指定。-d 是个非常灵活的选项,能受接各种格式的参数,-t 则须要至少 MMDDhhmm的时光和可选的年和秒。如下:
[root@localhost lpi103-2]# touch -t 198111261212.59 f3
[root@localhost lpi103-2]# touch -d 11am f4
[root@localhost lpi103-2]# touch -d "last fortnight" f5
[root@localhost lpi103-2]# touch -d "yesterday 6am" f6
[root@localhost lpi103-2]# touch -d "2 days ago 12:00" f7
[root@localhost lpi103-2]# touch -d "tomorrow 02:00" f8
[root@localhost lpi103-2]# touch -d "5 Nov" f9
[root@localhost lpi103-2]# ls -lrt f*
-rw-r--r-- 1 root root 0 Nov 26 1981 f3
-rw-r--r-- 1 root root 0 Apr 24 16:57 f5
-rw-r--r-- 1 root root 0 May 6 12:00 f7
-rw-r--r-- 1 root root 0 May 7 06:00 f6
-rw-r--r-- 1 root root 0 May 8 11:00 f4
-rw-r--r-- 1 root root 4 May 8 16:51 f1
-rw-r--r-- 1 root root 0 May 8 16:53 f2
-rw-r--r-- 1 root root 0 May 9 2013 f8
-rw-r--r-- 1 root root 0 Nov 5 2013 f9
如果你不确定一个日期表达式到底示表的是什么时光,你可以应用date令命来查看。date 也受接-d选项,解释方法与touch同相。
[root@localhost lpi103-2]# date
Wed May 8 17:02:57 CST 2013
[root@localhost lpi103-2]# date -r f1
Wed May 8 16:51:50 CST 2013
[root@localhost lpi103-2]# touch -r f1 f1a
[root@localhost lpi103-2]# ls -l f1*
-rw-r--r-- 1 root root 4 May 8 16:51 f1
-rw-r--r-- 1 root root 0 May 8 16:51 f1a
Linux系统会同时记录文件的问访时光和修改时光。通常应用atime和mtime这两个术语示表。当文件刚被创立时,这两个时光戳被设置为同一个值,当文件被修改时,这两个值同时被更新。当一个文件仅仅被问访时,atime被更新,mtime则变不。在最后一个touch的例子中,我们将会看看atime。
[root@localhost lpi103-2]# cat f1
xxx
[root@localhost lpi103-2]# ls -lu f1*
-rw-r--r-- 1 root root 4 May 9 09:34 f1
-rw-r--r-- 1 root root 0 May 8 16:51 f1a
[root@localhost lpi103-2]# touch -a -r f1a f1
[root@localhost lpi103-2]# ls -lu f1*
-rw-r--r-- 1 root root 4 May 8 16:51 f1
-rw-r--r-- 1 root root 0 May 8 16:51 f1a
首先应用cat来问访f1文件,这样f1的atime就被更新了,然后应用touch的-a选项来设置f1的atime与f1a的atime一致,最后查看修改的结果。
查找文件
find
[root@localhost lpi103-2]# find . -name "*[1k]*"
./f1
./text10
./backup
./backup/text2.~1~
./backup/text1.bkp.1
./backup/text1.bkp.2
./f1a
./text1
[root@localhost lpi103-2]# find . -ipath "*ACK*1"
./backup/text1.bkp.1
[root@localhost lpi103-2]# find . -ipath "*ACK*/*1"
./backup/text1.bkp.1
说明:
- 这里应用的模式与shell的通配符模式完全同相;
- -path于用指定于用配匹的不是文件名本身,而是整个路径名;
- -i则是忽略巨细写
- 如果想搜索以.扫尾的文件或目录,如.bashrc或者以后目录.,那么模式的扫尾必须是一个.,否则这些文件会被忽略。
[root@localhost lpi103-2]# find . -type d
.
./backup
[root@localhost lpi103-2]# find . -type d -name "*"
.
./backup
注意,-type d不带任何参数时,会示显以.扫尾的文件,与通配符"*"一样。
[root@localhost lpi103-2]# find . -size 0
./f8
./f6
./f9
./f2
./f5
./f1a
./f4
./f7
./f3
[root@localhost lpi103-2]# find . -size +23c -size -26c -print
./backup/text2.~1~
./backup/text1.bkp.1
./backup/text1.bkp.2
./backup/text2
./text2
./text1
./text5
在第二个令命中,我们应用了-print选项,这是对搜索的结果行进的作操。在bash中,如果没有指定作操,则print就是认默的作操。在其他的系统或shell中,作操是必须的,否则不会有任何输出。
微笑,是春天里的一丝新绿,是秋日里的一缕阳光,是骄阳下的一片浓荫,是冬雪中的一株梅红……微笑着去面对吧,你会感到人生是那样的温馨与甜蜜!
root@localhost lpi103-2]# find . -size -26c -size +23c -ls
1839223 4 -rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2.~1~
1839220 4 -rw-r--r-- 1 root root 24 May 8 14:40 ./backup/text1.bkp.1
1839222 4 -rw-r--r-- 1 root root 24 May 8 14:41 ./backup/text1.bkp.2
1839224 4 -rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2
1839210 4 -rw-r--r-- 1 root root 25 May 7 14:48 ./text2
1839209 4 -rw-r--r-- 1 root root 24 May 7 14:29 ./text1
1839216 4 -rw-r--r-- 1 root root 24 May 7 16:41 ./text5
[root@localhost lpi103-2]# find . -size -26c -size +23c -exec ls -l '{}' \;
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2.~1~
-rw-r--r-- 1 root root 24 May 8 14:40 ./backup/text1.bkp.1
-rw-r--r-- 1 root root 24 May 8 14:41 ./backup/text1.bkp.2
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2
-rw-r--r-- 1 root root 25 May 7 14:48 ./text2
-rw-r--r-- 1 root root 24 May 7 14:29 ./text1
-rw-r--r-- 1 root root 24 May 7 16:41 ./text5
-exec选项的能力超出你的想象,例如:
[root@localhost lpi103-2]# find . -mtime -2 -type f -exec ls -l '{}' \;
-rw-r--r-- 1 root root 0 May 9 02:00 ./f8
-rw-r--r-- 1 root root 8 May 7 15:16 ./yab
-rw-r--r-- 1 root root 0 Nov 5 2013 ./f9
-rw-r--r-- 1 root root 9 May 7 15:15 ./xab
-rw-r--r-- 1 root root 43851 May 7 15:38 ./msg
-rw-r--r-- 1 root root 0 May 8 16:53 ./f2
-rw-r--r-- 1 root root 4 May 8 16:51 ./f1
-rw-r--r-- 1 root root 17 May 7 15:16 ./yaa
-rw-r--r-- 1 root root 52 May 8 16:10 ./text10
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2.~1~
-rw-r--r-- 1 root root 24 May 8 14:40 ./backup/text1.bkp.1
-rw-r--r-- 1 root root 24 May 8 14:41 ./backup/text1.bkp.2
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2
-rw-r--r-- 1 root root 98 May 7 17:29 ./text6
-rw-r--r-- 1 root root 0 May 8 16:51 ./f1a
-rw-r--r-- 1 root root 25 May 7 14:48 ./text2
-rw-r--r-- 1 root root 0 May 8 11:00 ./f4
-rw-r--r-- 1 root root 24 May 7 14:29 ./text1
-rw-r--r-- 1 root root 24 May 7 16:41 ./text5
-rw-r--r-- 1 root root 8 May 7 17:14 ./sedtab
-rw-r--r-- 1 root root 63 May 7 16:07 ./text3
-rw-r--r-- 1 root root 15 May 7 15:15 ./xaa
[root@localhost lpi103-2]# find . -daystart -mtime -2 -type f -exec ls -l '{}' \;
-rw-r--r-- 1 root root 0 May 9 02:00 ./f8
-rw-r--r-- 1 root root 0 Nov 5 2013 ./f9
-rw-r--r-- 1 root root 0 May 8 16:53 ./f2
-rw-r--r-- 1 root root 4 May 8 16:51 ./f1
-rw-r--r-- 1 root root 52 May 8 16:10 ./text10
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2.~1~
-rw-r--r-- 1 root root 24 May 8 14:40 ./backup/text1.bkp.1
-rw-r--r-- 1 root root 24 May 8 14:41 ./backup/text1.bkp.2
-rw-r--r-- 1 root root 25 May 8 14:58 ./backup/text2
-rw-r--r-- 1 root root 0 May 8 16:51 ./f1a
-rw-r--r-- 1 root root 0 May 8 11:00 ./f4
[root@localhost lpi103-2]# find . -mmin -600 -mmin +60 -type f -exec ls -l '{}' \;
-rw-r--r-- 1 root root 0 May 9 02:00 ./f8
- 当应用-mtime -2时,find令命会查找最近2天(48小时内)修改的文件。一天就是于对相以后时光的24小时。如果想根据问访时光而不是修改时光,那么应用-atime代替-mtime。
- 当应用-daystart时,则示表是按照日历的天来算的,而不是相对以后时光的24小时。
- 最后例子中,我们查找的时在过去60分钟-600分钟之内修改过的文件。
识别文件
[root@localhost lpi103-2]# file backup/ text1 f2 ../music/wee-willie-winkie.mp3 /bin/echo
backup/: directory
text1: ASCII text
f2: empty
../music/wee-willie-winkie.mp3: Audio file with ID3 version 2.3.0, contains:
/bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
file令命应用三种类型的测试来为文件分类。首先是应用stat令命来认确文件否是为空或者是目录;然后根据文件中的“魔数”来识别文件类型;最后的语言测试用来确定文本文件否是是一个xml,C或者C++源程序、troff文件、或者其他程序设计语言的源文件。这三个步骤依次行执,一旦有一个步骤识别功成了,就会停止并报告结果,除非指定了-k或者--keep-going选项。
[root@localhost lpi103-2]# file -i backup/ text1 f2 ../music/wee-willie-winkie.mp3 /bin/echo
backup/: application/x-directory; charset=binary
text1: text/plain; charset=us-ascii
f2: application/x-empty; charset=binary
../music/wee-willie-winkie.mp3: application/octet-stream; charset=binary
/bin/echo: application/x-executable; charset=binary
file令命也会管理“魔数”,一样须要读者自行参考man手册页。
压缩文件
应用gzip和gunzip
[root@localhost lpi103-2]# cp -p /etc/services .
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
[root@localhost lpi103-2]# gzip services
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 127223 Oct 15 2012 services.gz
应用gzip的-d选项来解压文件,更经常应用的是gunzip令命。如下:
[root@localhost lpi103-2]# gzip -d services.gz
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
注意,解压后的文件与原始的文件有同相的文件名和时光戳。
应用bzip2和bunzip2
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
[root@localhost lpi103-2]# bzip2 services
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 115774 Oct 15 2012 services.bz2
[root@localhost lpi103-2]# bunzip2 services.bz2
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
gzip和bzip2的差异
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
[root@localhost lpi103-2]# gzip -N services
[root@localhost lpi103-2]# touch services.gz
[root@localhost lpi103-2]# mv services.gz services-x.gz
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 127223 May 9 11:15 services-x.gz
[root@localhost lpi103-2]# gzip -l services-x.gz
compressed uncompressed ratio uncompressed_name
127223 641020 80.2% services-x
[root@localhost lpi103-2]# gzip -lN services-x.gz
compressed uncompressed ratio uncompressed_name
127223 641020 80.2% services
[root@localhost lpi103-2]# gunzip -N services-x.gz
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 Oct 15 2012 services
[root@localhost lpi103-2]# bzip2 services
[root@localhost lpi103-2]# mv services.bz2 services-x.bz2
[root@localhost lpi103-2]# touch services-x.bz2
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 115774 May 9 11:17 services-x.bz2
[root@localhost lpi103-2]# bunzip2 services-x.bz2
[root@localhost lpi103-2]# ls -l serv*
-rw-r--r-- 1 root root 641020 May 9 11:17 services-x
[root@localhost lpi103-2]# rm services-x # Don't need this any more
gzip和bzip2都能出标准输入中受接输入,都支撑-c选项来直接向stdout输出。
- bzcat 压缩文件到标准输出,与bzip2 -dc同相;
- bzip2recover 试尝从损坏的bzip2文件中恢复数据。
其他压缩工具
包打多个文件
- 微分或累积份备。份备自上次完全份备以来发生变化的部分。恢复的时候,至少须要最后一个完全份备和最新的累积份备。
- 增量份备。份备自上次增量份备以来发生的变化部分。恢复的时候,须要最后一个完全份备,还有全部的增量份备(按顺序)。
- 完全份备。通常是整个文件系统或一组文件或目录的完整份备。种这方法须要的时光最长,所以它通常配合上面两种方法的一种来工作。
应用tar
[root@localhost lpi103-2]# tar -cvf ../lpitar1.tar .
./
./f8
./f6
./yab
./f9
./xab
./msg
./f2
./f5
./f1
./yaa
./text10
./backup/
./backup/text2.~1~
./backup/text1.bkp.1
./backup/text1.bkp.2
./backup/text2
./text6
./f1a
./text2
./f4
./text1
./text5
./sedtab
./f7
./text3
./xaa
./f3
通常我们想通过压缩归档文件来节省存储空间和传输时光。GUN版本的tar令命允许你通过-z来应用gzip来压缩,通过-b应用bzip2来压缩。上面例子展示了应用-z来压缩归档文件,以及压缩与不压缩版本的巨细区别。
[root@localhost lpi103-2]# tar -zcvf ../lpitar3.tar ~/lpi103-2/
tar: Removing leading `/' from member names
/root/lpi103-2/
/root/lpi103-2/f8
/root/lpi103-2/f6
/root/lpi103-2/yab
/root/lpi103-2/f9
/root/lpi103-2/xab
/root/lpi103-2/msg
/root/lpi103-2/f2
/root/lpi103-2/f5
/root/lpi103-2/f1
/root/lpi103-2/yaa
/root/lpi103-2/text10
/root/lpi103-2/backup/
/root/lpi103-2/backup/text2.~1~
/root/lpi103-2/backup/text1.bkp.1
/root/lpi103-2/backup/text1.bkp.2
/root/lpi103-2/backup/text2
/root/lpi103-2/text6
/root/lpi103-2/f1a
/root/lpi103-2/text2
/root/lpi103-2/f4
/root/lpi103-2/text1
/root/lpi103-2/text5
/root/lpi103-2/sedtab
/root/lpi103-2/f7
/root/lpi103-2/text3
/root/lpi103-2/xaa
/root/lpi103-2/f3
[root@localhost lpi103-2]# ls -l ../lpitar*
-rw-r--r-- 1 root root 71680 May 9 13:26 ../lpitar1.tar
-rw-r--r-- 1 root root 13595 May 9 13:30 ../lpitar2.tar
本例还示显了tar的另一个重要特征。我们应用了目录的绝对路径,tar的输出的第一行告诉我们除删了扫尾的/。这就允许文件被恢复到其他的路径下,这对于恢复系统文件非常重要。入股哦你确实想要存储绝对路径,应用-p选项。在创立归档文件时一定要避免混淆绝对路径和相对路径,因为从归档文件恢复的时候都是采用相对路径。
[root@localhost lpi103-2]# touch f1
[root@localhost lpi103-2]# tar --diff --file ../lpitar1.tar .
./f1: Mod time differs
[root@localhost lpi103-2]# tar -df ../lpitar2.tar -C ./
./f1: Mod time differs
[root@localhost lpi103-2]# tar -xvf ../lpitar1.tar ./f1
./f1
[root@localhost lpi103-2]# tar --compare -f ../lpitar2.tar --directory ./
指定的要恢复的文件名必须配匹归档文件中德文件名。在本例中如果不是./f1而是f1的话,将不会工作。也可以应用通配符,但是要当心恢复的文件列表否是和你想要的完全一样。当不能确定归档文件里有什么文件时,你也可以应用-t或者--list选项来列出归档文件的容内。如下例:
[root@localhost lpi103-2]# tar -tf ../lpitar1.tar "*f1*"
./f1
./f1a
你可以应用find令命来选择要归档的文件,然后通过管道把结果传送给tar。我们将在讲解cpio令命的时候探讨种这技术,一样的方法也适于用tar。
应用cpio
[root@localhost lpi103-2]# find . -depth -print0 | cpio --null -o > ../lpicpio.1
89 blocks
[root@localhost lpi103-2]# find ~/lpi103-2/ -depth -print0 | cpio --null -o > ../lpicpio.2
90 blocks
如果你想要查看归档文件的细详信息,应用cpio的-v选项。
[root@localhost lpi103-2]# cpio -i --list "*backup*"< ../lpicpio.1
backup/text2.~1~
backup/text1.bkp.1
backup/text1.bkp.2
backup/text2
backup
89 blocks
[root@localhost lpi103-2]# cpio -i --list absolute-filenames "*text1*" < ../lpicpio.2
/root/lpi103-2/text10
/root/lpi103-2/backup/text1.bkp.1
/root/lpi103-2/backup/text1.bkp.2
/root/lpi103-2/text1
90 blocks
上面例子中,展示了应用cpio来恢复"text1"到一个临时子目录中,与tar不同,你须要显式地指定一个-d或者--make-direcotories选项来创立这个子目录。另外,cpio不会应用归档文件中的文件覆盖文件系统中更新的同名文件,除非你应用了-u或者--unconditional选项。
[root@localhost lpi103-2]# mkdir temp
[root@localhost lpi103-2]# cd temp/
[root@localhost temp]# cpio -idv "*f1*" "*.bkp.1"
dd 令命
[root@localhost lpi103-2]# cat text6
1 apple
2 pear
3 banana
9 plum
3 banana
10 apple
1 apple
2 pear
3 banana
9 plum
3 banana
10 apple
[root@localhost lpi103-2]# dd if=text6 conv=ucase ibs=20 obs=30
1 APPLE
2 PEAR
3 BANANA
9 PLUM
3 BANANA
10 APPLE
1 APPLE
2 PEAR
3 BANANA
9 PLUM
3 BANANA
10 APPLE
4+1 records in
3+1 records out
98 bytes (98 B) copied, 3.9944e-05 s, 2.5 MB/s
每个文件都可以示原始设备。这通常会是一个磁带设备,也可能是一个磁盘分区如/dev/hda1或者/devs/da2,可以份备到磁带中或者一个文件中。理想的况情下,份备时设备上的文件系统应该被载卸或者至少是只读挂载的,这样才能确保份备的程过中数据不会发生变改。
[root@localhost ~]# dd if=/dev/sda6 of=backup-1
31248384+0 records in
31248384+0 records out
15999172608 bytes (16 GB) copied, 855.25 s, 18.7 MB/s
[root@localhost ~]# ll
total 15624432
-rw-------. 1 root root 1033 Mar 27 11:12 anaconda-ks.cfg
-rw-r--r-- 1 root root 15999172608 May 9 15:17 backup-1
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 56G 18G 35G 34% /
tmpfs 947M 0 947M 0% /dev/shm
/dev/sda5 74G 15G 56G 21% /data
/dev/sda6 15G 870M 14G 7% /work
注意dd制复了16GB的数据,并且输出的文件确实是这么大,尽管/dev/sda6这个分区,实际应用了7%的容量。除非采用硬件压缩的方法份备到磁带上,一般都须要压缩文件。上面例子示显了现实方法。
[root@localhost ~]# dd if=/dev/sda6 | gzip >backup-2
31248384+0 records in
31248384+0 records out
15999172608 bytes (16 GB) copied, 1549.11 s, 10.3 MB/s
[root@localhost ~]# ll back*
-rw-r--r-- 1 root root 15999172608 May 9 15:17 backup-1
-rw-r--r-- 1 root root 13400290321 May 9 15:55 backup-2
译者注:本验实译者没做,没找到合适的挪动硬盘。
文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!