Linux教程第5章文件管理工具.doc_第1页
Linux教程第5章文件管理工具.doc_第2页
Linux教程第5章文件管理工具.doc_第3页
Linux教程第5章文件管理工具.doc_第4页
Linux教程第5章文件管理工具.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 文件管理工具实验目的 初步了解正则表达式 学习如何排序文本文件 学习如何搜索文件或目录 学习如何查找文本文件的内容 学习如何搜索某个Linux命令存放在何处 学习如何压缩、解压和打包文件 学习使用gzip、gunzip、sort、find、where、which、grep、rpm等命令实验指导5.1 正则表达式正则表达式(regular expression)定义了由一个或多个字符串组成的集合。正则表达式被广泛应用于Linux和许多其他开源编程语言中。如我们可以在vi编辑器或Perl脚本中使用它们,而且不论它们出现在哪里,其基本原理都是一样的。在正则表达式的使用过程中,一些特殊字符是以特定的方式来处理的。最常使用的特殊字符如表5-1所示。表5-1字 符含 义指向一行的开头$指向一行的结尾.任意单个字符方括号内包含一个字符范围,其中任何一个字符都可以被匹配,例如字符范围a-z,或在字符范围前面加上符号表示使用反向字符范围,即不匹配指定范围内的字符如果你想将上述字符用作普通字符,就需要在它们前面加上字符。所以,如果你想使用$字符,只需要简单的将它写为$。在方括号中还可以使用一些有用的特殊匹配模式,如表5-2所示。表5-2匹配模式含 义:alnum:字母与数字字符:alpha:字母:ascii:ASCII字符:blank:空格或制表符:cntrl:ASCII控制字符:digit:数字:graph:非控制、非空格字符:lower:小写字母:print:可打印字符:punct:标点符号字符:space:空白字符,包括垂直制表符:upper:大写字母:xdigit:十六进制数字另外,如果指定了用于扩展匹配的-E选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则,如grep(该命令是搜索指定文件中,有匹配的行)命令,我们就需要在这些字符之前加上字符。如表5-3所示。表5-3选 项含 义?匹配是可选的,但最多匹配一次*匹配0次或多次+匹配1次或多次n匹配n次n,匹配n次或n次以上n,m匹配次数在n到m之间,包括n和m正则表达式看上去比较复杂。要掌握正则表达式的最简单方法就是多进行一些实验。例:下面例子使用grep命令,查找以字母5结尾的行。我们需要使用特殊字符$。$ grep 5$ studentsJohnJohnsen2003 503555NabeelZhang2007 434555例:下面的例子是查找以字母n结尾的单词。单词之间是以空格或制表符隔开的,因此需要使用方括号括起的特殊匹配字符来完成这一任务,使用:blank:,它用来测试空格或制表符。$ grep n:blank: studentsJohn Johnsen 2003 503555John Johnsen 2005 301999Jamie davidson 2006 515001例:下面例子用扩展grep模式来搜索正好只有10个字符长的全部由小写字母组成的单词。通过指定一个匹配字母a到z的字符范围和一个重复10次的匹配来实现这一工作。$ grep -E a-z7 studentsJamie davidson 2006 5150015.2 排序文件我们可以使用sort命令来排序文本文件。排序按照大小顺序可以分为递增排序和递减排序。1、3、5、7、9为递增排序。9、7、5、3、1为递减排序。排序一般根据某个字段或者部分字段的组合作为排序关键字,字段之间以空格或TAB字符分开。 命令语法: sort options filename-list 功能: 对文件列表中的文本文件中的内容按行排序,若不带-o选项,排序后的结果在标准输出设备上输出。常用选项:-b忽略字段前的空格符或TAB。-d根据常用的字母表排序,忽略除字母、数字、空格以外的字符。-f认为大小写字母是相同的 -k n1,-n2指定从第n1个字段开始、第n2个字段结束(如果没有指定n2,则以行的末尾为结束)为关键字。-o filename 将排序好的内容输出到filename文件中而不是标准输出。-r 以逆序排序。 -u重复行仅输出一次。例:下面的命令对文件students进行排序,使得sort第1遍按照整个行排序(-k 1),第2编按照第5字段(-k 5)排序。$ cat studentsJohn Johnsen 2003 503555Hand Kitt2007 503444David Kendall 2004 229111John Johnsen 2005 301999Kelly Kimberly 2005 555123Maham Wang 2004 713888Jamie davidson 2006 515001Nabeel Zhang 2007 434555$ sort k 1 k 5 studentsDavid Kendall 2004 229111Hand Kitt2007 503444Jamie davidson 2006 515001John Johnsen 2003 503555John Johnsen 2005 301999Kelly Kimberly 2005 555123Maham Wang 2004 713888Nabeel Zhang2007 4345555.3 查找文件有时候我们需要查找特定的文件或命令是否保存在我们的文件系统结构中。可以使用find、whereis 和 which 来搜索文件或命令。 5.3.1 find 命令我们可以使用 find 命令来查找符合表达式的目录列表。find 命令使用递归的方式来搜索文件和目录。这个命令的功能是查找文件,它非常有用,但Linux初学者常常觉得它不易使用,这不仅仅是因为它有选项、测试和动作类型的参数,也由于其中一个参数的处理结果可以影响后续参数的处理。命令语法: find directory-list expression功能:搜索目录列表中的目录,找出符合表达式(第二个参数)描述的文件。表达式可以由一个或者多个标准组成。表达式中的参数选项:-exec CMD;如果命令(CMD)的退出状态为0(即该命令返回值为真),则该文件符合要求;使用转义分号(;)可以终止命令。命令中的一对花括号()代表查找到的文件名。-inum N搜索inode 为N的文件。-links N搜索有N个链接的文件。-mount不搜索挂载文件系统的目录。-name pattern搜索文件名匹配pattern的文件。-newer file搜索修改时间在file之后的文件(即比file新的文件)。-ok CMD和-exec相同,执行CMD时需要确认。-perm octal搜索访问权限等于octal(八进制数字)的文件。-print显示符合要求的路径和文件名。-size Nc搜索文件大小为N块。字符c用来确定块的大小,默认为512个字节。+N表示大小超过N块的,-N就是小于N块的。-type C文件的类型为C,C可以是一个特殊类型。最普通的类型是d(目录)和f(普通文件)。其他可用的类型请参考使用手册。-user username搜索所有权为username的文件。( expr )当表达式为真结果为真;表达式可以用OR和AND组合。 ! expr 取反,当表达式为假时结果为真。-amin 分钟 搜索在指定分钟内被存取的文件。 -anewr 文件 搜索最近被存取的文件。 -atime 小时 搜索几小时内被存取的文件。 例: find 最常用的功能是在一个或多个目录中搜索一个文件。下面的命令在主目录下搜索yk.gif,并显示文件的路径。如果在多个目录中找到目标文件,那么每一个包含文件的目录都会显示出来。$ find -name yk.gif print例:下面的命令是搜索主目录下文件名为sample或者以.old结尾的文件,显示他们的绝对路径,并将它们删除。括号用来标明需要匹配的表达式,在(和-o前后必须要有空格。这个命令没有提示直接删除匹配的文件;如果删除前要提示,用参数-ok替换-exec。这里的-o为OR(或)操作$ find ( -name sample o name *.old ) print exec rm ;例:在当前目录下搜索比文件world要新的,并且是普通文件。$ find . newer world type f -print5.3.2 whereis命令我们可以使用whereis命令来搜索系统中是否有我们指定的命令或文件,以及它所在的目录及路径。也可以使用wheris命令来搜寻到我们所要命令的说明。 命令语法: whereis options filename-list 常用选项:-b只搜索执行文件。-m同时搜索命令的说明文件。-s仅搜索原代码文件。-u搜索不包含指定类型的文件。 -B 目录在指定的目录下搜索执行文件。 -M 目录在指定的目录下搜索说明文件。 -S 目录在指定的目录下搜索原代码文件。 例:下面的例子,使用 whereis ftp 来搜索ftp 服务器的所在目录,使用 whereis b cat 来搜寻cat命令的所在目录。作者的Linux系统显示如下结果。$ whereis ftpftp: /usr/bin/ftp /usr/share/man/man1/ftp.1.gz$ whereis b catcat: /bin/cat5.3.3 which 命令如果系统中有多个版本的命令,which命令告诉我们当键入某个命令执行时,shell到底调用了哪个版本的命令。我们也可以用which命令来搜索指定的文件,而which命令是根据环境变量$PATH中所列出的路径来搜索符合要求文件的。 我们使用 which ps 命令来在环境变量$PATH所指定的路径中搜索ps文件。 $ which ps/bin/ps5.4 搜索文件内容Linux有功能强大的搜索文件内容的工具,可以查找文本文件中包含特定的表达式、字符串或者模式的行。比如,你有一个文件包含公司职员的记录,一条记录一行,你想搜索关于zhang的记录。搜索文件内容的命令有 grep, egrep 和fgrep。下面对grep命令作简要描述。命令语法:grep options pattern filename-list功能: 按照给定的模式、字符串或表达式搜索文件列表中的文件。如果没有文件列表,则从标准输入读入数据。常用选项:-c仅输出匹配的行数目,而不是输出匹配的行-E启用扩展表达式-i在匹配的过程中忽略字母的大小写-l仅输出有匹配行的文件名,而不输出真正的匹配行-n匹配时同时输出行号-s不显示错误信息-v打印出不匹配的行我们使用find命令在文件系统中搜索文件,而使用grep命令在文件中搜索字符串。一种常见的用法是在使用find命令时,将grep作为传递给-exec的一条命令。例:下面的命令,搜索students文件中包含“2005”的行,匹配的行在标准输出上输出,并输出行号。$ grep n 2005 students例:下面的命令显示students文件中行首字母为B到E间的内容。表示行首。$ grep B-E students在“正则表达式”这一节内容中我们已经有多个grep命令的例子,请读者参阅。5.5 命令记录在终端键入的命令都保存在历史记录中。shell环境变量HISTSIZE表示在历史列表中最多保存命令条目数,您可以用命令echo $HISTSIZE得到这个值。当你登录的时候,系统会从历史文件初始化一个历史命令的列表。shell环境变量HISTFILE可以用来设置这个历史文件;默认路径为/.bash_history。当你退出shell时候,历史命令列表将会保存到历史文件。历史文件可以根据shell环境变量的设置,采取追加或者覆盖的方式。我们可以使用 history 命令来读取最近使用的命令。 命令语法: history options filename常用选项:-a filename将当前会话新增加的命令添加到历史文件中。如果指定了filename,则使用filename作为历史文件。 -c清空历史命令列表。 N仅显示历史命令列表中最后N条记录。 -w filename把当前列表写入历史文件中去(覆盖当前历史文件内容),如果指定filename,则使用该文件为历史文件。例:使用 history 10 来显示最近 10 次所使用的命令。$ history 10命令fc允许你修改和执行历史命令列表中的命令。使用 fc l 来显示历史的命令并且显示编号。bash下面的history扩展允许你从历史命令列表中获得部分命令字,插入到当前的命令行中。这便于你重复以前的命令,修改之前输入的错误命令。history的扩展通过引进“!”字符实现。如果“!”之后是空格字符、TAB、“(”、“=”或回车,则是无效的。为了执行history的扩展,先从历史命令列表中选择一个命令行,从中选择你要的单词,然后在所选单词上应用操作。事件通过事件指定符选定。表5-4列出了常用的事件指定符。表5-4事件指定符意义例子!N历史命令列表中第N个事件!10命令列表中第10个命令!-N当前行之前的第N个!-66行之前的命令!上一次执行的命令!上一次执行的命令!string最近用到的以string开始的命令!grep最近使用的以字符串grep开始的命令(一般是最后使用的grep命令)!?string?最近使用的包含string的命令!?cut?最近使用包含cut字符串的命令例:下面我们使用常用的事件指定符来执行历史列表中的命令。!命令执行上一次执行的命令。!?是最近执行的包含字符的命令。!?course?是最近执行的包含字符串course的命令。!750执行历史命令列表中第750条命令,!ma命令执行最近的以字符串ma开始的命令(如make clean命令)。$ history | tail 10$ !history | tail -10$ !?courses?cd courses/cs/2007/linux$ !75ls -al$ !mamake clean5.6 压缩文件、解压缩文件与打包文件 Linux 操作系统不仅有一些压缩、解压缩命令,而且还支持对压缩文件的多种操作。这些命令中包括UNIX系统中的文件压缩命令和文件解压缩工具,如表5-5。在这里我们仅介绍部分GNU下的工具。表5-5 文件压缩工具压缩文件工具解压缩文件工具扩展名compressUncompress.ZpackUnpack.ztar+gzip tar+gzip.tgzgzip gzip d (或 gunzip).gzzip Unzip.zipbzip2 bzip2 d .bz25.6.1 gzip 命令gzip可以用来压缩文件。该命令首先读取文件的内容,然后分析内容中重复的模式,最后采用莱姆培尔-兹夫编码(Lempel-Ziv Coding)规则,用较少的字符集去替换它们得到压缩后的文件。压缩文件和原文件的内容完全不同了。压缩文件包含非打印的控制字符,因此压缩文件显示在屏幕上将是一堆控制字符,完全没有意义。压缩后的结果会存在一个文件中,使用原来的文件名加上.gz作为扩展名。压缩文件保留原文件的访问及修改时间、所有权和访问权限。原文件将会从文件结构中删除。命令语法:gzip options filename-list常用选项:-c 压缩后文件输出至标准输出设备,而不更动源文件。 -d 解压缩文件。 -f 压缩和解压缩时,强制重写已存在的文件。 -l 显示压缩文件字段信息: compressed size: 压缩文件的长度 uncompressed size: 压缩前文件的长度 ratio: 压缩率(如果未知则为0.0%) uncompressed_name: 压缩前的文件名 -n 当压缩文件时,不储存原来的文件名称及时间。 -N 压缩文件时,储存原来的文件名称及时间。 -r 递归处理目录结构。 -t 测试压缩文件。 -v 显示每个压缩文件的名字和压缩率。-# #为1到9,数值越大压缩率越高。根据#的值控制压缩的速度(压缩比率),默认值为 6。 -best 最佳压缩。 -fast 快速压缩。 我们使用命令gzip bash.txt来压缩bash.txt文件,它的压缩后文件名会变成 bash.txt.gz。 我们使用命令gzip d bash.txt.gz 来解压缩文件,还原成原来的文件bash.txt。 5.6.2 gunzip命令 gunzip执行解压缩的操作,把压缩文件还原到原始文件。命令gzip使用-d 这个选项也可以执行解压缩。和gzip命令类似,gunzip也使用 -c、-f、-l 和 r等选项完成相应的操作。我们使用命令gunzip bash.txt.gz 来解压缩bash.txt.gz 文件。 使用命令 gunzip l *.gz 来显示所有压缩文件的压缩信息。 我们也可以使用zipinfo命令来显示压缩文件的信息,命令zipinfo v g.zip 显示g.zip 的详细信息5.6.3 zcat命令zcat命令把压缩文件解压后输出到标准输出设备。zcat可以显示用gzip 或者compress压缩的文件的内容。这个命令首先把文件解压,然后显示文件内容,压缩文件保持不变。zmore命令可以一屏一屏地显示压缩文件的内容。zcat和zmore命令都允许指定一个或多个文件作为参数。下面是zcat的简要描述 :命令语法: zcat options filename-list常用选项:-r递归访问目录结构,显示子目录中的文件。-t检查压缩文件的完整性。例:下面的命令,使用 zcat命令将压缩文件best.c.gz 和 conb.c.gz解压,并将它们输出到goodman.c的文件中。$ zcat best.c.gz conb.c.gz goodman.c5.6.4 用tar命令打包文件我们可以用tar命令将多个文件打包成一个备份文件或从备份文件中取出文件命令语法:tar optionsfilename-list 常用选项:-c 建立新的备份文件。-r 将文件附加在备份文件后面。 -f archname 用archname作为存档或恢复文件的备份文件名;默认是/dev/mto。如果archname是-,从标准输入读(对解压文件),或写到标准输出(对建立档案文件),这是当tar用作管道时的一个特性。 -t 以类似ls l格式列出磁带上的内容(备份在磁带上的文件名)。-u 将把比备份文件中更新的文件加入到备份文件中 。-x 从备份文件中取出文件 。-z 在tar创建备份文件时,使用gzip命令对它进行压缩;而从备份文件提取文件时,用gzip命令来解压备份文件。 -v 详细显示文件处理过程,用x选项解压文件的过程或存档文件的过程。 例:下面命令用 tar程序将所有*.help文件打包成bash.help.tar的备份文件。$ tar -cvf bash.help.tar *.help例:下面命令用 tar程序来解开 linux内核包文件linux-2.6.15.tar.gz。 $ tar -zxvf linux-2.5.15.tar.gz5.7 RPM包管理RPM 指的是RedHat Package Manager 的缩写,它是由RedHat公司所开发的工具。 通过rpm的管理,对于普通用户来说,RPM 简化了系统更新。对于开发者来说,RPM允许把软件编码和程序打包,然后提供给终端用户。 在大多数Linux发行版中,工具yum或yumex可以实现Linux系统中已安装软件包的更新。RPM 维护一个已安装软件包和它们的文件数据库,可以使用简短的命令就可完成安装、删除安装、查询、校验、升级 RPM 软件包。RPM 有五种基本操作模式(不包括软件包构建):安装、删除安装、升级、查询和校验。想了解完整的选项和细节,请使用 rpm -help 命令。RPM包的名称有其特有的格式,如典型的RPM软名称类似于: linpio-1.0-i386.rpm该文件名包括软件包名称“linpio”;软件的版本“1.0”。其中包括主版本号和次版本号;“i386”是软件所运行硬件平台;最后“rpm”做为文件的扩展名,代表文件的类型为RPM包。命令语法: rpm options rpm-filename 常用选项: -v显示安装过程的详细信息。-h显示安装进度。-a查询所有安装的软件包。-f filename 查询指定文件名的软件包。-p rpm-filename 查询指定的软件包。-d只有列出文件。-i显示软件包信息,包含名称、版本和描述。-l列出软件包的文件 。-R列出相关的软件包。-s显示软件包内文件的状态。 -U rpm-filename升级指定的软件包。 -q使用交互模式。-e rpm-filename删除指定的软件包。-F rpm-filename更新指定的软件包。-i rpm-filename安装指定的套件。例:安装apache-2.2.4软件包。$ rpm ivh apache-2.2.4例:安装并更新apache-2.2.4包。$ rpm Uvh apache-2.2.4例:删除软件包,当我们要移除套件时可以使用这个命令。 $ rpm e apache-2.2.4实验内容1. 登录到你的Linux系统。2. 以GPA作为关键字排序文件newSmallFile中的数据,忽略空格。给出会话过程。3. 搜索你的主目录,找到所有的HTML和C程序文件(文件有.html、.htm或.c扩展名),显示符合要求的文件路径和文件名。给出你的会话。4. 给出命令,搜索主目录,显示创建时间在/etc/passwd之后的文件及其路径。5. 如下命令完成什么功能?grep /A-H/ studentsgrep /A,H/ students6. 给出一条命令,在主目录下显示所有文件中包含字符串“linux”的文件名。7. 下面的命令在什么地方:ftp、ssh、tar、telnet、passwd和find? 给出会话过程。8. 用下面的smallFile文件(是前面smallFile文件的增强版),并完成以下任务。$ more smallFileJohnDoe ECE 3.54 111.222.3333JamesDavisECE3.71 111.222.1111AlDavisCS 2.63 111.222.2222AhmadRashidMBA 3.74 111.222.4444Sam Chu ECE 3.68111.222.5555Arun Roy SS 3.06 111.222.8888Rick Marsh CS 2.34 111.222.6666James Adam CS 2.77 111.222.7777Art Pohm ECE4.00 111.222.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论