· *.Z compress 程序压缩的档案;
· *.bz2 bzip2 程序压缩的档案;
· *.gz gzip 程序压缩的档案;
· *.tar tar 程序打包的数据,并没有压缩过;
· *.tar.gz tar 程序打包的档案,其中并且经过 gzip 的压缩!
· *.zip zip 程序压缩文件
· *.rar rar 程序压缩文
这些是目前叫常用的后缀名,虽然在linux中文件的属性和他的后缀名没有绝地的关系,能不能执行要看他的文件属性,但是为了方便我们记忆,适当的文件后缀名是必要的!
语法:
[root@lpp ~]# compress [-d] filename
参数说明:
-d :解压缩参数
范例:先将/etc/man.config复制到root下,在将他压缩。
[root@lpp ~]# cp /etc/man.config /root
[root@lpp ~]# compress man.config//压缩man.config
[root@lpp ~]# compress -d man.config.Z // -d 解压缩这个文件
[root@lpp ~]# uncompress man.config.Z //解压缩这个文件
所以以后看到.Z文件就应该知道是经过compress命令压缩的文件。注意:当你使用compress没有给出其他参数是,原始文件会被后来的.Z文件取代。
语法:
[root@lpp ~]# bzip2 [-dz] filename <==压缩解压缩指令
[root@lpp ~]# bzcat filename.bz2 <==读取压缩文件的内容
参数说明:
-d : 解压缩
-z : 压缩
范例:
[root@lpp ~]# bzip2 -z man.config //压缩文件
[root@lpp ~]# bzcat man.config.bz2 //读取压缩文件内容
[root@lpp ~]# bzip2 -d man.config.bz2 // 解压缩
[root@lpp ~]# bunzip man.config.bz2 // 解压缩
注意:当你使用bzip,原始文件会被后来的.bz2文件取代。当你要解压一个文件,这个文件名称是.bz,.bz2,.tbz,.tbz2等,均可尝试用bzip解压。
语法:
[root@lpp ~]# gzip [-d#] filename <==压缩解压缩指令
[root@lpp ~]# zcat filename.gz <==读取压缩文件的内容
参数说明:
-d : 解压缩参数
-r : 递归处理,将指定目录下的所有文件和子目录一并处理
-# : 压缩等级,1最不好,9最好,6为默认值
范例:
[root@lpp ~]# gzip man.config //压缩文件,生成.gz的压缩文件
[root@lpp ~]# zcat man.config.gz //读取压缩文件内容
[root@lpp ~]# gzip -d man.config.gz // 解压缩
[root@lpp ~]# gunzip man.config.gz //解压缩
[root@lpp ~]# gzip -9 man.config //以最大的压缩比例压缩文件
[root@lpp ~]# gzip -r filename.gz file1 file2 file3 /usr/work/school
////file1、file2、 file3、以及/usr/work/school目录的内容(假设这个目录存在)压缩起来,然后放入filename.gz文
语法:
[root@lpp ~]# tar [-zxcvfpP] filename
[root@lpp ~]# 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@lpp home]# tar -cvf lpp.tar ./lpp //将这个./lpp目录打包成一个文件
[root@lpp home]# tar -zcvf lpp.tar.gz ./lpp // 将这个目录打包的同时以gzip压缩
[root@lpp home]# tar -xvf lpp.tar ./lpp //将打包的这个文件解压
[root@lpp home]# tar -zxvf lpp.tar.gz ./lpp //因为这个是gzip压缩的结果,所以需要加上 -z
[root@lpp home]# tar -N '2011/07/25' -zcvf lpp.tar.gz /home/lpp //在/home/lpp这个目录下,比2011/07/25还要新的文件才会被打包到 lpp.tar.gz中
[root@lpp home]# tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
//将根目录的所有数据都打包到host.tar.gz文件中,但是/mnt及/proc不打包
[root@lpp ~]# tar -cvf - /home/lpp|tar -xvf - //将/home/lpp这个目录打包后直接在/root下解包,最好使用绝对路径不容易出问题!
注意:tar是一个多用途的压缩指令,前面提到的conpress与gzip只适合压缩一个文件,但是如果要压缩一个目录,就必须使用tar。tar是用作备份很重要的指令。且注意使用tar命令解压前后的文件不会被覆盖,会产生新的文件。
简单的说,在Linux的环境下,我们可以透过『 字串以及一些特殊字元的辅助 』来进行文字的比对工作,好来让使用者筛选自己所需要资料。 这些特殊的字元与搭配使用的工具,就构成了正规表示法的主轴啦 ! 举个简单的例子来说,我要找到VBird 或Vbird 这个字样,但是不要其他的字串,如果使用大小写都接受的情况,我就有可能会找到VBIRD 或vbird 或vbIRd 等等的字眼,但是我却只要前两个字串而已啊! 这个时候,我可以使用V[Bb]ird来搜寻呢! 呵呵! 那个中括号[]就是一个很常见的表示法之一啰! 此外,正规表示法搜寻的结果显示当中,由于RE 主要针对『一行』来进行处理,如果是在文书排版的软体当中,则是以『一整段(没有断行)』来进行处理,如果该行有所需要的资料时,则取出来进行处理,如果该行无搜寻的资料,则将该行舍弃,不进行处理与显示!
语法:
[root@lpp ~]# grep [-acinv] '搜寻字串' filename
参数说明:
-a :将binary档案以text档案的方式搜寻资料
-c :计算找到'搜寻字串'的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有'搜寻字串'内容的那一行
范例:
[root@lpp ~]# grep root /var/log/secure
将/var/log/secure这个文件中有root那一行显示出来
[root@lpp ~]# grep -v 'root' /var/log/secure
将/var/log/secure这个文件中没root的那些行显示出来
[root@lpp ~]# grep "*[a-d]*" /var/log/secure
输出含有a-d的行
[root@lpp ~]# grep [AZ]ANPATH /etc/man.config
[任何一个大写字元]后面接ANPATH的那一行就显示出来! 例如AANPATH, BANPATH.... ZANPATH等等!
• 说明 :
grep是一个很常见的指令,最重要的功能就是进行字串资料的比对了,需要说明的是『 grep在一个档案中查寻一个字串时,他是以"整行"为单位来资料的撷取的! 』也就是说,假如一个档案内有10 行,其中有两行具有你所搜寻的字串,则将那两行显示在萤幕上,其他的就丢弃了! 而grep 除了可以进行档案的资料搜寻之外,也常常被应用在input/output 的资料处理当中,例如常见的管线命令( pipe ) 就可以常常见到他的踪影! 以上面的例子来看,我们可以发现前两个例子是查寻档案的内容,有没有加上-v 所显示出来的结果是『相反的! 』,而第三个例子则是以pipe 的功能进行资料的处理的喔! 至于最后一个例子比较特殊,使用到中括号[] ,这是什么意思呢?
在中括号里面『只有一个字元』,而里面的内容就是『字元的范围』啦! 所以呢[AZ]就是指:『A到Z当中的任何一个字元都能被接受,但是只有一个字元』的意思 ! 所以,如果我想要所有的数字都接受,那就是[0-9],如果我只要接受1,3,5呢? 就是[135]或者可以用逗号隔开[1,3,5]! 所以啦,那个减号-在中括号当中,代表『一个范围(range) 』的意思啦! 中括号还有很多用途呢! 底下会更详细介绍!
正规表示法的特殊字元(charaters)与egrep指令
通配符 | 意义 |
---|---|
^ | 句首字符相符 |
$ | 句尾相同的字符 |
? | 任何一个字符 |
* | 随意几个字符 |
\ | 跳转字符,将特殊字符变为普通自如 |
[list] | 列表中的字符 |
[range] | 列表中范围内的字符 |
[^list] |
反向选择,与[list]相反 |
[^rang] | 方向选择,与[list]相反 |
\{n\} | 与前一个相同字连续n个 |
\{n,m\} | 与前一个相同字连续n-m个 |
范例:
[root@lpp ~]# grep ^boot /etc/*
搜寻在/etc下 文件中有一行以boot开头的文件
[root@lpp ~]# grep [xyz] /etc/*
搜寻在/etc下文件中含有XYZ三个字符中的任何一个的那一行
功能:
Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。
语法:
[root@lpp ~]# diff [options] file1 file2
该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较
参数说明:
-a:将所有文件当作文本文件来处理。
-b或–ignore-space-change 忽略空格造成的不同。
-B或–ignore-blank-lines 忽略空行造成的不同。
-c:使用纲要输出格式。
-H:利用试探法加速对大文件的搜索。
-I:忽略大小写的变化。
-n –rcs:输出RCS格式。
-N或–new-file 在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-r或–recursive 比较子目录中的文件。
-u,-U<列数>或–unified=<列数> 以合并的方式来显示文件内容的不同。
范例:
[root@lpp ~]# diff /usr/xu mine
把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。
通常输出由下述形式的行组成:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4 这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。
在上述形式的每一行的后面跟随受到影响的若干行,以”<”打头的行属于第一个文件,以”>”打头的行属于第二个文件。
diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。
如果file1和file2都是目录,则diff会产生很多信息
diff最常用的功能:
diff有很多功能平时我们不常用到,最常用的功能莫过于生成patch文件了:
diff -urN old/ new/ > mysoft.patch
参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。
然后在需要应用patch的地方使用下述命令即可:
patch -p0 < mysoft.patch
diff的 -y 命令(长格式为 –side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。如果要改变左右各部分的宽度,可以通过 -W (–width)参数来指定。
–ignore-blank-lines 参数可以不检查空白行。这样DOS格式和Unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。
重点回顾
• 正规表示法( Regular Expression ) 的用途主要是用来做为『搜寻』字串之用,还可以用来过滤特殊讯息等用途;
• 由于严谨度的不同,正规表示法之上还有更严谨的延伸正规表示法;
• 正规表示法的处理方式,经常是以『整行』或称为『整段』来进行处理的;
• grep 与egrep 在正规表示法里面是很常见的两支程式,其中, egrep 支援更严谨的正规表示法的语法;
就先到这里,关于awk与sed后续补充。