返回列表 发帖

linux 操作命令

[这个贴子最后由残剑无忧在 2005/08/16 10:25am 第 1 次编辑]

操作与搜索命令
在本学时教程中,将学习文件和子目录进行建立、拷贝、删除及移动等操作命令。还将
学习怎样检索文件以及对文件进行压缩/解压缩的方法。这些内容建立在前一学时教程的学习
基础上,而在本学时教程中学习的命令在今后的学习中也会经常用到。
5.1 操作文件和子目录
使用L i n u x操作系统与使用其他的计算机操作系统没有什么不同。你会在硬盘驱动器上对
文件和子目录进行拷贝、删除或者移动,以便更好地组织信息。本小节将介绍怎样才能既快
速又简单地完成这些任务。
虽然L i n u x操作系统的图形化界面X窗口系统提供了拖放和多重选择等功能,方便了对
文件进行拷贝或者删除等操作,但是在这里学习到的各种命令是构成上述这些操作的基础。
即使不在控制台状态下使用L i n u x操作系统,了解掌握这些程序的执行原理也是很有必要
的。
5.1.1 使用touch命令建立文件
t o u c h命令使用起来很简单,一般会在两种情况下用到它。第一种情况是建立文件,第二
种情况是更新文件的修改日期。t o u c h命令是G N U文件工具包的一个组成部分,另外还有几个
命令参数。
如果想使用t o u c h命令建立一个文件,请使用下面的方法:
# touch newfile
# ls -l newfile
- r w - r - - r - - 1 bball users 0 Jan 5 12 : 40 n e w f i l e
正如所看到的,t o u c h命令建立了一个长度或者大小为0的文件,也可以使用下面的命令:
# > newfile2
# ls -l new*
- r w - r - - r - - 1 bball users 0 Jan 5 12 : 40 n e w f i l e
- r w - r - - r - - 1 bball users 0 Jan 5 12 : 41 n e w f i l e 2
类似与t o u c h命令,上面的操作也建立了一个长度为0的文件。那么为什么通过命令也可以
建立文件的情况下还要使用t o u c h命令呢?这是因为t o u c h命令可以更新一个文件的建立日期或
者时间。甚至可以使用t o u c h命令把一个文件的建立日期或者时间改为过去或者将来时间,如
下所示:
# touch newfile2
# ls -l newfile2
- r w - r - - r - - 1 bball users 0 Jan 5 12 : 44 n e w f i l e 2
正如你所看到的,在表示n e w f i l e 2文件建立的时间记录上增加了三分钟(从12 : 41变成了
12 : 44)。还可以使用t o u c h命令的- t参数加上一个代表年月日时的数字把某个文件的建立日期
或者时间设置为一个具体的时间,如下所示:
# touch -t 1225130000 newfile2
# ls -l --full-time new*
- r w - r - - r - - 1 bball users 0 Tue Jan 05 12 : 40 : 14 1999 n e w f i l e
- r w - r - - r - - 1 bball users 0 Mon Dec 25 13 : 00 : 00 2000 n e w f i l e 2
使用l s命令的- - f u l l - t i m e参数和完整信息格式清单列表可以看到: n e w f i l e 2现在有一个2 0 0 0
年圣诞节那一天下午一点的建立时间记录(你会发现那是一个星期一)。
t o u c h命令的一个用处是使用在进行备份操作的过程中。在备份一些文件和子目录之前或
者之后,使用t o u c h命令就可以更新这些文件的时间记录,这样备份程序在进行下一次备份工
作的时候就有了一个可供参考的时间。t o u c h命令还有另外一个用法,就是在由c r o n命令(请阅
读第2 4学时教程“使用任务计划实现系统管理自动化”中的“使用cron 程序包”一节)管理的
任务计划程序对文件自动进行整理的时候控制对登录记录文件的删除或者保留。如果把某一
个登录文件设定得足够“陈旧”,它就将被删除掉。而如果更新了它,这个文件就将被保留。
5.1.2 使用rm命令删除文件
r m命令是用来删除文件的。这个命令只有几个简单的参数,但是在使用的时候千万要小
心谨慎。为什么呢?因为如果r m命令删除了某个文件的话,这个文件就不再存在了(虽然还是
有可能再恢复某些文本文件,请阅读本学时教程后面介绍m c命令的时候关于指针的说明)。
经常以根操作员的身份登录进入系统并使用r m命令已经造成了许多
不为人知的不幸与灾难。为什么呢?因为只需要一个简单的命令,就不
仅可能会毁掉L i n u x系统,还可能会毁掉包括D O S分区,R A M卡,活动硬
盘等等在内的任何已挂装的其他类型的文件系统,这个命令就是:
# rm -fr /*
这个带着- r参数的命令会从根目录( /)开始递归地删除所有的文件和子
目录。如果你必须以根操作员的身份运行L i n u x操作系统的话,一定要先
对系统进行备份,并且要学习第2 3学时教程“备份和恢复系统”。
r m命令可以从命令行上一次删除一个或者几个文件。可以使用下面的几种方法中的任何
一种:
# rm file
# rm file1 file2 file3
# rm file*
上面的第一个命令行删除了一个名称为f i l e的文件,第二个命令行删除了三个文件,而第
三个命令行则删除了当前子目录中文件名以字母f i l e开头的所有文件。使用r m命令比较安全的
办法之一是使用它的- i交互操作参数,这样在操作过程中会被问到是否真的想删除某个文件,
如下所示:
# rm -i new*
rm : remove '; newfile '; ? y
rm : remove '; newfile2 '; ? y
还可以使用- f参数强行删除某个文件,如下所示:
# rm -f new*
如果使用了- f参数但是没有文件能够匹配n e w *格式的时候, r m命令失效,但是不会显示
任何出错信息。而且当r m命令遇到子目录的时候,即使子目录是空的,也不进行删除操作,
64使用第二部分学习L i n u x操作系统的基本命令
下载
并且还会显示出错信息,甚至在使用了- f参数时也是如此。如下所示:
# rm -f temp*
rm : temp : is a directory
rm : temp2 : is a directory
但是当你把- f和- r参数一起使用的时候,就可以删除这个子目录和这个子目录下面的所有
的文件和子目录,条件是只要你拥有它们或者拥有这个操作的权限;请阅读第2 2学时教程
“管理文件和文件系统”。- f和- r参数可以象下面这样联合使用:
# rm -fr temp*
- f r参数使得r m命令的执行情况就象r m d i r命令(一会儿就介绍)一样。
使用这个参数时千万要小心!一般来说,如果在O p e n L i n u x操作系统中删
除了一个文件,它就永远消失了!
有些X窗口环境比如K D E或者套装软件比如S t a r O ff i c e等等采用提供
“回收站”的办法来删除文件—文件并不是真的被删除了,而只是移入
到一个临时的子目录中。这是一个安全的、但并非万无一失的对文件进
行删除或者恢复的办法。如果确实在恢复文件方面需要帮助,那么最好
是使用本学时教程后面将要介绍的m c命令,也就是Midnight Commander
程序。
5.1.3 使用mkdir命令建立子目录
m k d i r命令一次可以建立一个或者几个子目录。m k d i r命令还可以只使用一个命令行一次
就建立起包括全部的父目录和子目录在内的一个完整的子目录继承结构,对这一点是不是有
点意想不到呢。
这个命令,再加上c p命令和m v命令,将会是用来组织资料信息的基本工具之一。现在先
来看一些示例。如下所示,一条简单的命令建立起了一个子目录:
# mkdir temp
还可以使用下面的方法一次建立好几个子目录:
# mkdir temp2 temp3 temp4
还可以输入下面的内容在子目录t e m p下再建立一个名为c h i l d的子目录:
# mkdir temp/child
因为子目录t e m p已经是存在的了(刚才建立了它),所以上面这条命令是有效的。但是如果
输入下面的内容:
# mkdir temp5/child
mkdir : cannot make directory '; temp5/child '; : No such file or directory
正如所看到的, m k d i r命令会提示子目录t e m p 5不存在。如果想使用m k d i r命令建立一系列
完整的子目录结构,就必须使用它的- p参数,即父操作参数,如下面的例子中那样:
第5学时操作与搜索命令使用65
下载
2 directories, 0 files
正如所看到的,m k d i r命令不仅建立了子目录t e m p 5,还在它的下一层建立了p a r e n t子目录,
而子目录p a r e n t中又有一个c h i l d子目录。
现在应该已经掌握建立子目录的方法了,我们下面来学习如何删除它们。
5.1.4 使用rmdir命令删除子目录
r m d i r命令是用来删除子目录的。如果希望删除某个子目录,只需要输入下面的内容:
# rmdir tempdirectory
但是要注意:这个子目录必须是空的。如果试图删除一个其中还有文件的子目录,就会
得到一个下面这样的出错信息:
# rmdir temp5
rmdir : temp5 : Directory not empty
在上面的例子中,子目录t e m p 5中还有其他的子目录。如果某个子目录的名称代表的其实
是一个文件而不是子目录的话, r m d i r命令也会显示出错信息。可以先用r m命令删除这些文件
(如果使用的是-fr 参数,千万要小心),或者先把这些文件转移到其他的地方,或者还可以使
用m v命令给子目录改个名称。m v命令我们将在下面的小节讨论。
类似于m k d i r命令,r m d i r命令也有一个- p参数。可以使用这个参数来删除某个子目录的全
部继承结构,如下所示:
# rmdir -p temp5
rmdir : temp5 : Directory not empty
怎么回事! 好象没起作用,那么输入下面的内容:
# rmdir -p temp5/parent
rmdir : temp5/parent : Directory not empty
啊,好象还是不行,再试试下面的内容:
# rmdir -p temp5/*
rmdir : temp5/parent : Directory not empty
这可是让人有些恼火了!再试一次:
# rmdir -p temp5/parent/child
成功了! 正如你所看到的,必须指明某个子目录完整的结构才能够删除它。如果使用了上
面同样的命令但是没有加上- p参数,那么就只有子目录c h i l d被删除。那么对于有两个或者更
多个子目录的情况又会怎么样呢?如下所示:
3 directories, 0 files
为了删除子目录t e m p 5整个的子目录结构,必须使用下面的命令:
# rmdir temp5/parent/*
现在应该已经掌握建立和删除子目录的操作了。下面,我们来学习m v命令,可以使用这
个命令对文件和子目录进行移动或者改名操作。
66使用第二部分学习L i n u x操作系统的基本命令
下载
5.1.5 使用mv命令给文件改名
m v命令,也就是文件名更改命令,可以对文件或者子目录的名称进行更改—但是它也
可以被称为文件移动命令并可以用来在文件系统内移动文件或者子目录。
事实上,从技术观点出发,那些文件或者子目录并没有被真正地移动。如果一定要了解
其中的细节,可以从L i n u x操作系统系统管理员指南(简称S A G)中阅读到有关的细节, S A G可
以在下列站点上找到:
h t t p:/ / m e t a l a b . u n c . e d u / L D P / L D P / s a g / i n d e x . h t m l
想不想在线阅读S A G?应该可以找到一份安装在O p e n L i n u x操作系统
上的拷贝。试试使用一下l y n x网页文本浏览器程序,如下所示:
lynx /usr/doc/LDP/system-admin-guide/sga-0.6-html/sag.html
如果想了解更多关于如何使用l y n x浏览器程序的资料,请阅读第1 3学
时教程“因特网下载与浏览”。
m v命令最普通的用法是更改文件名,如下所示:
# touch file1
# mv file1 file2
上面的命令把文件f i l e 1改名为文件f i l e 2。除了更改文件名之外, m v命令还可以用来更改
子目录名而不管这个子目录是空的还是存有文件。比如说,即使使用m k d i r命令建立了一个完
整的子目录结构,仍然可以使用m v命令更改那个新的顶层子目录的名字,如下所示:
# mkdir -p temp/temp2/temp3
# mv temp newtemp
m v命令有9个不同的参数,但是本小节只讨论其中最常用的两个,- b(备份)和- i(交互操作)。
这两个参数可以让你相当安全地使用m v命令—因为m v命令不仅可以用来更改名称,还可以
悄无声息地迅速进行文件覆盖(根本不提示你)!第一个参数- b在把某个文件或者子目录的名字
改为其他文件或者子目录已经使用过的名字的时候,将会对所有原有的文件或者子目录进行
备份,如下所示:
正如你所看到的,在没有使用- b参数的情况下, m v命令不仅仅是把文件u n o改名为文件
d e u x,还在操作过程中删除了文件d e u x。很危险吧? 现在试一试- b参数:
上面的例子显示虽然文件u n o已被改名并取代了文件d e u x,但是已经生成了文件d e u x的一
个备份,这个备份文件有一个缺省的波浪号( ~)后缀。
m v命令在执行的时候是没有命令回显的,因此应该像对待r m命令一样,给它加上一个- i
第5学时操作与搜索命令使用67
下载
参数,如下所示:
在上面的例子中,建立了两个文件,然后把文件f i l e 2改名为文件f i l e 3,并且这样做的结果
就是删除了文件f i l e 3。接着,使用了- i参数,m v命令就会询问是否真的想覆盖文件f i l e 3。如果
没有发生覆盖,即使使用了- i参数m v命令也不会要求核实。还可以把- i和- b参数一起使用,如
下所示:
# mv -bi file2 file3
现在已经学会了对文件的删除、改名和移动操作,那么怎样才能对文件进行拷贝操作
呢?
5.1.6 使用cp命令进行拷贝操作
c p命令,即拷贝命令,是用来对文件或者子目录进行拷贝操作的。这个命令有将近4 0个
命令行参数。本小节中我们不准备全部介绍这些参数,但是将学习其中几个最常用的参数的
使用方法,它们可以节省时间,减少麻烦。
第一次使用c p命令的时候,用到的可能是它最简单的形式,如下所示:
# cp file1 file2
上面的命令把文件f i l e 1拷贝到文件f i l e 2,同时f i l e 1还依然存在。但是在使用c p命令的时候
必须要小心,因为在把一个文件拷贝到另外一个文件上的时候,会有可能完全覆盖掉原来的
文件。在这一点上, c p命令和m v命令是一样的。为了说明这种情况发生的过程,请先使用c a t
命令建立三个文件,并在每个文件中加入一行文本:
# cat > file1
this is file1
# cat > file 2
this is file2
# cat > file3
this is the third file
# ls -l file*
- r w - r - - r - - 1 bball users 14 Jan 5 13 : 29 f i l e 1
- r w - r - - r - - 1 bball users 15 Jan 5 13 : 29 f i l e 2
- r w - r - - r - - 1 bball users 23 Jan 5 13 : 29 f i l e 3
现在,拷贝一个文件到另外一个文件,再检查文件的长度和新文件的内容,如下所示:
# cp file1 file2
# ls -l file*
- r w - r - - r - - 1 bball users 14 Jan 5 13 : 29 file1
- r w - r - - r - - 1 bball users 14 Jan 5 13 : 31 f i l e 2
- r w - r - - r - - 1 bball users 14 Jan 5 13 : 29 f i l e 3
# cat file2
this is file1
很明显,文件f i l e 1取代了文件f i l e 2。为了避免这类问题的发生(除非真的想覆盖那个文件),
可以像在m v命令中那样使用- i和- b参数,示例如下:
# cp -i file1 file2
cp : overwrite '; file2 '; ? n
68使用第二部分学习L i n u x操作系统的基本命令
下载
# cp -bi file1 file2
cp : overwrite '; file2 '; ? y
# ls file*
f i l e 1f i l e 2 f i l e 2 ~ f i l e 3
请注意已经被覆盖的文件f i l e 2已经有了备份。
c p命令还可以用来一次拷贝多个文件。下面的例子说明了如何把子目录t e m p d i r 1中所有的
文件拷贝到子目录t e m p d i r 2中去:
类似于r m命令,c p命令也有一个- r参数。可以使用这个参数把一个子目录拷贝到另外一个
子目录中去。举例来说,如果想把子目录t e m p d i r 1及其中的文件拷贝到子目录t e m p d i r 2中去,
请使用下面的方法:
最后, c p命令还有一个- p参数,它的作用类似于m k d i r命令中的- p参数。通常,当把存放
在几个子目录中的文件拷贝到另外一个子目录中去的时候,只有那些文件被拷贝过去了。下
面的例子就只把文件t e m p 1 f i l e 1拷贝到了子目录t e m p d i r 3中去:
1 directory , 6 files
# cp tempdir2/tempdir1/temp1file1 tempdir3
但是如果想把文件连同它的子目录结构一起拷贝过去,那么该怎样做呢?这个时候就需
要使用- p参数,如下所示:
第5学时操作与搜索命令使用69
下载
在上面的例子中,c p命令不仅拷贝了指定的文件,还建立了同样的子目录结构。
5.1.7 使用ln命令建立硬链接和符号链接
L i n u x操作系统同时支持硬链接和符号链接。L i n u x操作系统中的链接到底是怎样工作的
这一点是否了解并不重要,但是必须了解这两种形式的链接之间的区别以及在使用L i n u x操作
系统的过程中如何去使用链接。建立硬链接和符号链接都需要使用l n命令。
新术语l n命令可以建立两种形式的链接并把文件与其他的文件(包括子目录,因为在
O p e n L i n u x操作系统中子目录也是简单的文件)链接在一起。两者之间重要的区别是“硬链接”
直接链接两个同时保存在相同的文件系统上的文件。而另一方面,可以使用“符号链接”用
来在扩展到不同的文件系统上的子目录或者文件之间建立链接。硬链接还有其他方面的优势。
如果使用l n命令建立了一个硬链接,就必须在命令行中明确指定另外一个文件,然后就可以
使用这个文件来对应那个原始文件,如下所示:
会看到文件f i l e 2和文件f i l e 1是完全相同的。如果你删除了文件f i l e 1,文件f i l e 2依然存在。
如果修改了文件f i l e 1,比如添加了文本,这些修改都会反映到文件f i l e 2中;而如果修改了文
件f i l e 2,文件f i l e 1也会随之更新。虽然可以看到两个文件,每个文件的长度都是十四个字符,
但是在硬盘驱动器上只有原始文件占用了十四个字符的空间(当然,从技术角度讲会不止这几
个字符的长度,但是这取决于该硬盘分区的块长度或者是硬盘的类型)。
另一方面,虽然符号链接很有用,但是它们也存在一个不足。下面的例子说明了为什么
会这样。首先,使用l n命令的- s参数建立一个符号链接:
请注意那个从文件f i l e 2指向文件f i l e 1的箭头。它告诉你文件f i l e 2是文件f i l e 1的一个符号链
接。还要注意的是文件f i l e 2的长度比文件f i l e 1的要短。符号链接和硬链接的区别是符号链接
只不过是指向原始文件的一个a l i a s(假名)而已。如果删除了符号链接,原始文件不会发生任何
变化。而一旦你删除了原始文件,符号链接一点也帮不上什么忙:
# rm -f file1
# cat file2
cat : file2 : No such file or directory
因为原始文件—也就是文件f i l e 1,不存在了,所以也就无法通过符号链接—即文件
f i l e 2,存取其中的内容。但是符号链接比起硬链接来确实还有一个优势:可以使用一个符号
链接指向O p e n L i n u x文件系统(甚至可以是其他类型的文件系统)中的某个子目录。在下面的
70使用第二部分学习L i n u x操作系统的基本命令
下载
例子中,如果打算建立一个对子目录/ u s r / l o c a l / g a m e s的硬链接,l n命令会显示出错信息并退
出:
# ln /usr/local/games play
ln : /usr/local/games : hard link not allowed for directory
但是可以使用一个符号链接,如下所示:
# ln -s /usr/local/games play
# ls -l play
l r w x r w x r w x 1 bball u s e r s 16 Jan 5 14 : 12 play -> /usr/local/games
现在,不必键入一个向下面那么长的命令:
# cd /usr/local/games
而只需要使用:
# cd play
命令就可以进入子目录/ u s r / l o c a l / g a m e s了。
使用其他类型的文件系统(比如D O S或者Wi n d o w s分区)上的其他子目
录的符号链接可能还是很方便的。举例来说,如果从用户子目录中有一
个叫做d o s的子目录是到/ m n t / d o s / w i n d o w s / d e s k t o p的符号链接,那么就可
以使得在L i n u x操作系统和Wi n d o w s两者之间互相拷贝或者移动文件的操
作变得非常容易。比如说,假定想在用户子目录中建立一个名为d o s的链
接子目录,并且D O S文件系统已经挂装在子目录/ m n t / d o s上的话。那么首
先检查D O S文件系统确实已经挂装上了,然后再使用l n命令按照下面的方
法建立一个符号链接,如下所示:
# ln -s /mnt/dos/windows/desktop dos
请阅读第2 2学时教程中关于安装其他文件系统的详细资料。
看到这里,已经学习了使用命令行的方法。如果对通过更为图形化的界面对文件进行操
作的方法比较熟悉的话,应该会喜欢上后面将要介绍的m c程序。
5.1.8 使用Midnight Commander程序处理文件
m c程序的全称是Midnight Commander,它是一个对文件进行管理的图形化界面(如图5 - 1
所示)。它是一个可视化的s h e l l(将在下一学时教程“使用s h e l l”中学习到更多关于s h e l l的知
识)。如果想运行m c命令,请在命令行上键入下面的内容:
# mc
本小节不准备讨论m c程序所有的细节。下面是它的一些主要特点:
• 提供了同时对两个子目录的可视化接口
• 允许使用鼠标操作对子目录中的文件进行浏览
• 允许带有对话框、鼠标、键盘和功能键的菜单驱动的文件操作
• 有一个开放的命令行允许使用s h e l l中的命令
• 使用鼠标操作执行命令
• 具备扩展的、内建的超文本屏幕帮助画面
• 仿真并支持l s、c p、l n、m v、m k d i r、r m d i r、r m、c d、p w d、f i n d、c h o w n、c h g r p以及
第5学时操作与搜索命令使用71
下载
t r e e命令
• 可以比较子目录中的内容
• 使用定制菜单,便于建立自己的命令
• 可以使用网络链接进行t e l n e t或者F T P操作(参见第1 3学时教程)
• 提供鼠标操作的文件解压缩操作(参见本学时教程后面的“使用g z i p命令压缩文件”一
节)
• 当L i n u x文件系统配置有删除恢复支持功能时,可以对被删除的文件进行删除恢复操作
Midnight Commander是一个用来对文件进行管理和对子目录进行切换的简单易用的工具
程序。必须花费一些时间去学习这个程序的使用方法,但是如果曾经使用过类似的文件管理
界面,那么你的感觉将会是宾至如归。
5.2 搜索文件
本小节将介绍复杂的通配符、即规则表达式的使用方法以及一些使用g r e p类的程序进行
文件搜索的小例子。如果能够掌握并使用这些表达式,也就掌握了可以反复运用的精细的查
询技巧,在进行工作的时候就会节省很多的时间和精力。而在学习过程中付出的代价会在使
用L i n u x操作系统的日子里给你以满意的回报。
5.2.1 什么是规则表达式
新术语“规则表达式”是使用特殊的语法对字符串(除非是在对文件名进行搜索,字符串一
般都在文件的文本之中)进行匹配的字符串格式。另外还有一种扩展规则表达式,它可以在搜
索模式字符串中使用额外的操作符。但是两者之间的区别—对语法来说这很重要——应该
不会使你对学习如何构造那些能够与你希望查询的内容精确地匹配的字符串格式的方法打退
堂鼓。在文件中对某些文本进行查询的时候,使用规则表达式很重要;而在执行可能会造成
意外损失的任务(比如在系统中对多个文件进行删除操作)的时候,使用规则表达式就更为关键
了。
可以仅仅使用一个很小的格式字符集就构造出无数的规则表达式。表5 - 1就是这些格式字
符的一个简短的清单。从以前学习过的例子中至少应该已经熟悉了其中的一个(星号“ *”)。
72使用第二部分学习L i n u x操作系统的基本命令
下载
图5-1 Midnight Commander
的可视化s h e l l显示出来
的L i n u x文件操作命令
图形界面
表5-1 常用规则表达式
表达式匹配
* 任意字符
?或者. 一个字符
{ x } 前导字符x个
{ x , y } 前导字符至少x个,但是不超过y个
{ x , } 前导字符至少x个
( xxx ) |
| ( XXX ) 字符串x x x或者X X X
[ xxx ]或者[ x-x ] 在方括号中的字符范围内中的某个字符
[ XYZ ]+ X、Y\Z至少一次
\ x ? 或\等符号字符
^ pattern 一行开头的字符排列形式
$ pattern 一行结尾的字符排列形式
上面只是一个格式字符的简明清单。如果你想了解更多的详细资料,你可以阅读e d命令
的使用手册页(e d命令将在第1 4学时教程“文字处理程序”中讨论)。现在举几个使用了不同格
式字符的简单例子。
星号在查找对任意字符的匹配时非常有用。例如,如果想在子目录中查找全部扩展名
为. t x t的文本文件,可以使用下面的方法。
# ls *.txt
1 4 d a y s . t x t 9 6 h o u r s . t x t d a t a l o g . t x t d a t e b o o k . t x t d a y 6 7 . t x t
但是想找出子目录中所有的文件名中带有数字的文件的时候该怎么办呢?可以试试在l s命
令行中使用字符串的多个字符匹配的办法,如下所示:
很明显,上面显示的并不是你所希望的结果,因为这个多重搜索输出了许多重复的文件
名。如果想准确地查找到想要的文件,就需要使用规则表达式来告诉l s命令列出文件名中带有
数字的任何一个文件。如下所示:
# ls *[ 0123456789 ]*
0 0 0 1 f i l e . 0 0 0 9 3 2 d a y s . m s g d a y 6 7 . t x t
0 8 1 0 0 0 9 7 . d b 9 6 h o u r s . t x t m e s s a g e . 7 6
1 4 d a y s . t x t b a c k u p 0 0 1 . f i l e p h o n e l o g . 111 5 9 7
这样就显示出了全部文件名中带有数字的文件,因为已经指定一个字符范围,对上面的
例子来说就是搜索字符格式串中的数字。还可以简化这个规则表达式,这样采用短一点儿的
表达式就可以完成同样的操作,如下所示:
# ls *[ 0 - 9 ]*
0 0 0 1 f i l e . 0 0 0 9 3 2 d a y s . m s g d a y 6 7 . t x t
0 8 1 0 0 0 9 7 . d b 9 6 h o u r s . t x t m e s s a g e . 7 6
1 4 d a y s . t x t b a c k u p 0 0 1 . f i l e p h o n e l o g . 111 5 9 7
在表达式中如何指定搜索格式字符串的方式是很重要的。如果只想列出那些文件名以数
字结尾的文件,可以使用下面的方法:
# ls *[ 0 - 9 ]
第5学时操作与搜索命令使用73
下载
0 0 0 1 f i l e . 0 0 0 9 m e s s a g e . 7 6 p h o n e l o g . 111 5 9 7
如果只想列出那些文件名以数字开头的文件,可以使用:
# ls [ 0 - 9 ]*
0 0 0 1 f i l e . 0 0 0 9 0 8 1 0 0 0 9 7 . d b 1 4 d a y s . t x t 3 2 d a y s . m s g 9 6 h o u r s . t x t
下面是个有趣的练习:如果只想列出那些文件名中间有数字或者那些文件名两头有数字
的文件该怎么办呢?试试下面的方法:
# ls *[ -a-z ]* [ 0-9 ]*
b a c k u p 0 0 1 . f i l e d a y 6 7 . t x t
# ls [ 0-9 ]*[ a-z ]*[ 0-9 ]
0 0 0 1 f i l e . 0 0 0 9
最后,当需要在格式字符串中含有格式匹配字符时又该怎么办呢? 很简单!使用反斜线引
导这个字符就可以了,如下所示:
# ls *\?*
c a t h y ? . m e s s a g e
正如你所看到的,使用规则表达式需要多加练习,但是你的付出会有好的回报的。可以
使用其他的表达式试试看能否得到和本小节中给出的例子相似的结果。
5.2.2 使用grep命令在文件内进行搜索
本小节介绍g r e p命令家族。将会学到g r e p、e g r e p、和f g r e p等命令。如果想使用这几个命
令,就必须掌握前面讨论过的格式匹配技巧。需要使用这几个命令在文件中进行查找并抽出
文本。这几个程序命令中的每一个都会查找文件的每一行。可以搜索一个文件或者一组文件。
g r e p命令家族中的各个命令基本上都差不多,都有二十来个不同的命令行参数。它们真
正的区别在于e g r e p命令使用了稍微不同的语法进行格式匹配,而f g r e p命令使用的是固定字符
串。将看到每个命令使用它的一些常见的参数进行操作的例子。如果希望了解这几个程序在
文本格式匹配方面的细节,请阅读g r e p命令的使用手册页。
为了说明每个程序的搜索格式语法的不同,将使用由Matt We l s h编写的《L i n u x基本安装
指南》(从站点: h t t p : / / m e t a l a b . u n c . e d u / L D P,或者O p e n L i n u x系统子目录/ u s r / d o s / L D P中可以
找到这本书)这本书,对这本书的内容按照不同的匹配格式进行查找。例如,如果想在这本书
中找出所有以数字开头的行,可以使用下面的语法:
可以看到g r e p命令和e g r e p命令返回了搜索结果(只留了四行表示一下,其他的都省略
了)。注意, f g r e p命令不能处理规则表达式。在f g r e p命令中必须使用固定字符串格式,如
下所示:
74使用第二部分学习L i n u x操作系统的基本命令
下载
# fgrep friend guide.txt
Large extent by the window manager . This friendly program is in
copy Linux from a friend who may already have the software , or share
( Unfortunately , the system was being unfriendly .)
现在使用e g r e p命令在文件中查找所有包含字符串( b )的行:
# egrep " \(\) " g u i d e . t x t
( see section 1.8 for a list of compatible boards ), or (b) there is an
connect to the network , or (b) you have a " dynamic " IP address,
可以看到文件中有两行文本中有字符串( b )。现在来看看使用g r e p命令进行搜索会有什么
结果:
# grep " \(\) " g u i d e . t x t
This is version 2.2.2 of the book , " Linux Installation and Getting
to PostScript printers . This document was generated by a set of tools
from LaTeX source , so there may be a number of formatting problems .
This is not the " o fficial " version of the book ! Please see
. . .
哎呀,不是想要的,对吧?正如你所看到的, g r e p命令和e g r e p命令使用的语法是不一样
的。但是可以使用一个比较简单的方法:
# grep " (b) " g u i d e . t x t
( see Section 1.8 for a list of compatible boards ), or (b) there is an
connect to the network , or (b) you have a " dynamic " IP address,
上面的搜索格式串可以用在g r e p命令和f g r e p命令中。如果在e g r e p命令中使用了这个格式
串,就会得到与在g r e p命令中使用扩展规则表达式(每行都有一个字符串( b) )同样的结果。
每个g r e p命令程序都能够接受几乎相同的命令行参数。其中常用的一个是- n,即显示行号
参数。因为能够看到文件中到底有哪些行里包含有匹配的字符串,所以它是非常方便的。这
个例子适合每个g r e p命令程序:
# egrep -n " friend " g u i d e . t x t
1242 : large extent by the window manager . This friendly program is
1942 : copy Linux from a friend who may already have the software , or
5161 : ( Unfortunately , the system was being unfriendly .)
可以看到在第1 2 4 2、1 9 4 2和5 1 6 1行找到了格式字符的匹配。这些程序的另外一个特点是
在开始每次搜索时不必重新输入搜索字符格式串。举个简单的例子,如果需要在文件中反复
搜索不同的单词,可以先把这些单词放在一个文件中供g r e p命令使用。首先,要建立一个文
本文件,然后使用- f参数来指定这个文件,如下所示:
因为同时还使用了- n显示行号参数,所以必须注意把它放在- f参数之前,否则g r e p命令就
会显示出错信息,说明它无法找到文件n,然后退出运行。
第5学时操作与搜索命令使用75
下载
可以使用g r e p命令的- F参数使它能够模仿f g r e p命令的执行情况;或者使用- E参数模仿
e g r e p命令的执行情况。还可以在系统上找到一个独特的g r e p命令家族成员, z g r e p命令,可以
使用它来搜索压缩文件,而这正是我们下一小节的话题。
5.3 压缩和解压缩文件
本小节介绍对文件进行归档和压缩操作的基本知识。关于如何使用本小节介绍的这些程
序进行系统管理或者进行系统备份的详细资料请阅读第2 3学时教程。我们下面介绍怎样才能
建立自己的档案文件并节省磁盘空间。
5.3.1 使用磁带文件归档命令建立档案文件
t a r磁带文件归档命令程序出现在还没有软盘驱动器、硬盘和光盘驱动器的计算机早期阶
段。那时软件的发行和备份都需要大卷的磁带,计算机上运行的头几个程序中就得有一个是
磁带的阅读程序。随着时间的推移, t a r命令证明了它自己在运送计算机文件方面非常方便的
优点,而许多用于L i n u x操作系统的程序就是打包为t a r档案文件的形式( O p e n L i n u x操作系统
C D - R O M光盘使用r p m程序来打包文件,请阅读第2 2学时中的内容)。
使用t a r命令可以生成一个包含有多个子目录和多个文件的档案文件。在系统上安装的t a r
命令版本还支持一个- z参数,这样就可以使用g z i p程序来压缩文档( g z i p命令在本学时教程后面
讨论)。
t a r命令有非常非常多的参数,但是使用起来并不困难。可以快速而又简单地为任何需要
的子目录生成档案文件。
首先,我们来建立一个有三个文件的子目录,再建立一个有另外三个文件的子目录,如
下所示:
现在已经有了一个子目录和其中的文件,我们使用这个命令的c(生成)和f(文件)参数来生
成一个t a r档案文件:
# tar cf mydir.tar mydir
# ls -l *.tar
- r w - r - - r - - 1 bball u s e r s 10240 Jan 5 15 : 01 mydir. t a r
请注意原来的子目录并没有发生变化。在缺省的情况下, t a r命令不会删除原来的子目录
76使用第二部分学习L i n u x操作系统的基本命令
下载
和文件。如果真的想这么做的话,可以使用它的- - r e m o v e - f i l e s参数,但是我们不推荐这样的
做法。如果想看看命令执行的过程,可以使用v参数,如下所示:
t a r命令在进行操作的时候就会把正在添加到档案文件中去的子目录和文件的文件名显示
出来。这是否意味着必须把子目录中所有的文件都进行归档呢?不是!可以使用w参数,即交
互参数,这样t a r命令在它执行的过程当中会询问是否想加入每个文件。当想有选择地备份内
容不多的子目录的时候,这样就非常地方便,如下所示:
在上面的例子中,没有把文件f i l e 1、f i l e 3、和文件f i l e 2 2归档。但是如何保证这一点呢?
办法是使用t a r命令的两个参数, t参数列出档案文件中的内容, f参数定义操作所使用的t a r档
案文件,如下所示:
需要注意的是,如果参数的顺序放错了(就象学习g r e p命令时看到的例子那样), t a r命令会
显示出错信息并退出。现在已经了解了如何建立档案文件和查阅档案文件中的内容,我们下
面来看看如何来释放整个的档案文件或者其中的某一个文件。如果想释放其中所有的文件,
可以同时使用- x释放参数和- f。为了了解命令执行的过程,我们还可以再加上- v参数:
如果只是想从档案文件中释放几个文件的话,可以再次使用w参数:
第5学时操作与搜索命令使用77
下载
在上面的例子中,查看了档案文件并交互地释放了文件。如果只想从档案文件中释放某
一个文件,可以在命令行中指定这个文件。作为示例,我先删除了原始的m y d i r子目录,然后
使用一个空的子目录进行如下操作:
# tar xf mydir.tar mydir/mydir2/file23
# tree mydir
m y d i r
` - - mydir2
` - - file23
1 directory , 1 file
正如你所看到的,只有一个文件被释放出来。但是千万要小心!虽然t a r命令不会覆盖整
个的子目录,但是它会覆盖掉那些有着相同文件名的文件。
在开始建立档案文件之前先多试用一下t a r命令。需要试用的其他功能还有从档案文件中
有选择地删除某个文件或者往一个现有的档案文件中再添加一个文件,而这些操作使用下面
将要介绍的c p i o程序也能完成。
你可以使用其他的程序,如B R U - 2 0 0 0或者t a p e r脚本程序来备份你的
系统或者你选定的文件和子目录。O p e n L i n u x操作系统也可以通过c r o n日
程安排来自动进行文件的归档整理工作。请阅读第2 3学时教程中关于
B R U - 2 0 0 0和t a p e r脚本程序的内容;请阅读第2 4学时教程中关于c r o n任务
计划的内容。
5.3.2 建立cpio档案文件
c p i o命令可以从t a r或者c p i o档案文件中拷入或者拷出文件。因为c p i o命令和t a r命令兼容,
所以本小节我们将不再讨论它如何工作的细节,但是这个命令具备一些t a r命令没有的功能,
如下所示:
• 支持c p i o和t a r两种档案文件格式
• 支持许多老式磁带数据格式
• 能够通过一个管道(将在6学时教程中学习到)读取文件的文件名
只有很少(如果有的话)的L i n u x软件包是以c p i o格式发行的。这主要是因为在因特网上查
找新软件时根本碰不到任何c p i o档案文件。但是如果对c p i o命令的详细情况感兴趣的话,
可以阅读它的使用手册页。在第2 3学时教程中有一个如何使用c p i o命令对指定文件进行
备份的例子。
5.3.3 使用gzip命令压缩文件
g z i p命令是用来压缩文件的。这个程序不仅可以用来压缩大的较少使用的文件以节省磁盘
空间,还可以和t a r命令一起构成可能是L i n u x操作系统中最流行的压缩文件格式。在因特网上
寻找新的L i n u x软件时,经常会遇到. t g z或. t a r. g z格式的文件。
还会发现在子目录/ u s r / d o c / H O W TO中的许多文件也都是使用g z i p命令压缩的。这可以节
省很多的空间。根据g z i p命令的使用手册页中自由软件基金会的人们的统计, g z i p命令对文本
文件有6 0%~7 0%的压缩率。
78使用第二部分学习L i n u x操作系统的基本命令
下载
g z i p命令很容易使用。如果想压缩某个文件或者磁带档案文件,请输入下面的内容:
# gzip mydir. t a r
在缺省的状态下, g z i p命令会压缩文件、再加上一个. g z扩展名、然后删除掉原来的文件。
如果想解压缩文件,可以使用g z i p命令的对应程序命令g u n z i p或者g z i p命令的- d解压缩参数。
必须保证这个用于解压缩的文件有. g z(或者. Z、- g z、. z、- z、或者_ z)扩展名,否则g z i p命令和
g u n z i p命令都会显示出错信息。如果想使用自己的扩展名,可以使用- S后缀参数,如下所示:
# gzip -S .gzipped mydir. t a r
g z i p命令还可以处理用z i p命令、c o m p r e s s命令和p a c k命令压缩的文件包。如果想在压缩
或者解压缩的过程中看到更多的信息,可以使用- l列清单参数看到文件在被压缩或解压缩的时
候的文件长度。在前一个例子中,压缩完子目录m y d i r之后,可以使用g z i p命令按照下面的方
法得到有关的数据:
# gzip -l mydir. t a r. g z
compressed uncompr . ratio uncompressed_name
239 10240 97.9% mydir. t a r
最后,g z i p命令还有一个很有用的参数- t,可以用来测试压缩文件的完整性。如果文件正
常,g z i p命令不会给出任何显示。如果想看到O K这两个字母,可以在测试某个文件时使用- t v
参数。
5.3.4 使用compress命令压缩文件
c o m p r e s s命令就象它的文件名那样,就是用来压缩文件的。这是U N I X世界中出现得比较
早的一个压缩程序。
使用c o m p r e s s命令生成的文件传统上都有一个. Z扩展名。如果想压缩某个文件,请输入下
面的内容:
# compress file
如果想解压缩某个文件,请输入下面的内容:
# uncompress file.Z
像使用g z i p命令的时候一样,必须给出一个带有. Z扩展名的文件名,否则c o m p r e s s命令显
示出错信息。
对其他的L i n u x 的压缩方法感兴趣吗?请在系统上寻找z i p 、
u n z i p、z i p c l o a k、z i p n o t e、z i p s p l i t、z l e s s、z c a t、z n e w、z m o r e、z c m p、
p a c k、c o m p a c t、s h a r、u n s h a r或者z f o r c e程序命令。可能不会发现
所有这些程序命令都安装了,但是可以从喜欢的L i n u x站点上(比如
h t t p : / / m e t a l a b . u n c . e d u / p u b / L i n u x)找到这些程序。
5.4 课时小结
本学时教程介绍了一些基本的O p e n L i n u x操作系统中用来对文件或者子目录进行建立、删
除、移动、拷贝、保存、以及压缩操作的命令。在工作中学会更多的关于O p e n L i n u x操作系统
的知识的时候,将会在自己的基础知识上建立起更复杂和更适用的命令。
第5学时操作与搜索命令使用79
下载
5.5 专家答疑
问:有没有其他的用于O p e n L i n u x操作系统的文件压缩程序?
答:有。使用b z i p 2命令,可能会得到更好的压缩效果。这个程序使用了与g z i p命令不同
的算法,存放在子目录/ b i n中供O p e n L i n u x操作系统使用。可以通过它的文件后缀. b z 2识别它
的档案文件。
问:曾经见过一些文件带有后缀. u u,不知道它们是不是被压缩的文件?
答:不是。一个带有后缀. u u的文件是从二进制格式用u u e n c o d e命令转换成平常的文本文
件的。如果想把它转换回这个文件原始的格式,需要象下面这样使用u u d e c o d e命令:
uudecode somefile.uu
这些命令是供有些用户准备把图像、程序或者其他二进制格式的文件通过电子邮件传送
或者张贴在某个U s e n e t新闻组(关于U s e n e t新闻的详细资料请阅读第1 2学时教程“配置因特网
新闻”)中的时候用来做准备工作的。
问:怎样才能够查看某个二进制文件中的内容?如果使用c a t命令或者l e s s命令,只看到许
多的乱码。
答:请试试使用s t r i n g s命令。如果想了解如何在l e s s中使用s t r i n g s命令,请阅读第6学时教
程“使用s h e l l”。
问:怎样才能从一个磁带档案文件中了解关于每个文件更多的信息?我知道t参数可以显
示出文件或者子目录的名字。
答: 在t a r命令行上使用v参数和t参数能够看到一个磁带档案文件中的每个文件的权限、
所有者、用户组、文件长度、建立的日期、时间以及名称。
5.6 练习题
1. tar命令可以在进行归档操作的同时进行文件压缩。使用t a r命令对一个实验子目录生成
一个压缩的磁带档案文件。
2. OpenLinux中还有几个其他的压缩程序。它们的名字是什么?(提示:可以试试a p r o p o s
命令)
3. 怎样才能找到O p e n L i n u x操作系统发行版本中全部的压缩文件?
80使用第二部分学习L i n u x操作系统的基本命令
下载

linux 操作命令

发贴之前先注意看下前面的帖子,已经发过了。

TOP

linux 操作命令

精神可嘉,但还是要注意下~~~

TOP

返回列表 回复 发帖