Linux档案内容查询命令

Linux档案内容查询命令【Linux档案内容查询命令】以指定模式搜寻档案,并通知用户在什幺档案中搜寻到与指定的模式匹配的字元串,并列印出所有包含该字元串的文本行,在该文本行的最前面是该行所在的档案名称 。
基本介绍中文名:Linux档案内容查询命令
包含命令:grep,fgrep,egrep
适用範围:定位档案中特定的主题方面
功能:在目录结构搜寻档案执行指定操作
语法:find 起始目录 寻找条件 操作
grep、fgrep和egrep命令这组命令以指定模式搜寻档案,并通知用户在什幺档案中搜寻到与指定的模式匹配的字元串,并列印出所有包含该字元串的文本行,在该文本行的最前面是该行所在的档案名称 。grep命令一次只能搜寻一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字元串,它不识别正则表达式,是快速搜寻命令 。这组命令在搜寻与定位档案中特定的主题方面非常有用 。要搜寻的模式可以被认为是一些关键字,您可以用它们来搜寻档案中包含的这些关键字 。编写程式时,可以用它来寻找某一个函式,或是相关的词组 。grep命令的搜寻功能比fgrep强大,因为grep命令的搜寻模式可以是正则表达式,而fgrep却不能 。有关正则表达式请参见shell一章 。该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式 。例如,可以在搜寻到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜寻模式不匹配的文本行,或只简单地输出已搜寻到指定模式的档案名称,并且可以指定在查找模式时忽略大小写 。这组命令在指定的输入档案中查找与模式匹配的行 。如果没有指定档案,则从标準输入中读取 。正常情况下,每个匹配的行被显示到标準输出 。如果要查找的档案是多个,则在每一行输出之前加上档案名称 。语法:grep [选项] [查找模式] [档案名称1,档案名称2,……]egrep [选项] [查找模式] [档案名称1,档案名称2,……]fgrep [选项] [查找模式] [档案名称1,档案名称2,……]这组命令各选项的含义为:- E 每个模式作为一个扩展的正则表达式对待 。- F 每个模式作为一组固定字元串对待(以新行分隔),而不作为正则表达式 。- b在输出的每一行前显示包含匹配字元串的行在档案中的位元组偏移量 。- c 只显示匹配行的数量 。- i 比较时不区分大小写 。- h 在查找多个档案时,指示grep不要将档案名称加入到输出之前 。- l 显示首次匹配串所在的档案名称并用换行符将其隔开 。当在某档案中多次出现匹配串时,不重複显示此档案名称 。- n 在输出前加上匹配串所在行的行号(档案首行行号为1) 。- v 只显示不包含匹配串的行 。- x 只显示整行严格匹配的行 。- e expression 指定检索使用的模式 。用于防止以“-”开头的模式被解释为命令选项 。- f expfile 从expfile档案中获取要搜寻的模式,一个模式占一行 。对该组命令的使用还需注意以下方面:在命令后键入搜寻的模式,再键入要搜寻的档案 。其中,档案名称列表中也可以使用特殊字元,如“*”等,用来生成档案名称列表 。如果想在搜寻的模式中包含有空格的字元串,可以用单引号把要搜寻的模式括起来,用来表明搜寻的模式是由包含空格的字元串组成 。否则,Shell将把空格认为是命令行参数的定界符,而grep命令将把搜寻模式中的单词解释为档案名称列表中的一部分 。在下面的例子中,grep命令在档案example中搜寻模式“text file” 。$ grep ’text file’ example用户可以在命令行上用Shell特殊字元来生成将要搜寻的档案名称列表 。在下面的例子中,特殊字元“*”用来生成一个档案名称列表,该列表包含当前目录下所有的档案 。该命令将搜寻出当前目录下所有档案中与模式匹配的行 。$ grep data *特殊字元在搜寻一组指定的档案时非常有用 。例如,如果想搜寻所有的C程式源档案中特定的模式,您可以用“*.c”来指定档案名称列表 。假设用户的 C程式中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜寻并显示所有包含goto语句的代码行:$ grep goto *.c用户可以在命令行上键入搜寻模式,也可以使用-f选项从指定档案中读取要搜寻的模式 。在档案中,每个搜寻模式占一行 。如果经常要搜寻一组常见字元串时,这个功能非常有用 。在下面的例子中,用户要在档案exam中搜寻字元串“editor”和“create”,就把要搜寻的模式放置在档案mypats中,然后,grep命令从档案mypats中读取要搜寻的模式 。$ cat mypatseditorcreate$ grep -f mypats exam档案查找命令find命令功能:在目录结构中搜寻档案,并执行指定的操作 。此命令提供了相当多的查找条件,功能很强大 。语法:find 起始目录 寻找条件 操作说明:find命令从指定的起始目录开始,递归地搜寻其各个子目录,查找满足寻找条件的档案并对之採取相关的操作 。该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的複合条件 。逻辑运算符and、or、not的含义为:(1)and:逻辑与,在命令中用“-a”表示,是系统预设的选项,表示只有当所给的条件都满足时,寻找条件才算满足 。例如:$ find –name ’tmp’ –xtype c -user ’inin’该命令寻找三个给定条件都满足的所有档案 。(2)or:逻辑或,在命令中用“-o”表示 。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足 。例如:$ find –name ’tmp’ –o –name ’mina*’该命令查询档案名称为’tmp’或是匹配’mina*’的所有档案 。(3)not:逻辑非,在命令中用“!”表示 。该运算符表示查找不满足所给条件的档案 。例如:$ find ! –name ’tmp’该命令查询档案名称不是’tmp’的所有档案 。需要说明的是:当使用很多的逻辑选项时,可以用括弧把这些选项括起来 。为了避免Shell本身对括弧引起误解,在话号前需要加转义字元“\\”来去除括弧的意义 。例:$ find \\(–name ’tmp’ –xtype c -user ’inin’ \\) 寻找条件有以下选项: 首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:+20 表示20以后(21,22,23等)-20 表示20以前(19,18,17等)20 表示正好是201. 以名称和档案属性查找 。- name ’字串’ 查找档案名称匹配所给字串的所有档案,字串内可用通配符*、?、[ ] 。- lname ’字串’ 查找档案名称匹配所给字串的所有符号连结档案,字串内可用通配符*、?、[ ] 。-gid n 查找属于ID号为n的用户组的所有档案 。-uid n 查找属于ID号为n的用户的所有档案 。-group ’字串’ 查找属于用户组名为所给字串的所有的档案 。-user ’字串’ 查找属于用户名为所给字串的所有的档案 。-empty 查找大小为0的目录或档案 。-path ’字串’ 查找路径名匹配所给字串的所有档案,字串内可用通配符*、?、[ ] 。-perm 许可权 查找具有指定许可权的档案和目录,许可权的表示可以如711,644 。-size n[bckw] 查找指定档案大小的档案,n后面的字元表示单位,预设为b,代表512位元组的块 。-type x 查找类型为x的档案,x为下列字元之一:b 块设备档案c 字元设备档案d 目录档案p 命名管道(FIFO)f 普通档案l 符号连结档案(symbolic links)s socket档案-xtype x 与-type基本相同,但只查找符号连结档案 。2. 以时间为条件查找- amin n 查找n分钟以前被访问过的所有档案 。- atime n 查找n天以前被访问过的所有档案 。- cmin n 查找n分钟以前档案状态被修改过的所有档案 。- ctime n 查找n天以前档案状态被修改过的所有档案 。- mmin n 查找n分钟以前档案内容被修改过的所有档案 。- mtime n 查找n天以前档案内容被修改过的所有档案 。3. 可执行的操作- exec 命令名称 {} 对符合条件的档案执行所给的Linux 命令,而不询问用户是否需要执行该命令 。{}表示命令的参数即为所找到的档案;命令的末尾必须以“ \\;”结束 。- ok 命令名称 { } 对符合条件的档案执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令 。- ls 详细列出所找到的所有档案 。- fprintf 档案名称 将找到的档案名称写入指定档案 。- print 在标準输出设备上显示查找出的档案名称 。- printf 格式 格式的写法请参考有关C语言的书 。例1:查找当前目录中所有以main开头的档案,并显示这些档案的内容 。$ find . - name ‘main*’ - exec more {} \\; 例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o档案 。$ find . \\(- name a.out - o - name ‘*.o’\\)\\> - atime +7 - exec rm {} \\;说明如下: 命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的档案 。\\(和\\)表示括弧(),其中的“\\”称为转义符 。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途 。“- name a.out”是指要查找名为a.out的档案;“- name ‘*.o’”是指要查找所有名字以 .o结尾的档案 。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的档案,find在当前目录及其子目录下找到这佯的档案之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该档案执行命令rm(- exec rm{ }\\;) 。其中{ }代表当前查到的符合条件的档案名称,\\;则是语法所要求的 。上述命令中第一行的最后一个\\是续行符 。当命令太长而在一行写不下时,可输入一个\\,之后系统将显示一个>,指示用户继续输入命令 。locate命令locate命令用于查找档案,它比find命令的搜寻速度快,它需要一个资料库,这个资料库由每天的例行工作(crontab)程式来建立 。当我们建立好这个资料库后,就可以方便地来搜寻所需档案了 。该命令的一般形式为:locate 相关字例如:查找相关字issue$ locate issue/etc/issue/etc/issue.net/usr/man/man5/issue.5/usr/man/man5/issue.net.5。